- Arduino 기반 바닥 청소 로봇을 만드는 데 필요한 재료
- 휴대용 진공 청소기
- HC-SR04 초음파 센서 모듈
- 계단 감지 용 바닥 센서 (IR 센서)
- Arduino 기반 바닥 청소기 로봇의 회로도
- Arduino 기반 바닥 청소 로봇을위한 회로 구축
- Arduino
오늘날의 시나리오에서 우리는 모두 일에 너무 바빠서 집을 제대로 청소할 시간이 없습니다. 문제에 대한 해결책은 매우 간단합니다. irobot roomba 와 같은 가정용 진공 청소기 로봇을 구입 하면 버튼을 눌러 집을 청소할 수 있습니다. 그러나 이러한 상용 제품은 비용이라는 일반적인 문제입니다. 그래서 오늘 우리는 간단한 바닥 청소기 로봇 을 만들기로 결정했습니다.이 로봇 은 만들기가 간단 할뿐만 아니라 시중에서 판매되는 상업용 제품에 비해 매우 저렴합니다. 자주 읽는 사람들은 우리가 오래 전에 만든 Arduino 진공 청소 로봇을 기억할 것입니다. 그러나 그 로봇은 매우 부피가 커서 이동하려면 큰 납축 배터리가 필요했습니다. 새로운 Arduino 진공 청소기 여기서 만들려고하는 것은 작고 실용적입니다. 또한이 로봇에는 초음파 센서와 IR 근접 센서가 있습니다. 초음파 센서를 사용하면 로봇이 장애물을 피할 수 있으므로 방이 적절하게 청소 될 때까지 자유롭게 움직일 수 있으며 근접 센서는 계단에서 떨어지지 않도록 도와줍니다. 이 모든 기능이 흥미롭게 들리 죠? 자, 시작합시다.
이전 기사 중 하나에서 자체 균형 로봇, 자동 표면 소독 로봇, 장애물 회피 로봇과 같은 많은 봇을 만들었습니다. 그것이 당신에게 흥미로울 것 같으면 그것들을 확인하십시오.
Arduino 기반 바닥 청소 로봇을 만드는 데 필요한 재료
진공 청소기 로봇 의 하드웨어 섹션을 구축하기 위해 매우 일반적인 구성 요소를 사용 했으므로 지역 취미 상점에서 모든 구성 요소 를 찾을 수 있습니다. 다음은 모든 구성 요소의 이미지와 함께 필요한 재료의 전체 목록입니다.
- Arduino Pro Mini-1
- HC-SR04 초음파 모듈-3
- L293D 모터 드라이버-1
- 5Volt N20 모터 및 장착 브래킷-2
- N20 모터 휠-2
- 스위치-1
- LM7805 전압 레귤레이터-1
- 7.4V 리튬 이온 배터리-1
- IR 모듈-1
- 퍼프 보드-1
- 캐스터 휠-1
- MDF
- 일반 휴대용 진공 청소기
휴대용 진공 청소기
구성 요소 요구 사항 섹션에서 휴대용 진공 청소기에 대해 이야기 했습니다. 아래 이미지는이를 정확히 보여줍니다. 아마존의 휴대용 진공 청소기입니다. 이것은 매우 간단한 메커니즘과 함께 제공됩니다. 하단에는 3 개 부품 (먼지 보관 용 작은 챔버, 중간 부분에는 모터, 팬, 상단의 배터리 소켓 (배터리 덮개 또는 캡 있음)이 있음)에 DC 모터가 있으며 이 모터는 간단한 스위치를 통해 3V (2 * 1.5V AA 배터리)에 직접 연결됩니다. 로봇에 7.4V 배터리로 전원을 공급하고 있으므로 내부 배터리에서 연결을 끊고 5V에서 전원을 공급합니다. 그래서 불필요한 부분을 모두 제거하고 2 선식 모터 만 제거했습니다. 아래 이미지에서 확인할 수 있습니다.
HC-SR04 초음파 센서 모듈
장애물을 감지하기 위해 널리 사용되는 HC-SR04 초음파 거리 센서를 사용 하거나 장애물 회피 센서 라고 부를 수 있습니다. 작업은 매우 간단합니다. 첫째, 송신기 모듈은 공기를 통해 이동하고 장애물에 부딪 히고 다시 튀어 나오는 초음파를 전송하고 수신기는 그 파를 수신합니다. Arduino로 시간을 계산하여 거리를 결정할 수 있습니다. Arduino 기반 초음파 거리 센서 프로젝트에 대한 이전 기사에서 우리는이 센서의 작동 원리를 매우 철저히 논의했습니다. HC-SR04 초음파 거리 센서 모듈에 대해 더 알고 싶다면 확인하실 수 있습니다.
계단 감지 용 바닥 센서 (IR 센서)
기능 섹션에서는 로봇이 계단을 감지하고 스스로 넘어지는 것을 방지 할 수있는 기능에 대해 설명했습니다. 이를 위해 우리는 IR 센서를 사용하고 있습니다. IR 센서와 Arduino 사이에 인터페이스를 만들 것 입니다. IR 근접 센서 의 작동 은 매우 간단하며 IR LED와 포토 다이오드가 있으며 IR LED는 IR 빛을 방출하며이 방출 된 빛 앞에 장애물이 있으면 반사되어 반사 된 빛을 감지합니다. 포토 다이오드에 의해. 그러나 반사로 인해 생성 된 전압은 매우 낮습니다. 이를 높이기 위해 연산 증폭기 비교기를 사용할 수 있으며 증폭하고 출력을 얻을 수 있습니다. IR 모듈Vcc, 접지 및 출력의 세 개의 핀이 있습니다. 일반적으로 센서 앞에 장애물이 있으면 출력이 낮아집니다. 따라서 이것을 사용하여 바닥을 감지 할 수 있습니다. 잠시 동안 센서에서 높은 값을 감지하면 로봇을 멈추거나 되돌 리거나 계단에서 떨어지지 않도록 원하는 모든 작업을 수행 할 수 있습니다. 이전 기사에서 우리는 IR 근접 센서 모듈의 브레드 보드 버전을 만들고 작동 원리를 자세히 설명했습니다.이 센서에 대해 더 알고 싶다면 확인할 수 있습니다.
Arduino 기반 바닥 청소기 로봇의 회로도
장애물을 감지하는 3 개의 초음파 센서가 있습니다. 따라서 초음파 센서의 모든 접지를 연결하고 공통 접지에 연결해야합니다. 또한 센서의 세 Vcc를 모두 연결하고 공통 VCC 핀에 연결합니다. 다음으로 트리거 및 에코 핀을 Arduino의 PWM 핀에 연결합니다. 또한 IR 모듈의 VCC를 5V에 연결하고 Arduino의 접지 핀에 접지하면 IR 센서 모듈의 출력 핀이 Arduino의 디지털 핀 D2에 연결됩니다. 모터 드라이버의 경우 5V 모터를 사용하기 때문에 두 개의 활성화 핀을 5v에 연결하고 드라이버 전압 핀을 5V에 연결합니다. 이전 기사에서 Arduino 모터 드라이버 실드를 만들었습니다. L293D 모터 드라이버 IC에 대해 자세히 알아보기 위해 확인할 수 있습니다.및 그 운영. Arduino, 초음파 모듈, 모터 드라이버 및 모터는 5V에서 작동하며, 더 높은 전압은 배터리를 죽이고 7.4V 배터리를 사용하여 5V로 변환하고 LM7805 전압 조정기가 사용됩니다. 진공 청소기를 주 회로에 직접 연결하십시오.
Arduino 기반 바닥 청소 로봇을위한 회로 구축
내 로봇에 대한 아이디어를 얻기 위해 온라인 에서 진공 청소기 로봇을 검색하고 둥근 모양의 로봇 이미지를 얻었습니다. 그래서 저는 원형 로봇을 만들기로했습니다. 로봇의 체이스와 바디를 만들기 위해 폼 시트, MDF, 판지 등과 같은 많은 옵션이 있습니다.하지만 MDF는 단단하고 방수 특성이 있기 때문에 선택합니다. 이 작업을 수행하는 경우 봇에 대해 선택할 재료를 결정할 수 있습니다.
로봇을 구축하기 위해, 나는 다음의 MDF 시트를 잡았던 두 개의 원을 그린 8 CM 반경, 그 원 안에, 나 또한 가진 다른 원을 그린 4 CM의 반경을진공 청소기를 장착합니다. 그런 다음 원을 잘라냅니다. 또한 휠 경로에 적합한 조각을 잘라내어 제거했습니다 (더 나은 이해를 위해 이미지 참조). 마지막으로 캐스터 휠을위한 세 개의 작은 구멍을 만들었습니다. 다음 단계는 브래킷을 사용하여베이스에 모터를 장착하고 캐스터 휠을 제자리에 고정하는 것입니다. 그런 다음 초음파 센서를 로봇의 왼쪽, 오른쪽 및 가운데에 놓습니다. 또한 IR 모듈을 로봇 아래쪽에 연결합니다. 외부에 스위치를 추가하는 것을 잊지 마십시오. 그게 로봇을 만드는 것입니다.이 시점에서 혼란 스러우면 다음 이미지를 참조하세요.
윗부분도 폼 시트에 반지름 11cm의 원을 그려서 자릅니다. 윗부분과 아랫 부분 사이의 간격을 위해 4cm 길이의 플라스틱 튜브 3 개를 자릅니다. 그 후 바닥 부분에 플라스틱 스페이서를 붙인 다음 상단 부분을 붙였습니다. 원하는 경우 봇의 측면 부분을 플라스틱 또는 유사한 재료로 덮을 수 있습니다.
Arduino
이 프로젝트의 전체 코드는 문서 끝에 제공됩니다. 이 Arduino 코드는 Arduino 기반 초음파 거리 센서 코드 와 유사 하며 바닥 감지 만 변경됩니다. 다음 줄에서는 코드가 어떻게 작동하는지 설명합니다. 이 경우 추가 라이브러리를 사용하지 않습니다. 아래에서는 코드를 단계별로 설명했습니다. 매우 간단하기 때문에 HC-SR04 센서의 거리 데이터를 디코딩하는 데 추가 라이브러리를 사용하지 않습니다. 다음 줄에서 방법을 설명했습니다. 먼저 Arduino 보드에 연결된 3 개의 초음파 거리 센서 모두에 대해 Trigger Pin과 Echo Pin을 정의해야합니다. 이 프로젝트에는 3 개의 Echo 핀과 3 개의 Trigger 핀이 있습니다. 1은 왼쪽 센서, 2는 전면 센서, 3은 오른쪽 센서입니다.
const int trigPin1 = 3; const int echoPin1 = 5; const int trigPin2 = 6; const int echoPin2 = 9; const int trigPin3 = 10; const int echoPin3 = 11; int irpin = 2;
그런 다음 모두 (int) 유형 변수 인 거리에 대한 변수를 정의하고 기간 동안 (long)을 사용하기로 선택했습니다. 다시, 우리는 각각 3 개를 가지고 있습니다. 또한 움직임의 상태를 저장하기 위해 정수를 정의했습니다.이 섹션의 뒷부분에서 설명하겠습니다.
긴 기간 1; 긴 기간 2; 긴 기간 3; int distanceleft; int distancefront; int distanceright; int a = 0;
다음으로 설정 섹션에서 pinModes () 함수를 사용하여 모든 원근 핀을 입력 또는 출력으로 만들어야 합니다. 모듈에서 초음파를 보내려면 트리거 핀을 하이로 활성화해야합니다. 즉 모든 트리거 핀이 OUTPUT으로 정의되어야합니다. 에코를 수신하려면 모든 에코 핀이 INPUT로 정의되도록 에코 핀의 상태를 읽어야합니다. 또한 문제 해결을 위해 직렬 모니터를 활성화합니다. IR 모듈의 상태를 읽기 위해 irpin 을 입력으로 정의했습니다.
pinMode (trigPin1, OUTPUT); pinMode (trigPin2, OUTPUT); pinMode (trigPin3, OUTPUT); pinMode (echoPin1, INPUT); pinMode (echoPin2, INPUT); pinMode (echoPin3, INPUT); pinMode (irpin, INPUT);
그리고 이러한 디지털 핀은 모터 드라이버의 입력에 대한 OUTPUT 으로 정의됩니다.
pinMode (4, OUTPUT); pinMode (7, OUTPUT); pinMode (8, OUTPUT); pinMode (12, OUTPUT);
메인 루프에는 세 개의 센서에 대한 세 개의 섹션이 있습니다. 모든 섹션은 동일하게 작동하지만 각기 다른 센서에 대해 작동합니다. 이 섹션에서는 각 센서에서 장애물 거리를 읽고 정의 된 각 정수에 저장합니다. 거리를 읽으려면 먼저 트리거 핀이 깨끗한 지 확인해야합니다.이를 위해 트리거 핀을 2µs 동안 LOW 로 설정해야합니다. 이제 초음파를 생성하려면 트리거 핀을 10µs 동안 HIGH 로 설정 해야합니다. 이것은 초음파 사운드를 보내고 pulseIn () 함수 의 도움으로 이동 시간을 읽고 그 값을 변수“ duration ”에 저장할 수 있습니다. 이 함수에는 2 개의 매개 변수가 있습니다. 첫 번째는 에코 핀의 이름이고 두 번째는 다음 중 하나를 작성할 수 있습니다.HIGH 또는 LOW. HIGH는 pulseIn () 함수가 튀어 나온 음파로 인해 핀이 HIGH 가 될 때까지 기다렸다가 카운트를 시작한 다음 음파가 끝날 때 핀이 LOW가 될 때 까지 기다렸다가 카운트를 중지 함을 의미합니다. 이 함수는 마이크로 초 단위의 펄스 길이를 제공합니다. 거리를 계산하기 위해 지속 시간에 0.034를 곱하고 (공중 음속은 340m / s) 2로 나눕니다 (음파가 앞뒤로 이동하기 때문입니다). 마지막으로 각 센서의 거리를 해당 정수로 저장합니다.
digitalWrite (trigPin1, LOW); delayMicroseconds (2); digitalWrite (trigPin1, HIGH); delayMicroseconds (10); digitalWrite (trigPin1, LOW); duration1 = pulseIn (echoPin1, HIGH); distanceleft = duration1 * 0.034 / 2;
각 센서에서 거리를 얻은 후 if 문 을 사용 하여 모터를 제어 할 수 있으므로 로봇의 움직임을 제어 할 수 있습니다. 이것은 매우 간단합니다. 먼저 장애물 거리 값을 지정했습니다.이 경우에는 15cm입니다 (원하는대로이 값을 변경). 그런 다음 그 값에 따라 조건을 부여했습니다. 예를 들어 장애물이 왼쪽 센서 앞에오고 (즉, 왼쪽 센서의 거리가 15cm 이하이어야 함) 다른 두 거리가 높을 때 (즉, 센서 앞에 장애물이 없음을 의미), 그런 다음 디지털 쓰기 기능의 도움으로 모터를 오른쪽으로 구동 할 수 있습니다. 나중에 IR 센서의 상태를 확인했습니다. 로봇이 바닥에있는 경우 IR 핀의 값은 LOW 가되고 그렇지 않은 경우 값은높음. 그런 다음 그 값을 int 변수 에 저장했습니다. 이 상태에 따라 로봇을 제어하겠습니다.
이 코드 섹션은 로봇을 앞뒤로 이동하는 데 사용됩니다 .
if (s == HIGH) { digitalWrite (4, LOW); digitalWrite (7, HIGH); digitalWrite (8, LOW); digitalWrite (12, HIGH); 지연 (1000); a = 1; }
그러나이 방법은 모터가 뒤로 이동하고 바닥이 뒤로 이동하고 봇이 앞으로 이동하고 봇이 멈춰있는 상태를 반복 할 때 문제가 있습니다. 이를 극복하기 위해 floor가 없다는 것을 이해 한 후 int에 값 (1)을 저장합니다. 다른 움직임에 대해서도이 상태를 확인합니다.
바닥이 없음을 감지 한 후 로봇은 앞으로 움직이지 않습니다. 대신 왼쪽으로 이동하여 문제를 피할 수 있습니다.
if ((a == 0) && (s == LOW) && (왼쪽 거리 <= 15 && distancefront> 15 && distanceright <= 15)-(a == 0) && (s == LOW) && (distanceleft> 15 && distancefront> 15 && distanceright> 15))
위의 조건에서. 먼저 로봇은 바닥 상태와 정수 값을 확인합니다. 봇은 모든 조건이 충족되는 경우에만 전진합니다.
이제 모터 드라이버에 대한 명령을 작성할 수 있습니다. 이렇게하면 오른쪽 모터가 뒤로, 왼쪽 모터가 앞으로 이동하여 로봇이 오른쪽으로 회전합니다.
이 코드 섹션은 로봇을 오른쪽으로 이동하는 데 사용됩니다.
digitalWrite (4, HIGH); digitalWrite (7, LOW); digitalWrite (8, HIGH); digitalWrite (12, LOW);
봇이 바닥이 없음을 감지하면 값이 1로 변경되고 봇이 왼쪽으로 이동합니다. 좌회전하면 'a'의 값이 1에서 0으로 변경됩니다.
if ((a == 1) && (s == LOW)-(s == LOW) && (왼쪽 거리 <= 15 && distancefront <= 15 && distanceright> 15)-(s == LOW) && (왼쪽 거리 <= 15 && distancefront <= 15 && distanceright> 15)-(s == LOW) && (distanceleft <= 15 && distancefront> 15 && distanceright> 15)-(distanceleft <= 15 && distancefront> 15 && distanceright> 15)) { digitalWrite (4, HIGH); digitalWrite (7, LOW); digitalWrite (8, LOW); digitalWrite (12, HIGH); 지연 (100); a = 0; }
이 코드 섹션은 로봇을 왼쪽으로 이동하는 데 사용됩니다.
if ((s == LOW) && (좌측 거리> 15 && distancefront <= 15 && distanceright <= 15)-(s == LOW) && (distanceleft> 15 && distancefront> 15 && distanceright <= 15)-(s == LOW) && (왼쪽 거리> 15 && distancefront <= 15 && distanceright> 15)) { digitalWrite (4, LOW); digitalWrite (7, HIGH); digitalWrite (8, HIGH); digitalWrite (12, LOW); }
아두 이노 기반의 스마트 진공 청소기 로봇을 만들기위한 것입니다. 프로젝트의 전체 작업 은이 페이지 하단에 링크 된 비디오 에서 찾을 수 있습니다. 질문이 있으시면 아래에 댓글을 남겨주세요.