반응형

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


반응형

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








반응형