자동 바닥 청소기는 새로운 것이 아니지만 모두 공통된 문제를 공유합니다. 그들은 모두 그들이하는 일에 너무 비싸다. 오늘 우리는 시장에있는 것의 아주 작은 부분에 불과한 자동 가정 청소 로봇 을 만들 것입니다. 이 로봇은 앞의 장애물과 물체를 감지하고 방 전체가 청소 될 때까지 장애물을 피하면서 계속 움직일 수 있습니다. 바닥을 청소하기 위해 작은 브러시가 붙어 있습니다.
Arduino를 사용하는 스마트 진공 청소 로봇도 확인하십시오.
필요한 구성 요소:
- Arduino UNO R3.
- 초음파 센서.
- Arduino 모터 드라이버 실드.
- 휠 드라이브 로봇 섀시.
- Arduino를 프로그래밍하는 컴퓨터.
- 모터 용 배터리.
- Arduino에 전원을 공급하는 전원 은행
- 구두 브러쉬.
- 스카치 브라이트 스크럽 패드.
참고: 배터리를 사용하는 대신 우리가했던 것처럼 긴 4 연선을 사용할 수도 있습니다. 이것은 매우 우아하거나 실용적인 솔루션은 아니지만 매일 실제 세계에서 사용할 계획이 없다면 할 수 있습니다. 케이블 길이가 충분한 지 확인하십시오.
자세히 설명하기 전에 먼저 초음파에 대해 논의하겠습니다.
HC-SR04 초음파 센서:
초음파 센서는 높은 정확도와 안정적인 판독으로 거리를 측정하는 데 사용됩니다. 2cm에서 400cm 또는 1 인치에서 13 피트까지의 거리를 측정 할 수 있습니다. 공기 중에 40KHz의 주파수로 초음파를 방출하고 물체가 방해를 받으면 센서로 다시 반사됩니다. 물체를 치고 돌아 오는 데 걸리는 시간을 사용하여 거리를 계산할 수 있습니다.
초음파 센서는 "ECHO"라는 기술을 사용합니다. "ECHO"는 단순히 반사 된 음파입니다. 막 다른 골목에 도달 한 후 소리가 다시 반사되면 에코가 발생합니다.
HCSR04 모듈은 'Trigger'핀을 약 10us 동안 높이면 초음파 범위에서 소리 진동이 발생하여 소리의 속도로 8주기의 음파 버스트를 보내고 물체를 치면 Echo 핀으로 수신됩니다. 소리 진동이 돌아 오는 데 걸리는 시간에 따라 적절한 펄스 출력을 제공합니다. 물체가 멀리 떨어져 있으면 ECHO가 들리는 데 더 많은 시간이 걸리고 출력 펄스 폭이 커집니다. 장애물이 가까우면 ECHO가 더 빨리 들리고 출력 펄스 폭이 더 작아집니다.
초음파가 센서로 돌아 오는 데 걸리는 시간을 기준으로 물체의 거리를 계산할 수 있습니다. 소리의 시간과 속도를 알고 있으므로 다음 공식으로 거리를 계산할 수 있습니다.
거리 = (시간 x 공기 중 음속 (343m / s)) / 2.
파도가 동일한 거리를 앞뒤로 이동하므로 값을 2로 나눕니다. 따라서 장애물에 도달하는 시간은 총 소요 시간의 절반에 불과합니다.
따라서 센티미터 단위의 거리 = 17150 * T
우리는 이전 에이 초음파 센서와 Arduino를 사용하여 많은 유용한 프로젝트를 만들었 습니다. 아래에서 확인하십시오.
- 초음파 센서를 사용한 Arduino 기반 거리 측정
- Arduino 및 초음파 센서를 사용한 도어 알람
- Arduino를 사용한 IOT 기반 쓰레기통 모니터링
바닥 청소기 로봇 조립:
섀시에 Arduino를 장착하십시오. 섀시가 금속으로 만들어진 경우에 대비하여 어떤 것도 단락시키지 마십시오. Arduino 및 모터 컨트롤러 실드 용 상자를 구하는 것이 좋습니다. 나사를 사용하여 바퀴와 섀시로 모터를 고정합니다. 섀시에는 공장에서이 작업을 수행 할 수있는 옵션이 있어야하지만 그렇지 않은 경우 다른 솔루션을 즉석에서 만들 수 있습니다. 에폭시는 나쁜 생각이 아닙니다. 섀시 전면에 슈 브러시를 장착합니다. 이를 위해 M-Seal 에폭시와 드릴 나사의 조합을 사용했지만 더 쉬운 다른 솔루션을 사용할 수 있습니다. 브러시 뒤에 Scotch Brite 스크럽 패드를 장착합니다. 우리는 섀시를 가로 지르는 샤프트를 사용했습니다. 스프링이 장착 된 샤프트를 함께 사용할 수 있습니다. 배터리 (또는 섀시 뒷면의 케이블)를 장착합니다.에폭시 또는 배터리 홀더를 사용하는 것이 좋습니다. 뜨거운 접착제도 나쁘지 않습니다.
배선 및 연결:
이 자동 집 청소 로봇의 회로 는 매우 간단합니다. 아래 언급 된대로 초음파 센서 를 Arduino에 연결하고 모터 드라이버 실드 를 다른 실드처럼 Arduino에 놓습니다.
초음파의 Trig 핀은 Arduino의 12 번째 핀에 연결되고 Echo 핀은 13 번째 핀에 연결되고 전압 핀은 5V 핀에 연결되고 접지 핀은 접지 핀에 연결됩니다. Echo 핀과 Trig 핀을 사용하면 Arduino가 센서와 통신 할 수 있습니다. 전원은 전압 및 접지 핀을 통해 센서에 전달되며 Trig 및 Echo 핀을 통해 Arduino와 데이터를주고받을 수 있습니다. 여기에서 Arduino와 초음파 센서의 인터페이스에 대해 자세히 알아보십시오.
모터 실드는 최소 2 개의 출력이 있어야하며 2 개의 모터에 연결되어야합니다. 일반적으로 이러한 출력은 "M1"및 "M2"또는 "Motor 1"및 "Motor 2"로 표시됩니다. 배터리와 파워 뱅크를 모터 실드와 Arduino에 각각 연결합니다. 교차 연결하지 마십시오. 모터 실드에는 입력 채널이 있어야합니다. 전선을 사용하는 경우 AC 어댑터에 연결합니다.
프로그래밍 설명:
Arduino IDE를 엽니 다. 이 튜토리얼의 끝에 제공된 전체 Arduino 코드를 IDE에 붙여 넣습니다. Arduino를 컴퓨터에 연결하십시오. 도구 / 포트에서 포트를 선택합니다. 업로드 버튼을 클릭합니다.
로봇을 테스트하십시오. 너무 적거나 너무 많이 바뀌면 완벽해질 때까지 지연을 실험하십시오.
코드로 들어가기 전에 DC 모터를 구동하기 위해 Adafruit Motor Shield Library 를 설치해야합니다. L293D 모터 드라이버 실드를 사용하고 있으므로 여기에서 AFmotor 라이브러리를 다운로드해야합니다. 그런 다음 Arduino IDE 라이브러리 폴더에 추가하십시오. 이름을 AFMotor로 바꾸십시오. 이 라이브러리 설치에 대해 자세히 알아보십시오.
코드는 쉽고 쉽게 이해할 수 있지만 여기서는 몇 가지 부분을 설명했습니다.
아래 코드는 로봇을 설정합니다. 먼저 모터 드라이버 실드를 사용하여 모터를 구동하기위한 Adafruit 라이브러리를 포함했습니다. 그 후 Trig 핀과 Echo 핀을 정의했습니다. 또한 모터를 설정합니다. Trig 핀을 출력으로 설정하고 Echo 핀을 입력으로 설정합니다.
#include #define trigPin 12 #define echoPin 13 AF_DCMotor motor1 (1, MOTOR12_64KHZ); AF_DCMotor 모터 2 (2, MOTOR12_8KHZ); void setup () {pinMode (trigPin, OUTPUT); pinMode (echoPin, INPUT); }
아래 코드는 Arduino에 다음 명령을 반복하도록 지시합니다. 그 후 센서를 사용하여 초음파를 송수신합니다. 초음파가 반사되면 물체와의 거리를 계산하고 물체가 설정된 거리 내에 있음을 확인한 후 Arduino에 그에 따라 모터를 회전하도록 지시합니다.
void loop () {긴 기간, 거리; digitalWrite (trigPin, LOW); delayMicroseconds (2); digitalWrite (trigPin, HIGH); delayMicroseconds (10); digitalWrite (trigPin, LOW); 기간 = pulseIn (echoPin, HIGH); 거리 = (기간 / 2) / 29.1; if (거리 <20) {motor1.setSpeed (255); motor2.setSpeed (0); motor1.run (BACKWARD); motor2.run (BACKWARD); 지연 (2000); // 로봇이 회전하는 방식에 따라이를 변경합니다.
이것은 하나의 모터를 회전시키고 다른 하나는 정체 상태로 유지하여 로봇을 회전시킵니다.
아래 코드는 로봇이 앞서 언급 한 경계에서 물체를 감지 할 때까지 앞으로 이동하도록 두 모터를 같은 방향으로 돌리도록합니다.
else {motor1.setSpeed (160); // 로봇의 속도에 따라이를 변경하십시오. motor2.setSpeed (160); // 위에 입력 한 것과 동일한 값으로 변경합니다. motor1.run (FORWARD); motor2.run (FORWARD); }