這個(gè)項(xiàng)目中,我們將用Arduino制作一個(gè)自動割草機(jī)。該機(jī)器可以自動修剪院子里長高的草。如果有障礙物,它會自動改變方向,有助于減少人力。
本文提供了項(xiàng)目的基本概述,以及制作Arduino割草機(jī)器人所需的組件。提供了電路原理圖和Arduino源代碼,以便簡化組裝和編程過程。
注意:這個(gè)項(xiàng)目不是玩具,它包含鋒利的刀片。如果不小心使用,可能會造成嚴(yán)重的傷害。不要讓它無人看管,刀片應(yīng)正確固定。操作前檢查一下。
材料清單
我們需要以下組件:
1、 Arduino UNO
2、 L293D電機(jī)驅(qū)動盾
3、 超聲波傳感器HC-SR04
4、 超聲波傳感器外殼/支架
6、 直流減速電機(jī) x4
7、 BLDC電機(jī)100KV
8、 舵機(jī)SG-90
9、 ESC模塊
10、舵機(jī)測試儀
11、3針滑動開關(guān)
12、X型十字支架
13、機(jī)器人底盤
14、11.1V鋰電池
什么是割草機(jī)器人(割草機(jī))?
割草機(jī)器人是一種用于自動修剪和維護(hù)草坪的設(shè)備。這些機(jī)器人使用傳感器和算法來導(dǎo)航和修剪草坪,并且可以根據(jù)草坪的生長速度或特定的時(shí)間表來修剪草坪。
一些割草機(jī)器人還配備了諸如障礙物檢測、防盜保護(hù)和通過智能手機(jī)應(yīng)用程序遠(yuǎn)程控制等功能。它們近年來越來越受歡迎,因?yàn)榭梢怨?jié)省時(shí)間和精力。
電路和連接
大致連接:
核心組件:
源代碼/程序
AFMotor Library:
https://github.com/adafruit/Adafruit-Motor-Shield-library
NewPing Library:
https://github.com/microflo/NewPing
需要編譯到Arduino UNO開發(fā)板中的代碼:
#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); }
測試
上傳代碼后,你可以把機(jī)器人帶到野外,也許在高草地區(qū)。高草地區(qū)可以是一個(gè)很好的測試選擇。
打開機(jī)器人上的開關(guān),確保電源為Arduino板提供正確的電壓,并且所有組件都正確連接。通過手動控制機(jī)器人的運(yùn)動來測試機(jī)器人的電機(jī),確保機(jī)器人運(yùn)動平穩(wěn)準(zhǔn)確。
測試機(jī)器人的傳感器,在其路徑上放置障礙物,并確保能避開它們。此外,檢查傳感器的范圍和靈敏度,以確保機(jī)器人可以檢測到草的存在。
審核編輯:湯梓紅
-
傳感器
+關(guān)注
關(guān)注
2542文章
50241瀏覽量
750074 -
機(jī)器人
+關(guān)注
關(guān)注
210文章
27989瀏覽量
205536 -
電機(jī)
+關(guān)注
關(guān)注
141文章
8833瀏覽量
144576 -
BLDC
+關(guān)注
關(guān)注
202文章
776瀏覽量
96610 -
Arduino
+關(guān)注
關(guān)注
187文章
6455瀏覽量
186348
原文標(biāo)題:用Arduino做一個(gè)自動割草機(jī)
文章出處:【微信號:IoT前哨站,微信公眾號:IoT前哨站】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論