반응형

【 아두이노 기초 】 #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





반응형
반응형

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


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

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

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

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


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



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


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


▶ 실습 절차  : 

1. 실습목표

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

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

2. 실습절차

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

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

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

 - 각 버튼의 ADC 값은 Serial 통신() 화면을 통해 확인하고 적정 범위 값을 임의로 정하라.


※ 버튼 이름 



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


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

#include <LiquidCrystal.h>

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

int lcd_key     = 0;

int adc_key_in  = 0;

#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); // 키패드와 연결된 A0핀의아날로그값                        

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

 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 출력 메세지

 Serial.begin(9600); 

 }

void loop() {

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

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

 switch (lcd_key)                    // 버튼 확인

 {

   case btnRIGHT:      {            // 오른쪽 버튼

     lcd.print("RIGHT ");

     Serial.println(adc_key_in);

     break;  

      }

   case btnLEFT:        {            // 왼쪽 버튼

     lcd.print("LEFT   ");

     Serial.println(adc_key_in);

     break;     

     }

   case btnUP:          {            // 위쪽 버튼

     lcd.print("UP    ");

     Serial.println(adc_key_in);

     break;

     }

   case btnDOWN:     {            // 아래쪽 버튼

     lcd.print("DOWN  ");

     Serial.println(adc_key_in);

     break;

     }

   case btnSELECT:     {            // 선택 버튼

     lcd.print("SELECT");

     Serial.println(adc_key_in);

     break;         }

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

     lcd.print("NONE  ");

     Serial.println(adc_key_in);

     break;      }     } 

}



▶ 실행 영상 : 




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


LCDshield_Keypad_control.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


반응형
반응형

【 아두이노 기초 】 #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








반응형
반응형

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



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

앞 강좌에서는 16by2 LCD를 사용하였고 이번에는 16by4 LCD를 사용해본다. 문자를 표시할 수 있는 줄(행)이 4줄이므로 더 많은 문자를 표시 할 수 있다. 

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



▶ 실물 회로도면 :


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

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


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


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



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


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



< LCD 핀 배열 >

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




▶ 실습 절차  : 



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



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




▶ 실행 영상 : 

  





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

LCD16by4_text_count.ino








반응형
반응형

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



 LCD 액정 디스플레이를 이용하여 문자를 출력 해보는 실습을 해보자. 연결핀수는 16핀이며 컬러가 아닌 단색에 그래픽이 아닌 문자 전용 LCD이다. 흔히 프린터 등의 디스플레이 장치로 많이 사용되는 LCD라고 생각하면 이해하기 쉬울 것이다.  



▶ 실물 회로도면 :


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

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


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


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



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


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



< LCD 핀 배열 >




▶ 실습 절차  : 



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




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




▶ 실행 영상 : 

  




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


LCD16by2_text_count.ino






반응형
반응형

【 아두이노 기초 】 #13 멜로디 출력 실습 II



 지난시간 스피커를 통해 멜로디를(Melody)를(도.레.미...)를 출력 출력해보았다. 이번 시간에는 국민 멜로디인 '학교종이 땡땡땡~'을 연주해보도록 하겠다.

동작이 잘 된다면 다른 멜로디도 작성해보면 재미 있을 것이다.



▶ 실물 회로도면 :



▶ 실제 회로 구성 모습 



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


▶ 부품 목록    : 스피커, 저항 (100Ω) 


▶ 회로 도면   : 


※ 스피커는 일단 타입의 소형 스피커 혹은 피에조 스피커 등 사용해보고 소리가 비교적 잘 들리는 것을 선택한다. 


▶ 실습 절차  : 



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


 


▶ 실행 영상 : 

  


제대로 동작 하려면, Pitches.h 라이브러리가 설치 되어 있어야 한다. 

라이브러리가 등록이 되어 있지 않으면 아래와 같은 에러가 나타난다. 


"exit status 1 보드 Arduino/Genuino Uno 컴파일 에러" 와 같은 에러가 나는 경우 아래 첨부파일에 있는 헤더파일(.h)을 아두이노 스케치의 라이브러리에 추가 해주어야 한다. 


만약 이와 같은 에러가 발생할 경우,  

아래 에러 해결 글을 참조 할 것




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


pitches.h

sketch_Melody2schoolbell.ino





반응형