반응형

【 아두이노 기초 】 #24 DC 모터 제어 하기 4

 이번 시간 부터는 DC모터를 RC카 등에 응용 할 수 있도록 본격적으로 제어해보는 실습을 가져보자. 


※ 일반적으로 소형 DC 모터라도 기어박스가 달린 모터를 제어할 때는 소모전류를 체크 해야 한다. 아두이노 포트의 출력은 40mA로 매우 제한 적이기 때문에 포트에서 직접 모터로 출력을 연결 할 경우 아두이노 포트나 주변회로가 손상 될 수 있으며 모터 또한 미약한 전류로는 돌릴 수 없게 된다. 


 이를 보완 하기 위해 모터에 충분한 전류를 공급해 줄 수 있는 IC가 개발되어 있다.  이런 모터 드라이버용 IC (본 실험에서는 L293D) 를 이용해서 모터를 구동해 보고자 한다. 


 모터제어의 핵심은 정회전으로 돌릴 것인가? 역회전으로 돌릴 것인가? 같은 "방향제어"와 "속도 제어" 인데,  H 브릿지라고 불리는 아래 그림과 같은 간단한 회로를 통해 방향제어가 가능하며, 이런 H 브릿지 회로가 두 개(2채널) 들어가 있는 IC가 바로 L293D IC이며, PWM 신호입력을 통해 속도 제어 까지 가능하다. 


※ H - 브릿지 회로 (모터 구동 회로)



위 그림에서 스위치 1번과 4번을 닫을 때(2,3번은 오픈) 전류의 흐름으로 인해 한 방향으로 회전 하기 시작하며 , 방향을 반대 방향으로 전환 하려고 할 때는 2번과 3번 스위치를 닫으면(1, 4번은 오픈) 방향전환이 이루어진다. 

 만약 그 이외의 경우는(1,2번 닫고 3,4 오픈 /  1,2번 오픈 3,4 닫기 / 모두 오픈) 모터가 회전 하지 않는다(정지)




회로 연결도가 알파벳 H를 닮았다 하여 'H-bridge' 라고 하며, 아래 그림의 TR 처럼 베이스 단자를 통해 스위치의 ON/OFF를 전자적으로 제어 할 수 있다.


이러한 H브릿지 기능을 포함 하고 속도 제어 까지 가능 하도록 만들어진 IC가 바로 L293D (시리즈) IC이며,  이를 활용하여 DC 모터를 제어해 보도록 하자.




▶ L293D 모터 제어 드라이버 IC :



H 브릿지 회로가  2개(2채널) 들어가 있으며, IC 이미지에서 처럼 좌우측 으로 구분 되어 있다.  


정방향 회전 (정, 역방향은 연결에 따라 기준이 달라짐)

 위 그림을 통해 왼쪽의 1번 채널을 살펴 보자.  Input 1으로(2번 핀,1A)  High 신호가 입력이 되면 VCC2(8번핀) 으로 연결된 별도 공급의 모터 전원이 3번핀(1Y)에서 나와서 DC motor를 거치고 6번핀(2Y) 으로 빠져 나가면서 모터를 (예를 들어)정방향으로 회전 시킨다.  이때 Input 2 (7번핀, 2A)는 Low 신호 여야 한다. 


 방향 회전 

 Input 1으로(2번 핀,1A)은 Low 신호 , Input 2 (7번핀, 2A)는 High 신호 입력이 되면 VCC2(8번핀) 으로 연결된 별도 공급의 모터 전원이 6번핀(2Y)에서 나와서 아까와는 반대 방향으로 DC motor를 거치고 3번핀(1Y)으로 빠져 나가면서 모터를 역방향 회전 시킨다.  


L293D IC는 이렇게 제어 가능한 H-브릿지 채널이 구조상 좌측에 한 개 , 우측에 한 개,  총 두 개로 구성되어진 IC이다.  

상세한 스팩과 설명을 아래에 이미지로 다시 정리하였다. 





▶ 실습 목표 :  

  모터를 한 쪽 방향으로 회전을 시키고, 가변저항 조절을 통해 회전하는 속도를 제어 하라 (정지~기기 최대 속도) 



실습 회로도면 :

  (이미지 클릭하면 확대 가능)






▶ 부대품 목록 : 아두이노 보드, 브레드 보드


▶ 부품 목록    : L293D IC, DC 모터, 10KΩ~500KΩ 사이 아무거나


▶ 실습 절차  : 

 1. 회로도를 참고하여 모터 와 부품들을 연결한다.
 
 2. 회로 연결에서 VCC1(IC의 16번 핀)에 아두이노의 +5V 단자를 연결하고, 모터 구동을 위한 VCC2(IC의 8번 핀)에는 모터 구동하기에 무리가 없는 4.5V~36V 사이의 별도 전원을 공급한다. 

 3. 회로의 모든 GND(그라운드, - 단자)는 하나로 연결 한다. 

 4. 속도 제어를 위해서는 PWM신호 출력이 가능한 아두이노 포트를 사용해야 한다. (디지털 포트중 '~'물결 무늬가 표시된 포트가 PWM 출력이 가능한 포트 이다)  따라서 IC의 1번핀(Enable 단자)에는 반드시 아두이노의 PWM 포트를 연결하도록 한다. (~3,~5,~6,~9,~10,~11 포트 중 아무거나 사용해도 무방) 

 5. 모터 연결선 +,- 두 가닥은 PWM 기능과는 무관 함으로 디지털 포트 중, 아무 포트에 연결 하도록 한다. 


▶ 프로그램 (코드& 설명) : 


int in1=7;  

int in2=8;

int MotorA=6;          // 모터 연결 핀을 정의한다.

int pwmA;


void setup() {

  pinMode(in1, OUTPUT);  // L293D의 1번 채널의 입력 1

  pinMode(in2, OUTPUT);  // L293D의 1번 채널의 입력 2

  pinMode(MotorA, OUTPUT);


}

void loop() {

  digitalWrite(in1, HIGH); 

  digitalWrite(in2, LOW);  

  // 정방향(in1=HIGH ,in2= LOW)

  // 역방향(in1=LOW ,in2= HIGH)

  // 모터선 연결에 따라 반대 방향이 될 수 있다.  

  

  pwmA = analogRead(A0)/4; // 속도 제어, 0~256 값을 넣기위해 '/4'함

  analogWrite(MotorA,pwmA); // 모터를 회전시킴 & 속도를 결정   

  delay(20);                         //출력값이 적용 될 수 있는 시간을 준다 

}


▶ 실행 영상 : 






▶ 아두이노 코드 다운로드 : 


DCmortorA.ino



반응형
반응형

【 아두이노 기초 】 #23

 서보 모터 제어 1

 이번 시간은 서보 모터를 구동해 보는, 실습 첫 시간을 가져본다. 

서보(Servo) 모터는 "따른다, 추종한다"라는 의미의 이름을 가진 모터로, 시스템이 요구하는 특정 위치로 정확하게 이동하기에 적합한 모터이다. 

 선풍기, 믹서기에서 처럼 특정위치 제어가 불필요하고 한방향으로 일정하게 회전시키면서 사용자가 켜고 끄는 제어를 위해서는 DC모터를 사용한다. 

 그러나, 프린터의 헤드, CCTV 카메라, 캠코더와 같은 내부 명령에 따라 특정 위치와 속도를 제어하기 위해서는 이런 서보모터를 사용하게 된다. 

▶ Servo 모터 제어 회로도 :

 

 1. 서보 모터 동작 원리 설명 

 서보 모터는 아래 처럼 펄스의 폭을 이용해 제어(PWM 신호)를 하게 되는데, 펄스폭이 1.0 ms 이면 모터 회전축의 위치가 제일 좌측에 위치하고, 1.5ms 이면 가운데, 2.0ms 이면 제일 우측에 위치하는 특성을 가진 모터이다. 

또한 그 사이의 시간값에 따라 각각 위치하게 된다. 다만, 제조회사별 모터의 종류와 연결된 회로 및 프로그램에 따라 시간값의 범위에 변동이 있을 수 있다. 

 

  아래 프로그램에서는 이런 위치에 대한 제어 코드가 보이지 않는데, 이는 프로그래밍을 간편하게 작성 하도록 하기위해 다음과 같은 함수를 사용하기 때문이다. 

 "servo.write(angle) " 

 : angle에 각도 값을 넣어 주면 해당하는 각 위치로 회전축이 회전한다. 이 함수를 사용하기 위해서는 <Servo.h> 헤더파일을 선언하여 사용해야 한다. 

▶ 부대품 목록 : 아두이노 보드, 브레드 보드

▶ 부품 목록    :  Servo 모터, 전원을 보강해줄 콘덴서 100 ㎌ 이상 아무거나

▶ 실습 절차  : 
 1. 위 회로도를 참고하여 모터 와 부품들을 연결한다. 
 2. 서보 모터는 세개의 라인이 있으며, +,- 전원 라인과, 제어를 위한 하나의 신호 라인으로 구성 되어 있다. 전원라인은 아두이노의 +5V 와 GND 단자에 연결하고, 신호라인은 PWM 신호 출력이 가능한 디지털 포트에 연결한다.
( 위 회로에서는 9번핀 보통 "~" 이 그려져 있는 포트가 PWM 신호 출력이 가능한 단자를 표시한 것이다.  )

 3. 위 회로에서 콘덴서는 반드시 달아주어야 하는 것은 아니나, 대개 모터가 연결 된 회로에서 모터의 출력을 보완해 주는 용도로 콘덴서를 전원라인에 연결해주는 것이 일반적이다. 

 
 4. 아래 프로그램 코드를 작성해서 실행해 본다.

▶ 실습 목표  : 

  1. 서보모터를 180도 회전 시켜 본다(위치가 180도 가 되면 자동으로 원위치 함)

▶ 프로그램 (코드& 설명) : 

#include <Servo.h>    // 전용 서보 라이브러리 사용

#define servoPin 9     // 서보 모터핀을 지정

Servo servo;      // 서보라이브러리 변수를 초기화한다

int pos=0;        // 현재 각도를 저장할 변수를 지정한다

void setup() {

  servo.attach(servoPin);   // 서보모터 핀을 설정한다 (현재 9번 핀)

}

void loop() {

  for(pos=0; pos < 180; pos +=1)

  {      servo.write(pos);       // 서보모터의 각도를 1씩 증가

    // 서보 모터의 각도가 변하는 것을 기다린다.  0.015초 시간 지연한다

      delay(50);

  }

}

 

▶ 실행 영상 : 

※ 프로그래밍에 의해 '180도' 에 다다르면, 자동으로 '0도' 로 회전하는 특성이 있다. 

▶ 아두이노 코드 다운로드 : 

sketch_ServoMotor.ino
다운로드

반응형
반응형

【 아두이노 기초 】 #22 DC 모터 제어 하기 3

 이번 시간은 DC모터를 시리얼 통신(창)을 이용해 제어해보자, 입력값에 따라 속도 조절도 가능하다.

(관련 내용은 앞의 DC모터 자료를 참고 : http://rasino.tistory.com/133 )


※ 모터를 다룰 때는 주의 할 것은 코일로 이루어진 모터에 전류를 흘릴 경우 반대방향으로 기전력(역기전력)이 발생하게 되는데 이를 방지하기 위해 모터와 병렬로 다이오드를 반드시 달아 주어야 한다.  그래야 주변 회로(TR, FET 등)가 손상되지 않는다. 



▶ DC 모터 제어 회로도 :




▶ 부대품 목록 : 아두이노 보드, 브레드 보드


▶ 부품 목록    : DC 모터, 100Ω (전류 제한용도), NPN형 TR, 정류용 다이오드(1N4001~4007, 아무거나) 


▶ 실습 절차  : 

 1. 회로도를 참고하여 모터 와 부품들을 연결한다.
 
 2. 저항은 전류제한(+,- 쇼트 방지용) 용도로 사용하기 위함 임으로 100옴 
    정도의 작은 저항을 사용하면 된다. 따라서 만약 100옴의 저항이 없다면, 
    50옴, 80옴, 120옴, 200옴 등의 값이 작은 저항을 사용하면 문제가 없다. 

 3. TR은 스위치 작용을 위해 연결 한 것임으로 모델 종류에 상관 NPN 타입을
  사용하면 된다. 단, TR의 극성에 주의 한다. B(베이스 단자), 
   E(에이터 단자), C(콜렉터 단자)

 4. 아래 프로그램 코드를 작성해서 실행해 본다.

 5. 아래와 같이 시리얼 모니터 창을 열어 회전값을 입력해 본다.



▶ 실습 목표  : 




▶ 프로그램 (코드& 설명) : 


int motorPin =3;    // 모터 연결 핀을 정의한다.

void setup() {

   pinMode(motorPin, OUTPUT);   //모터 연결핀을 출력으로 설정

   Serial.begin(9600);        // 시리얼 통신을 초기화 한다

   Serial.println("Speed 0 to  255"); // 입력범위를 화면에 표시한다

}

void loop() {

  if(Serial.available())    // 시리얼 데이터가 있으면 실행한다

  {

    int speed = Serial.parseInt(); // 시리얼 입력 데이터를 정수로 저장

    if(speed> 0 && speed <= 255)

    {

      analogWrite(motorPin,speed); // 시리얼 입력데이터만큼 출력

      Serial.println(speed);   //현재 스피드를 출력한다

    }

  } 

}




▶ 실행 영상 : 







▶ 아두이노 코드 다운로드 : 


serial_Input_motorControl.ino





반응형
반응형

【 아두이노기초】#21 LCD쉴드이용하기III(keyPAD-키패드2)


   LCD 액정 디스플레이를 이용하기 위해서는 다소 복잡한 선 연결이 필요했다. 

(앞 강좌 참조: http://rasino.tistory.com/132 or http://rasino.tistory.com/133 참조 )

하지만 아두이노 우노 보드 위에 삽입되는 LCD 쉴드를 이용하면 간편히 연결되어 LCD 디스플레이 하기가 훨씬 간편해지는 장점이 있다.

이 외에 I2C모듈을 내장한 LCD의 경우 보다 적은 핀 연결이 가능하고 통신도 수월해지는 장점이 있다. 이번 시간에는 LCD shield (쉴드)의 키패드 (Keypad)를 다루어 보도록 하자


▶ LCD 키패드 쉴드( 1602) 와 키패드 실물 이미지 :



▶ 부대품 목록 : 아두이노 보드


▶ 부품 목록    : LCD키패드 쉴드( 1602 )  


▶ 실습 절차  : 

1. 실습목표

   - LCD 1번 줄에 ‘Push the buttons’ 를 출력한다 

   - LCD 2번 줄에 각 버튼을 누를 때 마다 버튼 이름이 출력 되도록 한다.

   - 커서 (9,1) 위치에 숫자를 표시하고 UP버튼은 1씩 증가, Down버튼은 1씩 감소 시킨다

   - LEFT, RIGHT 버튼으로 현재의 커서 위치를 좌우로 이동 시킬 수 있게

2. 실습절차

 - LCD 쉴드의 키패드는 A0 (아날로그 포트) 연결되어 있고 각 버튼 마다 출력 전압 값이 다르게 설계되어 있다.

 - 아날로그 포트(A0)10비트(2^10=1023)의 데이터 값으로 ·출력 되는데 각 버튼 마다 다른 값이 입력되는 것이다

 - 아래 각 버튼 별 ADC표를 참고하고 switch~case구문을 이용하여 버튼이 눌러지면 해당 버튼 이름을 표시하라

 - 각 버튼의 ADC 값은 Serial 통신() 화면을 통해 아래와 같은지 확인해보고, switch~case구문에 사용될 적정 범위 값을 임의로 정하라.  (RST 버튼은 보드의 Reset 버튼과 같은 기능-설정 되어 있음)


※ 버튼 이름 



▶ 버튼 별 전압 값과 변환 입력되는 ADC값 표


▶ LCD 함수 표 ( LiquidCrystal.h 파일 포함된 )



▶ 프로그램 (코드& 설명) : 

#include <LiquidCrystal.h>

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);  // LCD 쉴드 제어를 위한 핀 설정

int lcd_key     = 0;

int adc_key_in  = 0;

int counter = 0;           // 숫자 증감을 위한 변수

int cur = 0;                 // cursor 위치값 변수

#define btnRIGHT  0

#define btnUP     1

#define btnDOWN   2

#define btnLEFT   3

#define btnSELECT 4

#define btnNONE   5

int read_LCD_buttons()  {

adc_key_in =analogRead(0); // 키패드와 연결된 AO핀의 아날로그값                        

// 읽어온 아날로그의 값에 따라 눌려진 버튼을 판단함

 if (adc_key_in > 1000 ) return btnNONE;   // 모니터링 값 : 1023

 if (adc_key_in < 20)   return btnRIGHT// 모니터링 값 :    0 

 if (adc_key_in < 150)  return btnUP;     // 모니터링 값 100

 if (adc_key_in < 300)  return btnDOWN;   // 모니터링 값 :  258

 if (adc_key_in < 500)  return btnLEFT;   // 모니터링 값 :  411

 if (adc_key_in < 700)  return btnSELECT; // 모니터링 값 :  641 

 return btnNONE; }            // 기타의 경우 btnNONE 리턴함

void setup()

{

 lcd.begin(16, 2);                      // LCD 초기화

 lcd.setCursor(0,0);                    // LCD 출에 출력

 lcd.print("Push the buttons");     // LCD 출력 메세지

}


void loop() {

 lcd.cursor();                     // LCD에 커서를 표시

 lcd.setCursor(9,1);            // (9,1) 위치로 커서를 옮김

 lcd.print(counter);            // (9,1) 위치에 숫자를 표시

 lcd.setCursor(0,1);            // 2번째 줄 1번째 칸에 커서 위치시킴   

 lcd.print(counter);

 lcd_key = read_LCD_buttons(); // 눌려진 버튼이름 출력 하는 함수 호출

switch (lcd_key) {         // 버튼 확인을 위한 스위치 구문

case btnRIGHT:      {            // 오른쪽 버튼

     lcd.print("RIGHT  ");

     lcd.setCursor(cur++,1); // 버튼이 눌러질때 마다 커서를 우로1칸이동

     delay(500);

     break;         }

   case btnLEFT:        {            // 왼쪽 버튼

     lcd.print("LEFT   ");

     lcd.setCursor(cur--,1);   // 버튼이 눌러지는 동안 빠른 루틴 회전에

     delay(500);                // 의한 입력 방지를 위해 delay  삽입

     break;           }

   case btnUP:          {            // 위쪽 버튼

     lcd.print("UP    ");

     lcd.setCursor(9,1);

     lcd.print(counter++);    // 버튼 누를 때 마다 숫자 값을 +1 증가

     delay(500);

     break;     }

   case btnDOWN:     {            // 아래쪽 버튼

     lcd.print("DOWN  ");

     lcd.setCursor(9,1);    

     lcd.print(counter--);     // 버튼 누를 때 마다 숫자 값을 -1 씩 감소

     delay(500);       

     break;     }   

   case btnSELECT:     {            // 선택 버튼

     lcd.print("SELECT");

     break;         }

   case btnNONE:       {           // 아무것도 누르지 않음

     lcd.print("NONE  ");

     break;         }     

    }   

 }


▶ 실행 영상 : 





▶ 아두이노 코드 다운로드 : 


LCDshield_Keypad_control2.ino



반응형
반응형

【 아두이노 기초 】 #19 DC 모터 제어 하기 2


 DC모터를 제어 해보자!  DC 모터는 전류가 흐르는 방향으로 회전을 하기 때문에 포트의 출력을 제어하여 모터의 회전 방향을 결정할 수 있다.

이번에는 가변 저항을 연결하여 모터의 속도를 제어 해보도록 하자!   


※ 모터를 다룰 때는 주의 할 것은 코일로 이루어진 모터에 전류를 흘릴 경우 반대방향으로 기전력(역기전력)이 발생하게 되는데 이를 방지하기 위해 모터와 병렬로 다이오드를 반드시 달아 주어야 한다.  그래야 주변 회로(TR, FET 등)가 손상되지 않는다. 



▶ DC 모터 제어 회로도 :




▶ 부대품 목록 : 아두이노 보드, 브레드 보드


▶ 부품 목록    : DC 모터, 100Ω (전류 제한용도), NPN형 TR, 정류용 다이오드(1N4001~4007, 아무거나) , 100KΩ (10Ω~500KΩ 등, 가지고 있는 가변저항 사용)


▶ 실습 절차  : 

 1. 회로도를 참고하여 모터 와 부품들을 연결한다.
 
 2. 저항은 전류제한(+,- 쇼트 방지용) 용도로 사용하기 위함 임으로 100옴 
    정도의 작은 저항을 사용하면 된다. 따라서 만약 100옴의 저항이 없다면, 
    50옴, 80옴, 120옴, 200옴 등의 값이 작은 저항을 사용하면 문제가 없다. 

 3. TR은 스위치 작용을 위해 연결 한 것임으로 모델 종류에 상관 NPN 타입을
  사용하면 된다. 단, TR의 극성에 주의 한다. B(베이스 단자), 
   E(에이터 단자), C(콜렉터 단자)

 4. 아래 프로그램 코드를 작성해서 실행해 본다.



▶ 프로그램 (코드& 설명) : 


int motorPin =3;                     // 모터 연결 핀을 정의한다.

void setup() {

 pinMode(motorPin, OUTPUT);   //모터 연결 핀을 출력으로 지정함

}

void loop() {

 int reading=analogRead(A3);   // 아날로그포트에서 최대 2^8 (256)      // 값을 읽어온다

 digitalWrite(motorPin,HIGH);   // 읽어 들인 데이터 만큼 HIGH유지

 delay(reading);                    

 digitalWrite(motorPin,LOW);  //(255-읽어온 데이터)만큼 LOW 유지

 delay(255-reading);

}


  가변저항으로 인해 분배되어 들어 오는 값, 즉 전압에 의한 레벨값으로 2^8비트 값(최대값이 256 값-0~255) 을 읽어 들이는데 이 값을 가지고 PWM 신호 듀티비를 조절하여 모터의 속도를 조절 하는 방식이다.

 

( PWM 신호와 같이 듀티비(High와 Low 신호 비율) 로 모터의 회전 속도를 제어하는 것이다. 

 High 신호가 Low 신호 보다 출력 시간을 길게 하면 상대적으로 모터가 빨리 회전 한다.


▶ 실행 영상 : 





▶ 아두이노 코드 다운로드 : 


sketch_motor2_control.ino


반응형

【 아두이노 기초 】 #18 DC 모터 제어 하기 1

카테고리 없음 2018. 8. 30. 19:28 Posted by 엑소더스팩토리
반응형

【 아두이노 기초 】 #18 DC 모터 제어 하기 1



 DC모터를 제어 해보자!  DC 모터는 전류가 흐르는 방향으로 회전을 하기 때문에 포트의 출력을 제어하여 모터의 회전 방향을 결정할 수 있다.   


※ 모터를 다룰 때는 주의 할 것은 코일로 이루어진 모터에 전류를 흘릴 경우 반대방향으로 기전력(역기전력)이 발생하게 되는데 이를 방지하기 위해 모터와 병렬로 다이오드를 반드시 달아 주어야 한다.  그래야 주변 회로(TR, FET 등)가 손상되지 않는다. 



DC 모터 제어 회로도 :








▶ 부대품 목록 : 아두이노 보드, 브레드 보드


▶ 부품 목록    : DC 모터, 100Ω (전류 제한용도), NPN형 TR, 정류용 다이오드(1N4001~4007, 아무거나) 



▶ 실습 절차  : 

 1. 회로도를 참고하여 모터 와 부품들을 연결한다.
 
 2. 저항은 전류제한(+,- 쇼트 방지용) 용도로 사용하기 위함 임으로 100옴 
    정도의 작은 저항을 사용하면 된다. 따라서 만약 100옴의 저항이 없다면, 
    50옴, 80옴, 120옴, 200옴 등의 값이 작은 저항을 사용하면 문제가 없다. 

 3. TR은 스위치 작용을 위해 연결 한 것임으로 모델 종류에 상관 NPN 타입을
  사용하면 된다. 단, TR의 극성에 주의 한다. B(베이스 단자), 
   E(에이터 단자), C(콜렉터 단자)

 4. 아래 프로그램 코드를 작성해서 실행해 본다.



▶ 프로그램 (코드& 설명) : 


int motorPin =3;    // 모터 연결 핀을 정의한다.


void setup() {

   pinMode(motorPin, OUTPUT);   //모터 연결핀을 출력으로 설정한다

}


void loop() {

  // PWM 형태로 모터를 구동한다( duty rate= 50)

  digitalWrite(motorPin,HIGH);    // 모터 연결핀에 5[v]를 출력한다

  delay(10);                      // 10ms 시간 지연한다

  digitalWrite(motorPin,LOW);     // 모터 연결핀에 0[v]를 출력한다

  delay(10);                      // 10ms 시간 지연한다

}


  PWM 신호와 같이 듀티비(High와 Low 신호 비율) 로 모터의 회전 속도를 제어하는 것이다. 

 High 신호가 Low 신호 보다 출력 시간을 길게 하면 상대적으로 모터가 빨리 회전 한다. 


▶ 실행 영상 : 





▶ 아두이노 코드 다운로드 : 


sketch_motor1.ino

반응형
반응형

【 아두이노 기초 】 #17 문자 LCD 쉴드 이용하기



 LCD 액정 디스플레이를 이용하기 위해서는 다소 복잡한 선 연결이 필요했다. 

(앞 강좌 참조: http://rasino.tistory.com/128 )

하지만 아두이노 우노 보드 위에 삽입되는 LCD 쉴드를 이용하면 간편히 연결되어 LCD 디스플레이 하기가 훨씬 간편해지는 장점이 있다.

이 외에 I2C모듈을 내장한 LCD의 경우 보다 적은 핀 연결이 가능하고 통신도 수월해지는 장점이 있다. 


※ 쉴드(Shield)는 특정 기능을 갖는 보드로, 아두이노와 결합하여 호환 가능한 여러 부가 모듈과 연결하는 커넥터 구조를 포함한 부품이다. 특정 입출력 기능을 담당하는 부품으로, 아두이노에서 중요한 부품 중 하나이다. 아두이노의 입출력 커넥터에 연결할 수 있는 커넥터를 사용하고 각 부분품은 커넥터에 연결함으로써 적층 구조로 서로 연결한다.

예시 그림) 




▶ LCD 키패드 쉴드( 1602) 실물 이미지 :




▶ 부대품 목록 : 아두이노 보드


▶ 부품 목록    : LCD키패드 쉴드( 1602 )  


▶ 실습 절차  : 



▶ 프로그램 (코드& 설명) : 

#include <LiquidCrystal.h>       // LCD를 사용하기 위한 헤더파일

LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // 사용할 핀 설정(주의:쉴드 핀 배열 임)

int i = 0; // 카운트를 할 변수

void setup(){

   lcd.begin(16, 2);                  // 16자리 2줄을 사용하도록 초기화

   lcd.setCursor(0,0);                // 첫째 줄 맨 처음으로 커서 위치 설정

   lcd.print("Welcome Taegu!");  // 출력할 문자

}

void loop(){

  for(i=0;i<=16;i++ )    {

    lcd.setCursor(i,0);               // 1씩 증가시킨 위치로 커서가 이동

    lcd.print("Welcome Taegu!");  // 메세지 입력  

    lcd.setCursor(i,1);

    lcd.print("electronics"); 

    delay(250);               // 글자가 너무 빨리 지나가니 딜레이 설정

    lcd.clear();

 }

        //문자가 오른쪽 끝까지 갔으니 1씩 감소시켜 좌로 이동

  for(i=16;i>=0;i-- )    {

    lcd.setCursor(i,0);                   // 1씩 증가시킨 위치로 커서가 이동

    lcd.print("Welcome Taegu!");    // 메세지 입력

    lcd.setCursor(i,1);

    lcd.print("electronics"); 

    delay(250); 

    lcd.clear(); 

  }

}





▶ 실행 영상 : 





▶ 아두이노 코드 다운로드 : 


Lcd_control3_use_shield.ino









반응형
반응형

【 아두이노 기초 】 #15 문자 LCD 제어 실습 II




 LCD 액정 디스플레이를 이용하여 문자를 출력 해보는 실습을 해보자.

앞 강좌에서는 16by2 LCD와 16by4 LCD를 사용하는 법에 대해 설명하였는데, 이번강좌에서는 사용자 정의 문자라고 할 수 있는 특수한 캐릭터(문자)를 직접 만들어 출력해보도록 하자 (앞 강좌 참조: http://rasino.tistory.com/128 )



▶ 실물 회로도면 :


※ 위 LCD는 I2C 통신 칩이나 기타 부가 장치가 없는 순수한 문자 LCD이다. 때문에 브레드 보드 접속을 위한 핀도 연결 되어 있지 않은 경우 아래와 같은 핀해더를 구해서 16핀만 남겨놓고 자른 다음 LCD 아래쪽에서 부터 연결하여 납땜을 하면 된다.

▶ 부대품 목록 : 아두이노 보드, 브레드 보드


▶ 부품 목록    : 16by2 또는 16by4 LCD , 핀헤더, 반고정 저항 (10KΩ) 


▶ 회로 도면   : 아래를 참조하여 정확하게 연결하도록 한다.



 LCD 핀부위를 확대한 이미지는 아래와 같다  (7,8,9,10 핀은 사용하지 않는다)


LCD와 아두이노 핀 연결 부위 상세 이미지



< LCD 핀 배열 >

16by4와 기본 핀 배열은 같다.




▶ 실습 절차  : 
 (하드웨어)

 (프로그램설치)

 폰트를 이용하지 않고 직접 문자를 만들어 출력하기 위해서는 배열값을 일일이 만들어 주어야 하기 때문에 아래와 같은 프로그램을 이용하면 쉽게 만들어 사용하기 편리하며 코드 값 복사하기에도 간편하다.


 - 5 x 8 캐릭터 디자이너 프로그램 다운로드 (☜ 클릭):



 다운로드 받은 프로그램을 실행시키면 아래와 같은 화면이 뜰 것이다.



그러면 아래 설명을 참고하여 다양한 형태의 캐릭터를 만들어 볼 수 있다.





▶ 프로그램 (코드& 설명) : 

5x8 LCD Display Character Designer툴을 이용한 캐릭터출력

#include <LiquidCrystal.h>  

LiquidCrystal lcd(2,3,4,5,6,7);

byte SpecialChar0[8]={        //Custom Character #0

 B00100,

 B00100,

 B01110,

 B10101,

 B00100,

 B00100,

 B01010,

 B10001   };

// … 배열 1[8] ~  6[8] 까지 생략

byte SpecialChar7[8]= {        //Custom Character #7

 B00100,

 B10101,

 B01110,

 B00100,

 B00100,

 B00100,

 B11011,

 B00000   };  

 lcd.begin(CC,RR);

// CC 는 행(columns), RR는열 (rows) }


void setup(){

lcd.createChar(0, SpecialChar0);

lcd.createChar(1, SpecialChar1);

lcd.createChar(2, SpecialChar2);

lcd.createChar(3, SpecialChar3);

lcd.createChar(4, SpecialChar4);

lcd.createChar(5, SpecialChar5);

lcd.createChar(6, SpecialChar6);

lcd.createChar(7, SpecialChar7);

}

void loop() {

  lcd.setCursor(0,2);

  lcd.print  ("I'm Sung-sik KIM”);

  lcd.setCursor(0, 0);                     

 for(int i=0; i<16; i++)   {

   lcd.setCursor(1, 1);                   // 해당 행과 열로 커서 이동  

   lcd.write(i);                             // 상태 바 업데이트

   // 또는 이렇게 사용 lcd.write(byte(0));   … (byte(1));

  delay(300);                             // 0.3초간 지연 

  }   

}


※ 위 코드에서 만약 16by4 LCD(4줄 LCD)를 사용 한다면 lcd.begin(16,4)로 LCD 셋업 코드를 바꾸면 된다.  LCD 셀의 배열 위치값은 아래 이미지를 참조하라.




▶ 실행 영상 : 




위 캐릭터를 아래 영상처럼 애니메이션 효과로 처리한 영상이다.






▶ 아두이노 코드 다운로드 : 


LCD16by2_sign2.ino

LCD16by2_sign3.ino








반응형
반응형

【 아두이노 기초 】 #11 FND 구동 실습 II



 앞서 FND에 '0'이라는 숫자를 표시해 보았다.  이제 FND에 숫자 0부터 9까지 카운트를 해보도록 하자.


참조 링크 : FND 구동실습 I 



▶ 실물 회로도면 :




▶ 부대품 목록 : 아두이노 보드, 브레드 보드


▶ 부품 목록    : FND (507, Common Anode 타입, 공통단자 +전압 연결),  220Ω 


▶ 회로 도면   : 


※ FND 는 크게 Anode(# 507) 타입과 cathode (#500) 타입 두 가지로 나뉜다. cathode(음극) 타입은 공통단자가 GND(그라운드, : 흔히 말하는 -마이너스 단자 )로 연결시켜 사용하는 타입이다. 위 도면에서 FND 내부의 LED 방향을 유심히 살펴보자. 


▶ FND 세그먼트와 핀 배치  : 

▽ #507


▽ #500





▶ 프로그램 (코드& 설명) : 


// 공통단자가 +VCC 연결인 507 Anode 타입을

// 사용할 경우 위 코드처럼 LOW를 출력해야 

// 해당 세그먼트가 켜진다  



▶ 실행 영상 : 

  



 


※ 추가로 알파벳 대문자 혹은 소문자 출력도 코딩을 해보면 좋다.


▶ 아두이노 코드 다운로드 : 

sketch_FND0to9.ino




반응형
반응형

【 아두이노 기초 】 #10 FND 구동 실습 I


 아두이노 I/O 포트 제어를 통해 FND(7 segment display)를 제어 해보자.


▶ 실물 회로도면 :




▶ 부대품 목록 : 아두이노 보드, 브레드 보드


▶ 부품 목록    : FND (507, Common Anode 타입, 공통단자 +전압 연결),  220Ω 


▶ 회로 도면   : 


※ FND 는 크게 Anode(# 507) 타입과 cathode (#500) 타입 두 가지로 나뉜다. cathode(음극) 타입은 공통단자가 GND(그라운드, : 흔히 말하는 -마이너스 단자 )로 연결시켜 사용하는 타입이다. 위 도면에서 FND 내부의 LED 방향을 유심히 살펴보자. 


▶ FND 세그먼트와 핀 배치  : 

▽ #507


▽ #500





▶ 프로그램 (코드& 설명) : 


// 공통단자가 +VCC 연결인 507 Anode 타입을

// 사용할 경우 위 코드처럼 LOW를 출력해야 

// 해당 세그먼트가 켜진다  



▶ 실행 영상 : 


  FND에 숫자 '0'을 표시해보도록 하자.  기타 원하는 숫자 혹은 위치에 LED segment를 켜보도록 연습해본다.


 



※ 다음 글에서 이번 과제에 이은 FND 구동을 위한 응용 예제를 다루어 보도록 하겠다. 


▶ 아두이노 코드 다운로드 : 

sketch_FND.ino




반응형