반응형

【 아두이노 Proj#1】 초음파센서로 자동차 만들기 L298N모듈)

 지난 시간 L298모터 드라이버 모듈을 활용하여 초음파 센서에 반응하여 모터를 구동시키는 실습을 해보았다. 이제 본격적으로 초음파 센싱으로 작동되는 자동차를 만들어보려 한다.  또한 초음파 센서쪽에 서보모터를 부착하여 좌우의 장애물의 유무를 파악하여 장애물이 없는 쪽으로 움직일 수 있도록 하였다. 

▶ 선수 학습 :

1. (기초)#24 DC 모터 제어 하기 4 (L293 & H브릿지 참고)   강좌보기클릭  2(기초)#28 서보(Servo) 모터 제어 하기 1 (서보모터이해)    강좌보기클릭  3(기초)#29 서보(Servo) 모터 제어 하기 2 (서보모터이해)    강좌보기클릭  
4. (센서)#24 초음파센서 경보회로with LCD (초음파 센서이해)    강좌보기클릭


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

 모터 모듈의 상세한 사용 설명은 선수학습 4.번을 참고


▶ 실습 목표 :  

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

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

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

4. 초음파로 장애물을 확인하고 회피기동 프로그램을 작성하여 스스로 움직이는 RC카처럼 구성해볼 수 있다. 


▶ 실습 회로도면 (서보모터 부착회로):

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

 ※ 아두이노에 공급되는 전원과 별도로 모터에도 전원을 인가해주면 좋을 것이다.(단일 전원 구성도 가능하나, 바퀴가 힘있게 굴러가지 못하고 작동시간도 매우 짧기 때문에 모터 구동(모듈)쪽에 별도의 전원을 넣어 주는 것이 좋다) 


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



▶ 실습 절차  : 

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

5.   전원 하나로 아두이노와 DC모터를 포함한 L298모듈 둘 다를 돌리기에는 한계가 있다따라서 아두이노와 DC모터 모듈 전원을 각각 공급해주어야 하며, 이때 그라운드(GND) 공통으로 연결해주면 된다.

6.  모터 모듈 전원은 최소 5V이상, 모터용량에 따라 넣어 주면 되는데, 모터 구동에는 전압보다 전류가 중요한 역할을 하게 된다실험을 해보면, 모터모듈 전원으로 9V 베터리를 연결 할 때 보다, 1.5V X 4(6V)를 연결할 때가 훨씬 잘 동작될 것이다.(4개의 건전지에서 전류가 충분히 공급 되기 때문)
7. 서보모터는 180도 왕복 회전할 수 있는 것을 사용한다.
8.   초음파 센서에 손이나 장애물을 대어 보아서 모터제어가 잘 되는지 확인한다.

▶ 프로그램 코드 및 설명 : 

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

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

int triggerPin = 13;

int echoPin = 12;

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

#define IN2 9

#define IN3 10

#define IN4 11

float distance;          // 초음파 센서 거리값 변수

int servoPin = 2;     // 서보모터 연결 포트

Servo servo;


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);          // 에코 핀을 입력으로 설정

  servo.attach(servoPin);               // 서보모터 연결 지정

  servo.write(90);                            // 초기값으로 정면 응시

  delay(1000);               

}


float getDistanceCM() {      // 초음파 센서 거리 측정 함수(단위:cm)

  digitalWrite(echoPin, LOW);

  digitalWrite(trigPin, LOW);

  delayMicroseconds(2);

  digitalWrite(trigPin, HIGH);

  delayMicroseconds(10);

  digitalWrite(trigPin, LOW); 

  distance = pulseIn(echoPin, HIGH)  / 58;  //거리값 계산 후 저장

  return distance;

}


// 거리값 정확도를 위한 평균치 계산 함수(1회이상~ 10회미만으로 조정해보기)

float getStableDistanceCM() {

  int CmSum = 0;

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

    CmSum += getDistanceCM();  //, 'sum = sum + cm' 동일

   }

  return CmSum / 8;

}


void loop( ) {

   if ( getStableDistanceCM() < 25 ) {  // 25cm이하 장애물 감지

         stop();

         delay(300);     
         servo.write(180);      // 서보모터 좌회전 후 측정 거리값 변수에 저장     

        delay(500);

        int leftDistance = getStableDistanceCM();

        delay(300);

        servo.write(0);           // 서보모터 우회전 후 측정 거리값 변수에 저장

        delay(500);

        int rightDistance = getStableDistanceCM();

        delay(300);

        servo.write(90);        // 서보모터 중앙으로 원위치

        delay(500);

        back();                         // 0.5초간 후진

        delay(500);

       if (leftDistance > rightDistance {

           left();

       } else {

          right();
       } 

      delay(500);

  }   else {                            // 장애물 감지가 안 될 경우 전진

      forward();

      }

   }

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

  한쪽바퀴만 돌리거나 두 개의 바퀴를 서로 반대로 돌리면 좌회전 혹은 우회전이 된다.   이를 함수 형태로 만들고 메인 루프에서 적절히 함수들을 호출해서 사용하도록 하였다. 또한 거리값을 계산하는 부분을 함수로 만들었다(getDistanceCM()) , 그리고 얻어진 거리값을 초음파로 측정할 때 오류가 날 수 있기 때문에 1~8회 사이 몇 번 측정후 평균을 내면 편차가 큰 오류값은 걸러낼 수 있고 이를 함수로(getStableDistanceCM()) 만들었다.  

 위 프로그래밍에서는 기본 전진 기동을 하다가, 물체가 20cm 이내로 감지되면 정지를 시키고, 초음파 센서에 달린 서보모터를 좌, 우로 돌려보고 거리값을 각각 측정하여 물체가 없거나 물체와의 거리가 더 먼쪽의 방향으로 회전(좌회전 또는 우회전) 하도록 프로그래밍 한 것이다. 


▶ 실행영상 :  

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


※ 자동차 몸체는 영상에 있는 것이 아니어도 좋다. 두 바퀴를 안정적으로 고정시킬 수 있는 몸체와 앞 뒤로 기울어지지 않게 볼캐스트(볼 베어링)를 종이박스나, 폼보드 등에 부착해서 직접 만들어도 된다. 


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

UltraSonicRC-CAR_Servo.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





반응형
반응형

【 아두이노 센서#23】 HC-SR04 초음파센서 경보회로2 with i2c LCD

 지난시간 초음파 센서로 접근 경보회로를 구성하면서 LCD(16by02)에 표시하는 실습을 진행해 보았다. 하지만 LCD 핀을 일일이 연결해서 사용하는 것은 번거로움이 있고, 만약 아두이노에 추가적으로 여러가지 부품을 더 연결할 경우 포트에도 여유가 없게 된다. 이럴경우 가장 좋은 해결책은 LCD를 I2C 통신 타입으로 사용하면 쉽게 해결이 된다. I2C 타입 LCD는 온도센서와 습도센서를 다룰 때도 사용을 하였기에, 크게 어렵지 않을 것이다. 다만, I2C 통신에 대한 이해가 필요하다면 아래 선수 학습에서 참고하기 바란다. 


▶ 선수 학습 :

  1. I2C (Inter Integrated Circuit) 통신  강좌보기클릭

  2. I2C LCD로 TMP36 온도센서값 출력하기#3  강좌보기클릭

  3초음파 센서 경보회로 with LCD     강좌보기클릭


▶ 실습에 사용되는 부품 자료 ( HC-SR04 ) 



▶ 실습 목표 :  

1. 초음파 신호의 반사된 시간을 이용해서 물체까지의 거리값을 계산할 수 있다.

2. 물체가 일정거리(40cm) 이하로 감지가 되면 경보음과 함께 LED가 깜빡이게 하고, 가까울 수록 점점 더 빠르게 반응 하도록 프로그래밍 한다. 

3. 하나의 포트로 LED와 스피커(부저) 두 가지를 작동시키게 되면, 출력이 약하여 LED 혹은 스피커 작동이 약할 수 있다. 따라서 LED와 스피커를 분리하여 연결 (포트 추가 필요) 

4. LCD로 거리값을 출력하되, I2C통신 모듈이 달려있는 LCD를 사용함으로 연결 및 사용의 번거로움을 줄이고 아두이노 포트에 여유를 가져 올 수 있다. 


▶ 실습 회로도면 :

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


 ※ 위 회로에서 LED와 아두이노 9번 단자 사이에 100옴~330옴 사이 값 아무값의 저항을 하나를  기본적으로 넣어 주면 좋습니다. 

 아래 영상에 사용된 부저 모듈은 아래 이미지와 같은 3핀 모듈인데요, VCC핀은 +쪽에 ,  GND는 GND에 각각 연결하고,  I/O(신호) 단자를 아두이노의 8번 핀에 연결시켜 주면 됩니다. 이렇게 전원이 따로 분리된 모듈을 사용하면 출력이 좀 더 커지게 되는데요,   그런데, 사실상 아주 큰 소리는 나지는 않으니 참고하세요.

   능동형 부저 :  동작전압(Operating Voltage) : 3.3~5V


※ 아두이노 포트의 작은 출력으로 소리와 함께 LED를 작동 시키기 때문에, 기본적으로 소리가 작게 날 수 있으며, 스피커는 와트(w) 수가 작은 것을 사용해야 들을 수 있다. 또한 진동판을 전류로 울려서 소리를 내는 방식의 스피커 보다는 피에조 타입의(압전) 스피커를 사용하는 것이 좋다.  


▶ 실습 절차  : 

1.    위 회로 연결도를 참고하여 부품들을 연결한다
2.    초음파 센서의 거리 값을 16x2 LCD로 표시하라
3.    LCD에 거리값을 표시 할 경우 큰 수치에서 작은 수치로 줄어들어 이전 수치값이 남아 있어 값을 읽을 때 혼란스러운 현상이 일어난다. 이럴경우 몇가지 방법이 있으나간단한 방법은임의의 공백을 적당(2~10) 딜레이()와 함께 사용하면 해결할 수 있다.
4.    실제 거리와 유사한지 비교해본다


▶ 프로그램 코드 및 설명 : 

/*  초음파 센서를 사용한 거리값을 i2c 타입 LCD에 출력하기 */


#include <Wire.h>

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd (0x27, 16,2);

int distance;

int alertLED=9; 

int alertBuzz=8; 

int triggerPin = 7;

int echoPin = 6;


void setup( )  {

  Serial.begin(9600);

  pinMode(alertLED, OUTPUT);    // 경보용 LED포트를 출력으로 설정

  pinMode(alertBuzz, OUTPUT);    // 경보용 Buzzer를 출력으로 설정

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

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

  lcd.begin();

  lcd.clear();


}


void loop( ) {

  // 트리거 핀으로 10 us의 펄스를 발생

  digitalWrite(triggerPin, HIGH);

  delayMicroseconds(10);

  digitalWrite(triggerPin, LOW);

  //에코 핀 입력으로부터 거리를 cm 단위로 계산

  distance = pulseIn(echoPin, HIGH) / 58;

  distance = distance>100? 100:distance;


  lcd.setCursor(0,0);

  lcd.print("UltraSonic Ruler");

  lcd.setCursor(0,1);

  lcd.print("distance :");

  lcd.print(distance);

  lcd.print("cm   ");

  if (distance < 40) {    

    digitalWrite(alertLED,HIGH);

    digitalWrite(alertBuzz,HIGH);

    delay(10);

    digitalWrite(alertLED,LOW);

    digitalWrite(alertBuzz,LOW);

    delay(distance); 

  }

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

  delay(50);

 }

}



▶ 실행영상:  

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




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

Ultrasonic_buzzer_i2cLCD.ino



【 LCD관련 에러나 동작이 안 될 때 】

 LCD관련한 라이브러리 에러나 코드 에러에 대한 안내를 드립니다.  

 크게 아래와 같은 두 가지 형태를 보이는데요, 


▶ 1. 코드를 실행하기전 LiquidCrystal_I2C.h: No such file or directory 에러라고 뜨는 경우!


 이때는 LCD 헤더파일이 설치가 되어 있지 않았을 경우입니다.  아예 관련 라이브러리(해더 파일)가 설치 되지 않은 경우입니다. 

해결법은 바로 아래에 첨부한 라이브러리를 다운받아 압축을 풀지 말고 라이브러리 관리 메뉴에서  .zip 라이브러리 추가 메뉴를 이용해서 추가해주세요.

경로 :  아두이노IDE >  스케치 》 라이브러리 포함하기  .zip 라이브러리 추가...  "다운받은 라이브러리파일 선택"


▶ 2. 또 한가지 LCD관련 에러는 ,  no matching function for call to ‘LiquidCrystal_I2C::begin();   라고 뜨는 경우!

 라이브러리 파일도 똑같은 이름이지만, 제공자에 따라 내부코드가 다른 라이브러리인 경우가 종종 있어요.  그래서 만약 제가 실험에서 사용한 라이브러리가 아닌,  같은 이름이지만 다른 라이브러리를 사용할 경우 위와 같은 에러 표시를 낼 수 있습니다.    라이브러리는 분명 설치되어 있지만 그래서 프로그램이 인지는 하는데, 코드에서 사용한 함수 적용이 되지 않을 때 이런 에러를 띄우게 됩니다.    그럼, 해결책은 실험에 사용한(적용한) 그 라이브러리를 다시 설치해 주어야 하는데요,   이 때 중요한 것은 아두이노에서는 똑 같은 이름의 라이브러리가 두 개 설치될 경우 또다른 중복에러를 띄우게 됩니다.   그러니 잘 못 설치된 라이브러리는 찾아서 반드시 삭제하거나,  다른이름으로 임시 변경해 놓거나,  나중에 다른 프로그램에서 사용해야 할 경우를 대비해서 압축해 놓고 원본은 지워 놓으면 됩니다. 


 그럼 기존 라이브러리를 찾아서 삭제를 하거나 하려면 설치된 라이브러리를 찾아야 겠죠? 

찾는 위치는 보통 아래 두 곳입니다.  (윈도우10 기준이며, 윈도우7도 비슷한 위치) 


두 곳으로 나뉘어 설치되는 이유는 아두이노 IDE의 "라이브러리 관리 메니저" 창을 통해 검색으로 설치되는 기본위치가 있고(아두이노 설치된 경로),   '.zip 라이브러리' 추가로 설치되는 위치가(도큐멘트 문서 저장영역-Doucuments) 따로 있어서 그렇습니다. 


< .zip 라이브러리 추가 메뉴에서 추가한 라이브러리 설치 위치 >

 1. C:\Users\유저-이름\Documents\Arduino\libraries    


 <라이브러리 관리 메뉴창에서 라이브러리 직접 검색으로 설치된 라이브러리 위치 >

 2. C:\Program Files (x86)\Arduino\libraries


위 두 곳에서 찾아서 삭제를 하세요.   (그냥, 폴더 째로 삭제하면 됩니다.)

 그리고 아래 첨부하는 라이브러리를 다운받아  압축파일 그대로 .zip 라이브러리 추가 메뉴로 추가해 주세요. 

만약, 압축파일 그대로 추가할 때 에러가 난다면,  앞축을 풀고  xxxxx.h 가 있는 폴더만 "C:\Users\유저-이름\Documents\Arduino\libraries" 경로에 붙여넣기 하면 됩니다.    이때 아두이노 스케치 IDE는 모두 닫고 재실행 해야 적용 됩니다.


 본 예제에서 사용한 라이브러리 다운로드 받기 :

Arduino-LiquidCrystal-I2C-library-master.zip




  ※ 중요! : 여기에서 제시된 코드로 작성할 경우 반드이 이 라이브러리로 설치하셔야 합니다.   만약, 여러분의 PC에 똑 같은 이름의 라이브러리가 있을 경우 반드시 삭제를 하거나 압축해서 백업을 해 놓으면 충돌이 일어나지 않습니다.!!!

반응형
반응형

【 아두이노 센서#22】 HC-SR04 초음파 센서 경보회로 with LCD

 지난시간 초음파 센서로 접근 경보회로 기본을 다루었다. 그럼 이제 LCD를 부착하여 거리값을 LCD에 표시해보자. 이렇게 된다면 포터블하며 실제로 자동차등에 부착할 수 있는 형태가 되어 훨씬 실용적으로 활용할 수 있게 된다.


▶ 선수 학습 :

  1. 초음파 센서 다루기 #1   강좌보기클릭

  2. 초음파 센서 다루기 #2   강좌보기클릭

  

▶ 실습에 사용되는 부품 자료 ( HC-SR04 ) 






▶ 실습 목표 :  


1. 초음파 신호의 반사된 시간을 이용해서 물체까지의 거리값을 계산할 수 있다.

2. 물체가 일정거리(40cm) 이하로 감지가 되면 경보음과 함께 LED가 깜빡이게 하고, 가까울 수록 점점 더 빠르게 반응 하도록 프로그래밍 한다. 

3. 스피커와 LED는 각각 포트로 제어 할 수 있으나, 지금은 하나의 포트(13)로 제어할 것이며, LCD(1602)를 부착하여 초음파로 측정된 거리 값을 LCD를 통해 표시할 수 있다. 


▶ 실습 회로도면 :

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


※ 아두이노 포트의 작은 출력으로 소리와 함께 LED를 작동 시키기 때문에, 기본적으로 소리가 작게 날 수 있으며, 스피커는 와트(w) 수가 작은 것을 사용해야 들을 수 있다. 또한 진동판을 전류로 울려서 소리를 내는 방식의 스피커 보다는 피에조 타입의(압전) 스피커를 사용하는 것이 좋다.


▶ 실습 절차  : 

1.    위 회로 연결도를 참고하여 부품들을 연결한다
2.    초음파 센서의 거리 값을 16x2 LCD로 표시하라
3.    LCD거리값을 표시 할 경우 큰 수치에서 작은 수치로 줄어들어 이전 수치값이 남아 있어 값을 읽을 때 혼란스러운 현상이 일어난다. 이럴경우 몇가지 방법이 있으나, 간단한 방법은, 임의의 공백을 적당(2~10) 딜레이()와 함께 사용하면 해결할 수 있다.
4.    실제 거리와 유사한지 비교해본다


▶ 프로그램 코드 및 설명 : 


/*  초음파 센서(HC-SR04 모듈)로 물체와의 거리측정하기 */


#include <LiquidCrystal.h>// LCD 사용을 위한 헤더 선언

int distance;

int triggerPin = 10;

int echoPin = 11;

int alertPin=3;    //   스피커 & LED 연결 핀 설정

LiquidCrystal lcd(2,3,4,5,6,7);//LCD 핀 배열 설정


void setup( )  {

  Serial.begin(9600);

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

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

}


void loop( ) {

 digitalWrite(triggerPinLOW);    // 트리거 핀 초기화

  digitalWrite(echoPin, LOW);      //  에코 핀 초기화

  delayMicroseconds(2);

  // 트리거 핀으로 10 us의 펄스를 발생

  digitalWrite(triggerPin, HIGH);

  delayMicroseconds(10);

  digitalWrite(triggerPin, LOW);

  // 에코 핀 입력으로부터 거리 값을  cm 단위로 계산

  distance = pulseIn(echoPin, HIGH) / 58;

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

  delay(1000);

  distance = distance>100? 100:distance;//100이상의 값은 모두100


  if (distance 40) {       //  40 이하의 값부터 경보 시작

    digitalWrite(alertPin,HIGH);

    delay(10);

   digitalWrite(alertPin,LOW);

   delay(distance); // 거리가 가까울수록  음이 빨라지도록 딜레이값을 조정

  }

 lcd.setCursor(0,0);  //커서를 첫 열 첫 행으로 이동

 lcd.print("Distance(cm):");

 lcd.print(distance);

 delay(2);   // 거리값 표시를 위한 약간의 딜레이를 준다. 

 lcd.print("            ");  //거리 값이 계속 바뀌어 나타나는 잔상제거를 위한 공백

}


▶ 실행영상:  

(전체화면 보기로 보세요)
# 아래 영상은 동일한 회로와 프로그래밍이 되어 있으며, 휴대성을 위해 아두이노 보드만, 우노 R3에서 나노 보드로 교체한 회로 영상이다.



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

Ultrasonic_buzzer_LCD_.ino


반응형
반응형

【 아두이노 센서#21】 HC-SR04 초음파 센서 다루기 #2

 이번 시간은 초음파 센서 다루기 두 번째 시간으로, 초음파 경보회로를 만들어보려한다. 지난시간 초음파 센서를 이용해서 거리값을 계산해 낼 수 있었다. 이번시간은 이 거리값을 이용해서 특정 거리 영역으로 인지되면 경보음을 울리는 회로를 구성해보려 한다. 그리고 마치 자동차 범퍼에 달려 있는 접근 경보 센서 회로 처럼, 가까이 근접할 수록 신호음과 불 빛을 더 빨리 울리도록 해볼 것이다. 


▶ 선수 학습 :

  1. 초음파 센서 다루기 #1        강좌보기클릭☜


  

▶ 실습에 사용되는 부품 자료 ( HC-SR04 ) 






▶ 실습 목표 :  


1. 초음파 신호의 반사된 시간을 이용해서 물체까지의 거리값을 계산할 수 있다.


2. 물체가 일정거리(40cm) 이하로 감지가 되면 경보음과 함께 LED가 깜빡이게 하고, 가까울 수록 점점 더 빠르게 반응 하도록 프로그래밍 한다. 


3. 실습1은 스피커와 LED를 같이 묶어 포트 하나로 간단히 제어 해 볼 것이고, 실습2는 포트 두 개를 사용하여 각각 제어 해 볼 것이다(출력 공급이 조금 더  좋아짐)



▶ 실습 회로도면 :

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




※ 아두이노 포트의 작은 출력으로 소리와 함께 LED를 작동 시키기 때문에, 기본적으로 소리가 작게 날 수 있으며, 스피커는 와트(w) 수가 작은 것을 사용해야 들을 수 있다. 또한 진동판을 전류로 울려서 소리를 내는 방식의 스피커 보다는 피에조 타입의(압전) 스피커를 사용하는 것이 좋다.



※ 본 실습 처럼 단순한 음을 듣기 위한 회로에서는 스피커의 극성 구분은 크게 의미가 없다. 


▶ 실습 1 절차  : 

1. 위 회로 연결도를 참고하여 부품들을 연결한다. 
2. 스피커와 LED를 하나의 포트에 연결하여 동시에 제어 해본다.


▶ 프로그램 코드 및 설명 : 


/*  초음파 센서(HC-SR04 모듈)로 물체와의 거리측정하기 */


int distance;

int triggerPin = 7;

int echoPin = 6;

int alertPin=3;    //   스피커 & LED 연결 핀 설정


void setup( )  {

  Serial.begin(9600);

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

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

}


void loop( ) {

 digitalWrite(triggerPinLOW);    // 트리거 핀 초기화

  digitalWrite(echoPin, LOW);      //  에코 핀 초기화

  delayMicroseconds(2);

  // 트리거 핀으로 10 us의 펄스를 발생

  digitalWrite(triggerPin, HIGH);

  delayMicroseconds(10);

  digitalWrite(triggerPin, LOW);

  // 에코 핀 입력으로부터 거리 값을  cm 단위로 계산

  distance = pulseIn(echoPin, HIGH) / 58;

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

  delay(1000);

  distance = distance>100? 100:distance;//100이상의 값은 모두100


  if (distance < 40) {       //  40 이하의 값부터 경보 시작

    digitalWrite(alertPin,HIGH);

    delay(10);

   digitalWrite(alertPin,LOW);

   delay(distance); // 거리가 가까울수록  음이 빨라지도록 딜레이값을 조정

   }

}



▶ 실습 1 실행영상:  

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



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


Ultrasonic01_Basic.ino




▶ 실습 2 절차  : 

1. 위 회로 연결도를 참고하여 부품들을 연결한다. 
2. 스피커와 LED를 분리하여 각각의 아두이노 포트를 사용하여 연결한다.
▶ 실습 회로도면 :
 (이미지 클릭하면 확대 가능)



▶ 프로그램 코드 및 설명 : 


int distance;

int alertLED=9;   //   LED  연결 포트

int alertBuzz=8; //   Buzzer  연결 포트

int triggerPin = 7;

int echoPin = 6;


void setup() {

  Serial.begin(9600);

  pinMode(alertLED, OUTPUT);    // 경보용 LED포트를 출력으로 설정

  pinMode(alertBuzz, OUTPUT);   // 경보용 Buzzer를 출력으로 설정

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

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

}


void loop() {

 digitalWrite(triggerPin, LOW);    // 트리거 핀 초기화

  digitalWrite(echoPin, LOW);      //  에코 핀 초기화

  delayMicroseconds(2);

//   ----- 트리거  핀으로 10us의 펄스를 발생  -----

 digitalWrite(triggerPin, HIGH);

  delayMicroseconds(10);

  digitalWrite(triggerPin, LOW);

//---------------------------------------

  distance = pulseIn(echoPin, HIGH) / 58; //  거리값

 distance = distance>100? 100:distance;//100이상의 값은 모두100

if (distance < 40) {      //  40cm 미만 값 부터 경고음(Led) 시작

    digitalWrite(alertLED,HIGH);

    digitalWrite(alertBuzz,HIGH);

    delay(10);

    digitalWrite(alertLED,LOW);

    digitalWrite(alertBuzz,LOW);

    delay(distance);

 }

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

  delay(10);

}


▶ 실습 2 실행영상:  

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



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

Ultrasonic_buzzer2.ino


반응형
반응형

【 아두이노 센서#20】 HC-SR04 초음파 센서 다루기 #1


 이번 시간 부터, 아두이노에서 가장 활용도가 높은 초음파 센서를 다루어 보려고 한다. 앞으로 라즈이노에서 올리는 실습을 보면서, 차근 차근 하나씩 해보면 생각만큼 복잡하지 않으며 아두이노가 더욱 재미 있어질 것이다. 

게다가 초음파 센서를 이용하여 다양한 응용작품을 만들어 보려고 한다. 


▶ 선수 학습 :

  특별한 선수학습 없음

  

▶ 실습에 사용되는 부품 자료 ( HC-SR04 ) 







▶ 실습 목표 :  


1. 초음파 센서의 구동 원리에 대해 이해한다. 


2. 초음파 신호의 반사된 시간을 이용해서 물체까지의 거리값을 계산할 수 있다.


3. 측정된 값을 시리얼 모니터상에 거리값(cm)으로 표시한다.



▶ 실습 회로도면 :

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









▶ 실습 절차  : 

1. 위 회로 연결도를 참고하여 부품들을 연결한다. 
2. 시간값 계산식


3. 초음파센서의 거리측정 메카니즘을 이해한다.






▶ 프로그램 코드 및 설명 : 


/*  초음파 센서(HC-SR04 모듈)로 물체와의 거리측정하기 */


int distance;

int triggerPin = 7;

int echoPin = 6;


void setup( )  {

  Serial.begin(9600);

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

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

}


void loop( ) {

 digitalWrite(triggerPin, LOW);    // 트리거 핀 초기화

  digitalWrite(echoPin, LOW);      //  에코 핀 초기화

  delayMicroseconds(2);

  // 트리거 핀으로 10 us의 펄스를 발생

  digitalWrite(triggerPin, HIGH);

  delayMicroseconds(10);

  digitalWrite(triggerPin, LOW);

  // 에코 핀 입력으로부터 거리 값을  cm 단위로 계산

  distance = pulseIn(echoPin, HIGH) / 58;

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

  delay(1000);

}




▶ 실행 영상:  【 시리얼 모니터 화면 】





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


Ultrasonic.ino


반응형
반응형

 【 아두이노 센서#5】 TMP36 온도센서 #3 with LCD 




 지난 시간 TMP36 온도센서를 가지고 온도값을 시리얼 모니터로 확인하는 실습을 진행하였다. (바로가기 ☞ TMP36 온도센서 시리얼모니터 편)

이번 시간에는 지난시간에 이어서 센싱되는 온도값을 LCD 디스플레이 화면으로 출력해보는 실습을 진행 하려고 한다. 


▶ 실험에 사용되는 온도센서 자료 ( TMP36 ) 


아래는 온도 값과 출력전압과의 상관관계를 나타낸 그래프이다.

예를 들어 TMP36센서는 주변 온도가 50도씨 일때 출력단자로 1.0V의 전압값을 출력한다는 뜻이다.


 그래프특성을 살펴보고 자신이 사용하고자 하는 환경에 맞는 센서를 사용하면 되며,  통상적으로 활용 온도 범위가 넓은 TMP36센서를 많이 사용한다. 


[ 실습에 사용될 RGB LED(3색LED) 구조 및 사양 ]


RGB LED 는 그림에서 보듯 3가지 색 LED가 한 몸체에 구성되어 있다고 이해하면 쉽다.

다만, 단자하나는 공통단자로 연결되어 있고, LED의 마이너스(-) 극이 공통단자로 되면 Common 케소드(음극),    플러스(+)극이 공통단자로 되면 Common 애노드(양극)이 된다. (통상적으로 부품의 다리 길이가 제일 긴 단자가 공통단자다)


따라서 부품을 사용하기전에 자신의 부품이 컴온 캐소드 타입인지? , 컴온 애노드 타입인지?  반드시 확인해야 하며, 단자의 색상 위치도 그림과 순서가 다를 수 있으니 멀티테스터기 혹은? 3V 정도의 낮은 전원을 가하여 색의 위치를 사전에 확인하면 좋을 것이다. 



▶ 실습 목표 :  


1. 온도 범위에 따라 LED의 색을 다르게 표시하라. 

[예, 수치 값이 165 이하는 블루색, 165~175는 그린색,  그 이상은 레드색]

2. 온도(섭씨) 값을 LCD 화면으로 출력하라.


▶ 실습 회로도면 :

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






※ LCD 부분 연결은 위 회로도를 보며 연결하도록 한다.


▶ 실습 절차  : 

1. 안정적으로 사용하기 위해서는 LED 공통단자에 220Ω정도의 저항을 
 달아 준다.

2.LED 3개를 사용 하여 회로를 구성하여도 무방하며이때에도 각각 
 저항을 연결해주는 것이 좋다.

3.실습에 사용되는 LCD는 16열 2행(16by2)LCD로서 기본적으로 가장 
 많이 사용되던 형태이다. 16핀 중에서 주요 제어 라인을 아두이노
 포트로 직접 제어를 하는 형태이다.

4. 만약, LCD로 출력이 잘 되지 않을 경우 먼저 시리얼모니터로 
 데이터 출력을 점검해보고 이상이 없다면 LCD 연결라인이나 LCD관련 프로그램 부분을 살펴보면 좋을 것이다. (다음 실습에서 사용하기 편리한 I2C 타입의 LCD를 다루어 볼 것이다)   




▶ 프로그램 코드 및 설명 : 


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

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);    // LCD 핀 설정

const int RLED=9;    // 빨간색 LED 상수형변수에 아두이노 9번 핀 할당

const int GLED=10; // 녹색 LED 상수형변수에 아두이노 10핀 할당

const int BLED=11; //파란색 LED 상수형변수에 아두이노 11핀 할당

const int TEMP=0;     // 아날로그 입력 0(A0) 핀 선

const int LOWER_BOUND=162;      // 온도 하한 값을 정의 함

const int UPPER_BOUND=168;       // 온도 상한 값을 정의 함

int val=0;                      // 온도 센서의 현재 값을 저장하는 변수 선언

byte SpecialChar1[8] = { B00010,  B00101B00101, B00010,

 B00000B00000B00000B00000   };

void setup() {

  Serial.begin(9600);

  pinMode(RLED, OUTPUT);        // RLED를 출력으로 지정

  pinMode(GLED, OUTPUT);        // GLED를 출력으로 지정

  pinMode(BLED, OUTPUT);        // BLED를 출력으로 지정

  Serial.begin(9600);

  pinMode(RLED, OUTPUT);        // RLED를 출력으로 지정

  pinMode(GLED, OUTPUT);        // GLED를 출력으로 지정

  pinMode(BLED, OUTPUT);        // BLED를 출력으로 지정

  lcd.begin(16,2);

  lcd.clear();

  lcd.createChar(1,SpecialChar1);     

}

void loop()    {

  val=analogRead(TEMP); 

  Serial.println(val);

  float mVoltage = val*5000.0/1024.0;

  float TempDotC = (mVoltage - 500) / 10.0;

  Serial.print(TempDotC);     Serial.println("℃\n");

  lcd.setCursor(0,0); 

  lcd.print("Tmp36 Sensor !");

  lcd.setCursor(0,1);

  lcd.print("Temp:");

  lcd.print(TempDotC);

  lcd.write(1);      

  lcd.print("C"); 

  delay(500);

  if(val < LOWER_BOUND) {       // 경계 값 비교     

    digitalWrite(RLED,HIGH);

    digitalWrite(GLED,HIGH);

    digitalWrite(BLED, HIGH);   } //  켜려고 하는 LEDHIGH 값 지정

  else if (val>UPPER_BOUND) {//상위 경계선값 이상이면 Red LED ON

    digitalWrite(RLED,HIGH);

    digitalWrite(GLED, LOW); 

    digitalWrite(BLED, LOW);    }

else {  // 경계선 사이 값이라면 Green LED On

    digitalWrite(RLED, LOW);

    digitalWrite(GLED, HIGH);  

    digitalWrite(BLED, LOW);    }    

}   


1.TMP 36 온도 센서를 이용해서 온도값에 따른 RGB LED의 색을 
 다르게출력 해보는 실습이다.
2.Common Anode 타입의 RGB LED는 공통단자를 V+ 연결 하기 
 때문에 LED를 On 하기 위해서는 입력단자 LOW신호가 들어가야 한다.

3.온도 변화에 따른 LED 색을 다르게 표시하기 위해  TMP36의 출력 
 값을 측정하여 경계값을 설정한다
  예165  이하면  블루 LED ON’     
  175 
값 이상이면  레드 LED ON’ 
  165~175 
사이 값이면  그린 LED ON’

4. 정상 동작이 되면 온도 변환 공식을 이용하여 섭씨온도로 
변환하여 시리얼 모니터를 통해 화면에 표시하는 프로그램을 다음 
과제로 진행해 본다.


※위의 섭씨온도식에서 






▶ 실행 결과 :

 (영상은 고화질로 설정하고 전체화면으로 보세요)





반응형
반응형

 【 아두이노 센서#2 】 적외선(근접)센서 TCRT5000 #2





▶ 실험에 사용되는 적외선 센서 자료 ( TCRT5000) 




 TCRT 5000은 적외선 방식이어서 적외선 센서로 불리지만, 가깝고 짧은 거리에 사용되기 때문에 근접센서라고 불리우기도 한다.


[ TCRT5000 모듈의 내부 회로도 참고 ]


▶ 근접센서 동작 원리 



 주로 라인트레이서 등에 활용하기 좋은 TCRT 센서 이기 때문에 센서의 방향이 위의 이미지에서 처럼 아래로 향하게 된다. 

 적외선 신호는 색이 밝을 수록(흰색) 반사되는 성질이 있으며, 

 색이 어두울 수록(흑색) 반사되지 않는(흡수) 성질이 있다.

 사람은 가시광선의 신호만 눈으로 확인 가능하기 때문에, 가시광선 영역밖인, 

 적외선 신호 등은 사람의 눈으로 확인이 불가하다.  하지만, 카메라 렌즈는 이를 식별하기 때문에 휴대폰 카메라도 동작이 될 때 카메라 렌즈를 통해서 보면 붉으스름한 빛이 나는 것을 확인 할 수 있다.   다만, 최근의 휴대폰들은 사진 찍을 때 나타나는 적목현상(사진속 눈에 붉은점이 나타나는 현상) 제거를 위해 적외선 신호 제거 기능이 있어서 확인이 되지 않는다.


▶ 실습 목표 :  

 적외선 신호가 감지(반사)되면  AO 단자의 아날로그 출력 값을 시리얼 모니터 창을 통해 확인해 볼 수 있다. 


▶ 실습 회로도면 :

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








▶ 실습 절차  : 

1. 센서의 VCCGND 단자를 아두이노의 VCCGND 단자에 각각 연결 한다


2. 센서에 물체가 감지 되면 AO핀으로 아날로그 값(전압레벨)이 출력된다. 이 출력 값을 아두이노의 A0포트로 읽어 시리얼 모니터로 확인하면 된다


3. 출력값을 그대로 포트로 읽어 들이기 때문에 별다른 프로그램 없이 바로 

   동작이 된다



▶ 실행 영상 :

 (영상은 고화질로 설정하고 전체화면으로 보세요)











반응형
반응형

 【 아두이노 센서#1】  아두이노 센서 활용편

  이제 아두이노 기초부분은 지난번 아두이노 기초 격인, 37개의 강좌를 통해서 학습이 되었을 것이다. (혹시 아두이노 기초부문 학습이 필요하다면 여기 아두이노 기초강좌 부분을 먼저 살펴보면 좋을 것이다.  [ ☞ 아두이노 기초 강좌편 ] )


 이번 시간 부터는 본격적으로 센서를 가지고 아두이노를 활용해보려고 한다. 센세를 다룰 수 있게 되면 실생활에 바로 응용 가능한 작품들을 만들 수 있기 때문에  한 층 더 재미있게 학습할 수 있을 것이다. 


 앞으로 다룰 주요 센서 목록중에서 첫 시간으로 1. 적외선 센서를 다루어 보고자 한다.



 #1 적외선 센서( TCRT5000 ) 


▶ 실험에 사용되는 적외선 센서 자료 ( TCRT5000) 



 TCRT 5000은 적외선 방식이어서 적외선 센서로 불리지만, 가깝고 짧은 거리에 사용되기 때문에 근접센서라고 불리우기도 한다.


[ TCRT5000 모듈의 내부 회로도 참고 ]


▶ 근접센서 동작 원리 



 주로 라인트레이서 등에 활용하기 좋은 TCRT 센서 이기 때문에 센서의 방향이 위의 이미지에서 처럼 아래로 향하게 된다. 

 적외선 신호는 색이 밝을 수록(흰색) 반사되는 성질이 있으며, 

 색이 어두울 수록(흑색) 반사되지 않는(흡수) 성질이 있다.

 사람은 가시광선의 신호만 눈으로 확인 가능하기 때문에, 가시광선 영역밖인, 

 적외선 신호 등은 사람의 눈으로 확인이 불가하다.  하지만, 카메라 렌즈는 이를 식별하기 때문에 휴대폰 카메라도 동작이 될 때 카메라 렌즈를 통해서 보면 붉으스름한 빛이 나는 것을 확인 할 수 있다.   다만, 최근의 휴대폰들은 사진 찍을 때 나타나는 적목현상(사진속 눈에 붉은점이 나타나는 현상) 제거를 위해 적외선 신호 제거 기능이 있어서 확인이 되지 않는다.


▶ 실습 목표 :  

 적외선 신호가 감지(반사)되면(DO 핀이 VCC(5V) → GND로 변화됨) 

LED를 켜는 실험을 해보자. 


▶ 실습 회로도면 :

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







▶ 실습 절차  : 

1. LED ‘+단자VCC 전원으로 연결하고 ‘–단자를 센서의 Do   (Digital Out) 단자에 연결한다.

2. 센서에 물체가 감지 되면 Do핀이 0V(GND)가 되고, 감지 LEDOn 
 된다. 물체가 감지 되지 않으면 VCC가 출력된다.

3. , 별다른 프로그램 없이 아두이노 전원 만을 이용하여 LED를 작동
 시킬 수 있는 회로이다.



▶ 실행 영상 : 









반응형