這個項目中,我們將用Arduino制作一個自動割草機。該機器可以自動修剪院子里長高的草。如果有障礙物,它會自動改變方向,有助于減少人力。
本文提供了項目的基本概述,以及制作Arduino割草機器人所需的組件。提供了電路原理圖和Arduino源代碼,以便簡化組裝和編程過程。
注意:這個項目不是玩具,它包含鋒利的刀片。如果不小心使用,可能會造成嚴重的傷害。不要讓它無人看管,刀片應正確固定。操作前檢查一下。
材料清單
我們需要以下組件:
1、 Arduino UNO
2、 L293D電機驅動盾
3、 超聲波傳感器HC-SR04
4、 超聲波傳感器外殼/支架
6、 直流減速電機 x4
7、 BLDC電機100KV
8、 舵機SG-90
9、 ESC模塊
10、舵機測試儀
11、3針滑動開關
12、X型十字支架
13、機器人底盤
14、11.1V鋰電池
什么是割草機器人(割草機)?
割草機器人是一種用于自動修剪和維護草坪的設備。這些機器人使用傳感器和算法來導航和修剪草坪,并且可以根據草坪的生長速度或特定的時間表來修剪草坪。
一些割草機器人還配備了諸如障礙物檢測、防盜保護和通過智能手機應用程序遠程控制等功能。它們近年來越來越受歡迎,因為可以節省時間和精力。
電路和連接
大致連接:
核心組件:
源代碼/程序
AFMotor Library:
https://github.com/adafruit/Adafruit-Motor-Shield-library
NewPing Library:
https://github.com/microflo/NewPing
需要編譯到Arduino UNO開發板中的代碼:
#include#include #include #define TRIG_PIN A0 #define ECHO_PIN A1 #define MAX_DISTANCE 200 #define MAX_SPEED 190 #define MAX_SPEED_OFFSET 20 NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE); AF_DCMotor motor1(1, MOTOR12_1KHZ); AF_DCMotor motor2(2, MOTOR12_1KHZ); AF_DCMotor motor3(3, MOTOR34_1KHZ); AF_DCMotor motor4(4, MOTOR34_1KHZ); Servo myservo; boolean goesForward=false; int distance = 100; int speedSet = 0; void setup() { myservo.attach(10); myservo.write(115); delay(2000); distance = readPing(); delay(100); distance = readPing(); delay(100); distance = readPing(); delay(100); distance = readPing(); delay(100); } void loop() { int distanceR = 0; int distanceL = 0; delay(40); if(distance<=15) { moveStop(); delay(100); moveBackward(); delay(300); moveStop(); delay(200); distanceR = lookRight(); delay(200); distanceL = lookLeft(); delay(200); if(distanceR>=distanceL) { turnRight(); moveStop(); }else { turnLeft(); moveStop(); } }else { moveForward(); } distance = readPing(); } int lookRight() { myservo.write(50); delay(500); int distance = readPing(); delay(100); myservo.write(115); return distance; } int lookLeft() { myservo.write(170); delay(500); int distance = readPing(); delay(100); myservo.write(115); return distance; delay(100); } int readPing() { delay(70); int cm = sonar.ping_cm(); if(cm==0) { cm = 250; } return cm; } void moveStop() { motor1.run(RELEASE); motor2.run(RELEASE); motor3.run(RELEASE); motor4.run(RELEASE); } void moveForward() { if(!goesForward) { goesForward=true; motor1.run(FORWARD); motor2.run(FORWARD); motor3.run(FORWARD); motor4.run(FORWARD); for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) { motor1.setSpeed(speedSet); motor2.setSpeed(speedSet); motor3.setSpeed(speedSet); motor4.setSpeed(speedSet); delay(5); } } } void moveBackward() { goesForward=false; motor1.run(BACKWARD); motor2.run(BACKWARD); motor3.run(BACKWARD); motor4.run(BACKWARD); for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) { motor1.setSpeed(speedSet); motor2.setSpeed(speedSet); motor3.setSpeed(speedSet); motor4.setSpeed(speedSet); delay(5); } } void turnRight() { motor1.run(FORWARD); motor2.run(FORWARD); motor3.run(BACKWARD); motor4.run(BACKWARD); delay(500); motor1.run(FORWARD); motor2.run(FORWARD); motor3.run(FORWARD); motor4.run(FORWARD); } void turnLeft() { motor1.run(BACKWARD); motor2.run(BACKWARD); motor3.run(FORWARD); motor4.run(FORWARD); delay(500); motor1.run(FORWARD); motor2.run(FORWARD); motor3.run(FORWARD); motor4.run(FORWARD); }
測試
上傳代碼后,你可以把機器人帶到野外,也許在高草地區。高草地區可以是一個很好的測試選擇。
打開機器人上的開關,確保電源為Arduino板提供正確的電壓,并且所有組件都正確連接。通過手動控制機器人的運動來測試機器人的電機,確保機器人運動平穩準確。
測試機器人的傳感器,在其路徑上放置障礙物,并確保能避開它們。此外,檢查傳感器的范圍和靈敏度,以確保機器人可以檢測到草的存在。
審核編輯:湯梓紅
-
傳感器
+關注
關注
2548文章
50740瀏覽量
752140 -
機器人
+關注
關注
210文章
28231瀏覽量
206614 -
電機
+關注
關注
142文章
8940瀏覽量
145136 -
BLDC
+關注
關注
205文章
795瀏覽量
96749 -
Arduino
+關注
關注
187文章
6464瀏覽量
186677
原文標題:用Arduino做一個自動割草機
文章出處:【微信號:IoT前哨站,微信公眾號:IoT前哨站】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論