반응형

【 아두이노 센서#34】 토양 센서( YL-38) Sensor 다루기 

 오늘은 토양의 수분을 감지해서 습도를 알아 낼 수 있는 센서에 다루어 보려 한다. 실제로 화분에 센서를 꽂아 넣고 습도를 측정한 후 미니 물펌프를 이용하면 화분의 수분이 건조해 질 때 마다 물을 공급해 질 수 있는 장치를 간단히 구현 할 수 있다.  이 장치에 대해서는 차기에 구현해서 올려 보도록 하고, 오늘은 습도센서 자체에 대해 알아보려 한다.




▶ 선수 학습 :

 없음. 


▶ 토양 습도 센서 사양 및 동작 특성




 습도 센서 종류가 아래처럼 두 가지 모델이 있는데, 별다른 기능의 차이는 없으며, 핀 배열이 조금 다를 뿐이다.





▶ 실습 목표 :  


1. 습도 센서의 작동 원리를 이해 할 수 있다. 


2. 센서로부터 받은 데이터 값을 시리얼 모니터로 표시 해볼 수 있다. ( 데이터 처리 가능)



▶ 실습 회로도면 :
  (이미지 클릭하면 확대 가능)



▶ 실습 절차  : 


1.    위 회로 연결도를 참고하여 부품들을 연결한다
2.    센서에다 이컵 혹은 티슈에 물을 적셔서 센서 습도를 조절하여 테스트 한다. 
3.   센서의 출력 단자 A0로 부터의 출력값을 아두이노의 A0포트로 입력 받아 시리얼 모니터를 통해 값의 변화를 확인 해 본다. 


▶ 프로그램 코드 및 설명 : 

/* 토양 습도 센서( Ground Humidity) 실험   */



#define A0Pin 0

int sensorVal = 0;



void setup( )  {

  Serial.begin(9600);

}


void loop() {

sensorVal = analogRead(A0Pin);  // 토양센서 센서값 읽어 저장

  delay(1000);

  Serial.print("Asensor = ");

  Serial.println(sensorVal);  // 0(습함) ~ 1023(건조)값 출력 

   

   // 습도 값에 따라 출력 처리 다르게 해줌

  if ( sensorVal <= 450) {    

    Serial.println(" Very Wet ! ");        

  }

  if (sensorVal > 500 && sensorVal <= 1000) {

    Serial.println(" It's OK ! ");    

  }

  else if ( sensorVal > 1000){

    Serial.println(" Very Dry ! ");    

  }

}



▶ 실행영상 :  

(전체화면 보기로 보세요)




▶ 아두이노 파일다운 :

GroundHumidity.ino



반응형
반응형

【 아두이노 센서#33】 인체감지 센서( HC-SR501) Sensor 다루기 



  오늘은 인체를 감지해서 신호를 내보낼 수 있는 센서에 대해 다루려고 한다.

모델 번호가 HC-SR501 인 센서는 아파트나 회사등 각종 건물 천정에 많이 부착되어 있어서 주변에서 많이 볼 수 있는 센서이기도 하다. 

 아파트 현관문이나 복도, 베란다 등에 사람이 감지되면 전등을 잠시 동안 켜주거나, 문이 닫힌 사무실 내의 움직임을 감지하는 방법용 등으로 많이 사용된다. 




▶ 선수 학습 :

 없음. 


▶ 충격 감지 센서 사양 및 동작 특성





▶ 실습 목표 :  


1. 인체 감지 센서의 작동원리에 대해 이해 할 수 있다. 


2. 센서에 부착된 가변저항과 점퍼선의 기능에 대해 이해 할 수 있다. 



▶ 실습 회로도면 :
  (이미지 클릭하면 확대 가능)







▶ 실습 절차  : 


1.    위 회로 연결도를 참고하여 부품들을 연결한다
2.    센서에 있는 두 개의 가변저항을 조절하여, 센싱되는 민감도와 출력값의 출력 시간을 조절 해본다.   
3.   트리거 모드 점퍼를 변경해서 실험해 본다.
( - Single Trig 모드 : 센서 출력이 HIGH가 되고, Delay Time이 끝나면 자동적으로 LOW가 되는 모드.
 - Repeat Trig 모드 : 센서 출력이 HIGH가 되고 Delay Time이 끝나도 만약 계속 인체 신호가 감지 된다면 LOW를 출력하지 않고 계속 HIGH를 출력하는 모드.)  

▶ 프로그램 코드 및 설명 : 

/* 인체 감지 센서(Shock Sensor) 실험   */


int Led = 8;

int SensorOut = 7;

int val;



void setup( )  {

  pinMode(Led, OUTPUT);

  pinMode(SensorOut, INPUT);

}


void loop() {


val = digitalRead(SensorOut);  // 적외선 센서값 읽어 저장

  if (val == HIGH)  {

    digitalWrite(Led, HIGH);

  }  

  else  {

    digitalWrite(Led, LOW);

  }

  delay(100);  

}



▶ 실행영상 :  

(전체화면 보기로 보세요)





▶ 아두이노 파일다운 :

HC-SR501.zip



반응형
반응형

【 아두이노 센서#31】 쇼크 센서( 충격감지) Shock Sensor 다루기 

  오늘은 쇼크센서라고 하는 충격 감지 센서에 대해 다루어 보려고 한다. 

틸트센서는 정해놓은 위치에 기울기가 바뀌면 스위치 기능 처럼 On / Off 할 수 있었다면, 쇼크센서는 외부 충격(흔들림, 떨어뜨림, 부딪힘)에 모두 반응 하는 센서이다.  다만, 충격의 강도나 크기 자체를 특정 할 수 없기 때문에 실험을 통해 반응하는 정도를 확인해보고, 필요하다면 다른 센서와 함께 보완적으로 사용하면 좋을 것이다.



▶ 선수 학습 :

 없음. 


▶ 충격 감지 센서 사양 및 동작 특성



▶ 실습 목표 :  


1. 외부 충격에 따라 센서가 반응 하는 정도를 살펴 볼 수 있다. 


2. 흔듬, 충격, 기울임 등 센서가 반을 할 수 있는 다양한 형태에 대해 실험 해 볼 수 있다. 



▶ 실습 회로도면 :
  (이미지 클릭하면 확대 가능)




▶ 실습 절차  : 


1.    위 회로 연결도를 참고하여 부품들을 연결한다
2.    외부 충격이나 흔듬, 기울이기 등 다양한 형태로 센서의 반응을 살펴 본다. 
3.   외부 충격이 있을 때 LED를 켜는 동작으로 프로그래밍 한다. (현재는 LED를 사용하지만 릴레이 등을 연결하여 더 큰 부품이나 회로를 제어 할 수 있다는 것을 이해한다.)

▶ 프로그램 코드 및 설명 : 

/* 충격 센서(Shock Sensor)의 동작을 LED로 확인해보기   */


int Shock = 3;

int ShockLED = 7;


void setup( )  {

  pinMode(Shock, INPUT);

  pinMode(ShockLED, OUTPUT);

}


void loop() {


  if (digitalRead(Shock) == HIGH)    {

      digitalWrite(ShockLED, HIGH);

delay(30);

  }


  else   {

      digitalWrite(ShockLED, LOW);      

      delay(100);  

  }

}



▶ 실행영상 :  

(전체화면 보기로 보세요)




▶ 아두이노 파일다운 :

ShockDetected.ino

반응형
반응형

【 아두이노 센서#30】 틸트센서( KY-017) Sensor 다루기 


  오늘은 틸트 ( Tilt Sensor)를 다루어 보고자 한다. 일명 기울기 센서라고 하는데, 기울기가 변화되는 것을 감지해서 무언가를 작동시킬 수 있는 스위치의 역할로 사용할 수 있다. 





▶ 선수 학습 :

 없음. 


▶ IR 센서 사양 및 동작 특성





▶ 실습 목표 :  


1. 틸트 센서를 기울여 기울기에 따른 스위치 동작을 이해 할 수 있다. 


2. LED를 연결하여 틸트 센서의 동작에 따른 LED를 On /Off 할 수 있다.


▶ 실습 회로도면 :
  (이미지 클릭하면 확대 가능)



▶ 실습 절차  : 


1.    위 회로 연결도를 참고하여 부품들을 연결한다
2.    틸트 센서 내부에 있는 기울기용 스위치 역할 을 하는 물질은 수은이기 때문에 유리관이 깨지지 않도록 주의 해서 다룬다. 
3.    LED를 별도로 넣어 센서를 기울여 보고 LED가 On/Off 되는지 확인한다.(기울기에 따른 동작의 민감도를 직접 확인 해본다. ) 

▶ 프로그램 코드 및 설명 : 

/* 틸트 tilt 센서의 동작을 LED로 확인해보기   */


int Led = 8;

int SwOut = 7;

int val;


void setup() {

  pinMode(Led, OUTPUT);

  pinMode(SwOut, INPUT);

}


void loop() {

  val = digitalRead(SwOut);  // 틸트센서 센서값 읽어 저장

  if (val == HIGH)

  {

    digitalWrite(Led, HIGH);

  }

  else

  {

    digitalWrite(Led, LOW);

  }

  delay(100);  

}



▶ 실행영상 :  

(전체화면 보기로 보세요)




▶ 아두이노 파일다운 :

Tilt_SW.ino




반응형
반응형

【 아두이노 센서#29】 터치 LED센서( Heltec) Sensor 다루기 


 오늘은 Heltec 의 터치( Touch) LED 센서를 다루어 보고자 한다. 지난시간  터치 센서인 TTP223B를 다루어 보았는데, 이것과의 차이점은 터치 하였을 때 터치판 자체가 LED 불 빛을 내준다는 것이다. 미관적으로 좋고, 제품인테리어를 고려한 부품으로 사용해도 좋을 것이다. 


▶ 선수 학습 :

 없음. 

▶ IR 센서 사양 및 동작 특성




▶ 실습 목표 :  

1. 터치 LED 센서의 기본 작동 방식에 대해 이해하고 스위치 기능으로 사용 할 수 있다.

2. 터치 되었을 때 센서의 출력값을 LED 혹은 멀티테스터 등으로 확인 할 수 있다. 


▶ 실습 회로도면 :
  (이미지 클릭하면 확대 가능)

▶ 실습 절차  : 


1.    위 회로 연결도를 참고하여 부품들을 연결한다
2.    터치 LED 센서만 연결하여 터치 되었을 때, 센서의 출력 값을 멀티 테스터기로 확인 해본다. . 
3.    LED를 별도로 넣어 LED센서가 터치되었을 때 출력을 LED로 확인 해본다. (센서의 출력 값 3.3v 를 이용한 LED 점등) 

▶ 프로그램 코드 및 설명 : 

/* 터치 LED 센서의 동작확인은 별다른 코드 없이  확인 가능하다.     */

▶ 실행영상 :  

(전체화면 보기로 보세요)


1. 블루 불빛 LED 터치 센서의 터치시 출력 전압값을 멀티테스터 측정기로 확인.



2. 레드 불빛 LED 터치 센서의 터치 동작 확인 .



▶ 아두이노 파일다운 :

없음. 




반응형
반응형

【 아두이노 센서#28】 터치 센서( TTP223B) Touch Sensor 다루기 #2


 지난 시간에 이어 터치( Touch) 센서인 TTP223B를 다루어 보려고 한다. 이 터치 모듈은 정전식(사람의 몸에서 발생하는 작은 전기를 이용) 으로서 , 터치 되었을 때 칩 LED가 켜져 터치 되었다는 것을 알려주는 등 아주 사용하기 편하고 쉽다. 이번에는 LED를 13번포트에 직결하고 시리얼 플로터를 통해 터치가 되는지를 간단히 실험해보려 한다. 


▶ 선수 학습 :

 1. (센서)#27 터치센서다루기 #1 (TTP223B 터치센서 이해1 강좌보기클릭


▶ IR 센서 사양 및 동작 특성

▶ 실습 목표 :  

1. 터치 센서의 기본 작동 방식에 대해 이해하고 스위치 기능으로 사용 할 수 있다.

2. 터치 되었을 때 센서로 부터 얻은 값을 시리얼 모니터 혹은 시리얼 플로터 창을 통해 확인 할 수 있다. 

3. LED를 연결하거나 다른 출력으로 사용하여 기기를 작동시킬 수 있음을 이해한다.


▶ 실습 회로도면 :
  (이미지 클릭하면 확대 가능)

▶ 실습 절차  : 


1.    위 회로 연결도를 참고하여 부품들을 연결한다
2.    시리얼 모니터 창을 열어 터치 유무에 따른 출력 값을 확인 한다. 
3.    시리얼 플로터 창을 열어 터치 유무에 따른 출력 그래프를 확인 한다.
4. LED를 13번포트(LED+단자) 와 인접한 GND(LED-단자)에 바로 직결 연결한다(LED 연결에는 기본적으로 저항을 연결하여야 하나, 이와 같은 회로에서는 아두이노는 충분히 보호된다)

▶ 프로그램 코드 및 설명 : 

/* 터치 센서 (Touch sensor) 사용하기 프로그램       */
/*  by RASIno , http://rasino.tistory.com  */


#define Touch 7  // 터치센서의 핀 정의


void setup( ) {

  Serial.begin(9600);

  pinMode(Touch, INPUT);

  pinMode(13, OUTPUT);  

}


void loop( ) {

  int a = digitalRead(Touch);

  if (a == HIGH) {   digitalWrite(13, HIGH);

    Serial.println(a);    

    delay(1);       // 최소한의 delay 값을 주도록 한다.

    }  else  {  

         digitalWrite(13, LOW);

         Serial.println(a);      

  }

}


▶ 실행영상 :  

(전체화면 보기로 보세요)




▶ 아두이노 파일다운 :

TouchSensorLED.ino





반응형
반응형

【 아두이노 센서#27】 터치 센서( TTP223B) Touch Sensor 다루기 #1

 오늘은 터치( Touch) 센서인 TTP223B를 다루어 보려고 한다. 이 터치 모듈은 정전식(사람의 몸에서 발생하는 작은 전기를 이용) 으로서 , 터치 되었을 때 칩 LED가 켜져 터치 되었다는 것을 알려주는 등 아주 사용하기 편하고 쉽다. 


▶ 선수 학습 :

 없음. 

▶ IR 센서 사양 및 동작 특성

▶ 실습 목표 :  

1. 터치 센서의 기본 작동 방식에 대해 이해하고 스위치 기능으로 사용 할 수 있다.

2. 터치 되었을 때 센서로 부터 얻은 값을 시리얼 모니터 혹은 시리얼 플로터 창을 통해 확인 할 수 있다. 


▶ 실습 회로도면 :
  (이미지 클릭하면 확대 가능)

▶ 실습 절차  : 


1.    위 회로 연결도를 참고하여 부품들을 연결한다
2.    시리얼 모니터 창을 열어 터치 유무에 따른 출력 값을 확인 한다. 
3.    시리얼 플로터 창을 열어 터치 유무에 따른 출력 그래프를 확인 한다.

▶ 프로그램 코드 및 설명 : 

/* 터치 센서 (Touch sensor) 사용하기 프로그램       */
/*  by RASIno , http://rasino.tistory.com  */


#define Touch 9  // 터치센서의 핀 정의


void setup( ) {

  Serial.begin(9600);

  pinMode(Touch, INPUT);

}


void loop( ) {

  int a = digitalRead(Touch);

  Serial.println(a);

  delay(1);   // 최소한의 delay 값을 주도록 한다.

}


▶ 실행영상 :  

(전체화면 보기로 보세요)



▶ 아두이노 파일다운 :

TouchSensor.ino




반응형
반응형

【 아두이노 센서#26】 IR 적외선 센서 거리 LED 레벨바 만들기

 지난 시간 적외선(IR) 센서인 GP2Y0A41SK의 기본 사용법에 대해 알아 보았다. 이번 시간에는 거리에 따른 LED 레벨바를 만들어 보려 한다.  과거 LED Latch 회로를 다루어 보았는데 IR 센서와 연결하면 간단히 구현가능하다. 


▶ 선수 학습 :

1. (센서)#9 시프트 레지스터 이해하기 1 (Latch 회로이해1 강좌보기클릭  2(센서)#10 나이트라이더 만들어보기 (Latch 회로이해2)   강좌보기클릭  
3(센서)#25 IR적외선 센서 다루기     (IR 센서 기초)     강좌보기클릭  


▶ IR 센서 사양 및 동작 특성


▶ 실습 목표 :  

1. IR 센서의 작동 방식에 대해 이해하고 응용할 수 있다.

2. 센서로 부터 얻어 지는 아날로그 값을 디지털값 및 전압값으로 바꾸어 거리값으로 환산할 수 있다.

3. 얻어진 거리값을 시리얼 모니터와 LED로 표시할 수 있다. 

4. 시프트 레지스터 기능(74HC595) IC를 이용하여 거리에 따라 LED가 켜지도록 레벨바 형태를 구현 할 수 있다.


▶ 실습 회로도면 :
  (이미지 클릭하면 확대 가능)



▶ 실습 절차  : 


1.    위 회로 연결도를 참고하여 부품들을 연결한다
2.    앞선 실습 자료를 참고하여 IR센서로 부터 측정되는 값을 확인 한다음, LED 레벨이 반응하기 원하는 수치값(거리)의 최소값과 최대값을 정한다.(maxVal값  , minVal 값)
3.    프로그램을 동작시켜보고 maxVal값과 minVal값을 조절해 본다.

4.   가까울 수록 LED레벨이 켜지는 것을 멀수록 LED레벨이 켜지도록 프로그램을 수정해본다. 

▶ 프로그램 코드 및 설명 : 

/* 적외선 센서 (IR sensor) LED 레벨바 응용 프로그램       */
/*  by RASIno , http://rasino.tistory.com  */

const int SER=8;   // 시프트 레지스터로 데이터를 입력하는 8번 핀 SER 상수 정의

const int LATCH=9;  //LATCH LATCH 상수 정의

const int CLK= 10;  //CLOCK CLK 상수 정의

const int DIST=0; //아날로그 입력 0번 핀에 연결된 IR 센서의 장애물 거리값

 //LED 거리값 패턴을 저장한 vals 배열 정의

int vals[9]={0,1,3,7,15,31,63,127,255};

int maxVal=600; //IR 센서의 장애물 거리 최대값

int minVal=260;   //IR 센서의 장애물 거리 최소값

//###  IR 센서의 최대, 최소값은 실제 측정해보고 원하는 값으로 수정 필요


void setup( ) {

  Serial.begin(9600); //  시리얼 통신 시작

  pinMode(SER, OUTPUT);

  pinMode(LATCH, OUTPUT);

  pinMode(CLK, OUTPUT);

}


void loop( ) {

  int distance=analogRead(DIST);  //IR 센서에서 장애물 거리값을 읽음

  Serial.println(distance);          // 시리얼 모니터로 IR값을 확인해 본다

  distance=map(distance, minVal, maxVal, 0, 8);

  distance=constrain(distance,0,8); //거리값 범위 조정

  digitalWrite(LATCH,LOW);  //LATCHLOW 입력

  shiftOut(SER, CLK, MSBFIRST, vals[distance]); //거리값에 맞는 데이터전송

  digitalWrite(LATCH, HIGH);  // 거리에 따라 LED가 켜지도록 High 입력함

  delay(10);     // 센서가 장애물을 감지하는 시간 간격 지정

}


▶ 실행영상 :  

(전체화면 보기로 보세요)


▶ 아두이노 파일(실습1. 다운) :

Latch_IR_Sensor.ino


반응형
반응형

【 아두이노 센서#25】 IR 적외선 센서 다루기 ( GP2Y0A41SK )


 대표적인 적외선(IR) 센서인 GP2Y0A41SK를 알아보고 거리값을 시리얼 모니터를 통해 출력해보고자 한다. 


▶ IR 센서 사양 및 동작 특성

위 그래프는 목적물과의 거리에 따른 출력 신호와의 관계 그래프이다.

거리가 4Cm에서 부터 최고치의 출력을 보여주고 있으며, 거리가 멀수록 신호의 출력값은 그래프 처럼 낮아 진다. 또한 목표물의 색이 회색일(어두운색) 경우 반사율이 18%로 낮지만 흰색일수록(가까울 수록) 반사율이 90%로 높다는 것을 알 수 있다.  


▶ 실습 목표 :  

1. IR 센서의 작동 방식에 대해 이해할 수 있다.

2. 센서로 부터 얻어 지는 아날로그 값을 디지털값 및 전압값으로 바꾸어 거리값으로 환산할 수 있다.

3. 얻어진 거리값을 시리얼 모니터와 LED로 표시할 수 있다. 


▶ 실습 회로도면 1 (기본회로):
  (이미지 클릭하면 확대 가능)


▶ 실습 1  : 


1.    위 회로 연결도를 참고하여 부품들을 연결한다
2.    DC센서의 아날로그 출력 값에 A/D변환(아날로그를 디지털로)을 위한 값인 '5/1024' 를 곱해준다.(디지털화 된 전압값이 된다) 

3.    디지털 전압값이 나오면 아래 식에 삽입하여 거리값을 구한다.
 (※ 거리값 : 13 x pow(volts, -1)  )

4.   물체와의 거리가 30cm 이하일 때만 시리얼 모니터로 출력 하도록 하다.

▶ 실습1. 프로그램 코드 및 설명 : 

/* 적외선 센서 (IR sensor) 프로그램       */
/*  by RASIno , http://rasino.tistory.com  */

 // 물체와의 거리가 30cm 이하 일 때만 시리얼 모니터로 거리값을 표시하라


#define sensor A0   //  IR 센서의 입력 포트 정의



void setup( )  {

  Serial.begin(9600); //  시리얼 통신 시작

}


void loop( ) {



Serial.print("1.sensor:");  

    Serial.println(analogRead(sensor));  

// A/D 값 변환을 위한 5/1024(분해능)을 곱해준다

    float volts = analogRead(sensor) * 0.0048828125; 


    Serial.print("2.volts:");  

    Serial.println(volts);  

    int distance = 13 * pow(volts, -1); // pow(x,y):x의 y승

    Serial.print("3.distance:");  

    Serial.println(distance);  


  delay(1000);         // 응답시간을 고려하여 시간지연 한다

  if (distance <= 30) {

    Serial.println(distance); 

  } 


}


▶ 실습1. 실행영상 :  

(전체화면 보기로 보세요)



▶ 아두이노 파일(실습1. 다운) :

IR_distance.ino



▶ 실습 회로도면 2 (확장회로):
  (이미지 클릭하면 확대 가능)

 ※ 센서의 선구분은 색깔로 구분하기 쉽다. LED는 기본적으로 저항을 달아주어야 하나, 장시간이 아닌 간단히 테스트 하는 용도로 사용할 때는 그냥 연결하여도 크게 문제가 되지 않는다. 


▶ 실습 2  : 


1.    위 회로 연결도를 참고하여 부품들을 연결한다
2.    센서값이 500이상 일때 LED를 끄도록 하고, 40~500 사이 값일 때 아두이노 포트로 출력 조절 가능한 값인 255~0 사이 값으로 맵핑 처리 한다. map(sensor, 40, 500, 255, 0);

3.    LED를 통해 이를 확인하도록 한다. 


▶ 실습2. 프로그램 코드 및 설명 : 

/* 적외선 센서 (IR sensor) 프로그램       */
/*  by RASIno , http://rasino.tistory.com  */

 // 물체와의 거리가 30cm 이하 일 때만 시리얼 모니터로 거리값을 표시하라


const int sensorPin = A0;

const int ledPin = 12;

int sensor = 0;

int value = 0;


void setup( )  {

  Serial.begin(9600);     //  시리얼 통신 시작

  pinMode(ledPin, OUTPUT);

}


void loop( ) {

  sensor = analogRead(sensorPin);

  if (sensor != value) {

    Serial.println(sensor);

 

    value = sensor;

    if (sensor < 40) return;

    if (sensor > 500) {

      digitalWrite(ledPin, LOW);

    } else {

      sensor = map(sensor, 40, 500, 255, 0);

      analogWrite(ledPin, sensor);

    }

  }

  delay(500);

}


▶ 아두이노 파일(실습2. 다운) :

02_IR_LED02.ino


반응형
반응형

【 아두이노 센서#24】 L298N 모터 모듈을 활용한 초음파센서 회로#1

 지난 시간까지 초음파 센서를 사용하여 LCD에 표시하는 방법들을 배웠다. 이번에는 초음파 회로에 L298모터 드라이버 모듈을 사용하여 모터가 초음파센서에 반응하는 실습을 진행해보려 한다. 


▶ 선수 학습 :

  1. #24 DC 모터 제어 하기 4 (L293 & H브릿지 참고)   강좌보기클릭

  2초음파 센서 경보회로 with LCD (초음파 센서이해)    강좌보기클릭


▶ 실습에 사용되는 부품 스팩 ( L298N ) 

1. 12V 단자로 7V~35V를 공급할 경우 5V단자를 5V전원으로(출력) 사용할 수 있다.
2. 단 구동전압(모터)12V보다 클 경우 모듈의  레귤레이터 손상을 피하기 위해 외부5V 전원 공급 필요 하다
3. ENA단자가 enable일때 IN1IN2으로 OUT1 OUT2제어
4. ENB단자가 enable일때 IN3IN4으로 OUT3 OUT4제어
5. 동작 온도 : -20~+135
6. 2개의 DC모터를 제어하거나 1개의 스텝모터 제어 가능
7. ENA, ENB 단자에 PWM신호(아두이노의 디지털단자’~’)를 인가하여 모터의 출력(스피드)를 제어 할 수 있다(0~250 : analogWrite() 함수 사용)

8.      ENA 단자를 연결시킬 경우 최대 (속도)255 입력된다.


 실습에 사용되는 모터드라이버 모듈의 핵심 IC는 L298N 이다.  이 IC는 아래 L293D IC와 구조적으로 거의 같다고 보면된다.  IC의 타입(모양)이 다르고 모터를 돌릴 수 있는 출력 전류(전력)가 더 커진 IC이지만 IC의 작동 구조는 아래 L293과 같기 때문에 동작원리 파악을 위해 참고 하면 좋을 것이다.

《참고》

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



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



▶ 실습 목표 :  

1. L298N 모듈에 대해 이해하고 모터를 연결하여 사용하는 방법에 대해 익힌다.

2. L298N 드라이버 모듈에 별도의 전원이 필요한 경우에 대해 이해 할 수 있다. 

3. 초음파 센서를 비롯한 센서의 신호를 체크하여 N298모듈에 연결된 모터들을 제어 할 수 있다. (RC카 이동제어의 기본)


▶ 실습 회로도면 :

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

※ 아두이노에 연결한 전원 만으로는 모터가 제대로 작동되지 않을 수 있다.  즉, 모터 쪽은 전력이 약하면 코드에 문제가 없어도 이상 동작을 보이거나 전혀 동작하지 않을 수 있다. 따라서 L298N 모터 드라이버 모듈에 별도의 추가 전원을 연결하고 아두이노 보드에도 전원을 연결해 주는 것이 좋다.  모터 드라이버쪽 전원의 전압은 연결된 모터의 용량이나 크기에 따라 혹은 돌리려는 속도에 따라 스펙상 3V~30V (12V 이하 권장) 적절한 전원을 넣어 주면 된다. 


※ DC(직류) 방식의 모터는 작은 용량(소비전력이 낮은)의 것을 사용하면 되며,  기어가 포함된(기어드) DC 모터를 사용한다면 아두이노의 작은 출력으로도 충분히 제어가 가능하다. 만약 회로연결과 아두이노 프로그램에 문제가 없는데도 동작이 되지 않는 다면, 공급전력에 비해 너무 큰 용량의 DC 모터가 연결된 경우 일 수 있으니,  이런 부분들을 확인 해보면 될 것이다. 



▶ 실습 절차  : 


1.    위 회로 연결도를 참고하여 부품들을 연결한다
2.    DC 모터의 연결선 방향은 우선 연결 후 프로그램으로 작동시켜보고 방향이 반대가 될 경우 다시 바꾸어 연결하면 된다.
3.    만약 가지고 있는 모터의 용량이 비교적 클 경우 아두이노 전원만으로는 동작이 어려울 수 있으니 회로도에서 처럼 별도 전원을 인가해주면 동작이 잘 될 것이다. (모터 관련 회로에서 대부분의 동작 문제는 모터에 공급되는 전력이 충분치 않아 발생한다) 
4.    초음파 센서에 손이나 장애물을 대어 보아서 모터제어가 잘 되는지 확인한다.


▶ 프로그램 코드 및 설명 : 

/*  L298N 모터 모듈을 활용한 초음파 센서 제어 회로 */

int distance;             /*  초음파센서로 모터제어 하기  */

int triggerPin = 13;

int echoPin = 12;

#define IN1 // L298모듈의 제어 신호 입력 핀 번호 지정

#define IN2 9

#define IN3 10

#define IN4 11


void forward() {      // L298 제어용 전진 함수

      digitalWrite(IN1, HIGH);

      digitalWrite(IN2, LOW);

      digitalWrite(IN3, HIGH);

      digitalWrite(IN4, LOW);    }


void back() {         // 후진

      digitalWrite(IN1, LOW);

      digitalWrite(IN2, HIGH);

      digitalWrite(IN3, LOW);

      digitalWrite(IN4, HIGH);   }


void left() {         // 좌회전(왼쪽모터 멈춤:오른쪽모터 전진)

      digitalWrite(IN1, LOW);

      digitalWrite(IN2, LOW);

      digitalWrite(IN3, HIGH);

      digitalWrite(IN4, LOW);  }


void right() {      // 우회전(왼쪽모터 전진:오른쪽모터 멈춤)

      digitalWrite(IN1, HIGH);

      digitalWrite(IN2, LOW);

      digitalWrite(IN3, LOW);

      digitalWrite(IN4, LOW);   }


void stop() {       // 정지

      digitalWrite(IN1, LOW);

      digitalWrite(IN2, LOW);

      digitalWrite(IN3, LOW);

      digitalWrite(IN4, LOW);  }


void setup( )  {

  Serial.begin(9600);

  pinMode(triggerPin, OUTPUT);  // 트리거 핀을 출력으로 설정

  pinMode(echoPin, INPUT);          // 에코 핀을 입력으로 설정

}


void loop( ) {

  digitalWrite(triggerPin, HIGH); // 트리거핀으로 10us의 펄스 발생

  delayMicroseconds(10);

  digitalWrite(triggerPin, LOW);  //에코 핀의 값을 cm 단위로 계산

  distance = pulseIn(echoPin, HIGH) / 58;

   // 100cm 이상은 모두 100cm로 처리

  distance = distance>100? 100:distance;

  Serial.println("Distance(cm) = " + String(distance));

  if (distance < 20) {    // 20cm 이내 장애물 감지

    stop();

    delay(1000);    // 1초간 정지후 후진

    back();

    delay(2000);    // 2초간 후진

  } else {          //   20cm이내에 벽이 없다면 전진

    forward();     } 

}

◈  모터 A, B가 동시에 시계방향으로 돌면 전진, 반시계 방향이면 후진이고,

  한쪽바퀴만 돌리거나 두 개의 바퀴를 서로 반대로 돌리면 좌회전 혹은 우회전이 된다.   이를 함수 형태로 만들고 메인 루프에서 적절히 함수들을 호출해서 사용하도록 하였다. 그리고 메인루프문에서 장애물이 감지 되었을 때 어떻게 동작을 하게 할 것인지를 간단히 프로그래밍 해 주면 된다. 

위 프로그래밍에서는 기본 전진 기동을 하다가, 물체가 20cm 이내로 감지되면 우선 정지(1초) 한 다음, 후진(2초) 하도록 단순하게 작성 하였다.  다음 강의에서는 자동차 처럼 장애물을 회피해서 기동하는 형태로 작성해볼 예정이다.


▶ 실행영상:  

(전체화면 보기로 보세요)


※ 센서의 반응에 의한 동작 확인을 위해 영상에서 처럼 모터 및 바퀴를 고정 할 수 있는 알루미늄 몸체를 연결한 모습이다.  만약 이런 바디가 없어도 상관없다. 모터만 연결하여 동작확인을 해보면 된다. 


▶ 아두이노 파일(다운) :

L298N_UltraSonic_Basic.ino





반응형