这个项目中,我们将用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 <AFMotor.h>
#include <NewPing.h>
#include <Servo.h>
#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板提供正确的电压,并且所有组件都正确连接。通过手动控制机器人的运动来测试机器人的电机,确保机器人运动平稳准确。
测试机器人的传感器,在其路径上放置障碍物,并确保能避开它们。此外,检查传感器的范围和灵敏度,以确保机器人可以检测到草的存在。