2021년 7월 11일 너무너무너무 더운 여름이다. 선풍기가 없으면 잠이 들수 없는 지경이다.
에어컨만큼은 아니지만 어느정도 더위를 날려주는 선풍기의 발명은 정말 고맙다.
그러나 우리가 위치를 이동하거나 다른곳에 볼일이 있으면 선풍기를 옮겨야 하거나 공간에 제약이 있다.
이런 불편함을 해소하기 위해 자동으로 방향을 틀어주는 선풍기를 아두이노로 통해 만들어봐야겠다는 생각을 했다.
이것을 만들기 위한 정보를 찾던 도중 유튜브에서 마침 적당한 영상을 찾았다.
간단히 초음파센서와 서보모터를 이용해서 구현을 하는 것이였고 더 많은 정보를 얻기 위해 댓글을 확인 한 순간 어이가 없었다.
그 이유는 바로 소스코드를 무려 5만원주고 팔고있었으며 수많은 사람들이 그럼에도 불구하고 기꺼이 구매하려는 것이였다.
별로 어려워 보이지도 않는 프로젝트인데 5만원씩이나 주고 팔다니 내가 직접 구상해서 만들어봐야겠다.
설계방법
우선 초음파센서와 서보모터를 연결시켜준 후 센서에서 입력되는 값에 따라 모터를 회전시키도록 해야한다.
그러나 여기서 문제점이 하나 발생한다. 모터는 각도를 회전시키는 방법인 반면 초음파센서는 거리를 탐지하는 센서이다.
죽었다깨어나도 각도를 초음파센서가 인식할 수 없다. 이를 해결하기 위해서는 초음파센서 한개로는 부족하다.
해결법은 바로 두개 이상의 센서를 이용하여 각가의 거리에 따라 모터를 회전시키면 된다.
즉, sen1, sen2 두개의 센서가 있고 센서가 인식하기 시작하는 거리 d가 있다고 가정하자.
d가 sen1에 인식하게 되면 -90°, sen2에 인식하면 +90° 로 움직일 수 있도록 모터를 제어하면 된다.
이렇게 하면 거리(d)에 따라 모터의 각도를 회전 할 수 있게 된다.
마지막으로 모터 위에 미니손풍기 하나만 달아주면 끝!!
소스코드
#include<Servo.h>
const int servoPin = 10; //서보모터
Servo myservo;
int trig1 = 7; //초음파센서1
int echo1 = 5;
int trig2 = 4; //초음파센서2
int echo2 = 2;
void setup() {
myservo.attach(servoPin);
pinMode(trig1, OUTPUT);
pinMode(echo1, INPUT);
pinMode(trig2, OUTPUT);
pinMode(echo2, INPUT);
}
void loop() {
digitalWrite(trig1, HIGH);
delayMicroseconds(10);
digitalWrite(trig1, LOW);
int duration1 = pulseIn(echo1, HIGH);
int dis1 = duration1 / 29 / 2;
if (dis1 < 9) { //특정거리 이내에 물체가 있으면
myservo.write(90); //각도를 틀어라
delay(1000);
}
digitalWrite(trig2, HIGH);
delayMicroseconds(10);
digitalWrite(trig2, LOW);
int duration2 = pulseIn(echo2, HIGH);
int dis2 = duration2 / 29 / 2;
if (dis2 < 9) {
myservo.write(180); //이전 서보모터의 각도와 반대값
delay(1000);
}
}
사진 및 영상
초음파 센서 두개만 사용해서 너무 획획 회전하는 느낌...
3개로 하면 더 세밀하게 조정 할 수 있을 텐데 당장 부품이 없고 센서 하나에 1000원인데 배송비가 2500원이라 배보다 배꼽이 더 크다...
아무튼 이로써 5만원짜리코드(?)도 직접 설계해보고 나름 성공적인 결과물이다.
(말이 프로젝트지 막상 결과물을 보면 볼품없어보이는건 기분탓인가.....)
'아두이노 > 프로젝트' 카테고리의 다른 글
[아두이노] 알람시계 프로젝트(RTC, LCD, 블루투스) (3) | 2021.07.01 |
---|---|
[아두이노] 신호등 프로젝트(초음파, 7세그먼트, 피에조부저) (0) | 2021.06.26 |