主控板
|
Basra主控板(兼容Arduino Uno)
|
扩展板
|
Bigfish2.1扩展板
|
传感器
|
触须传感器
|
近红外传感器
|
|
电池
|
7.4V锂电池
|
下面提供一个实现扫地机器人在行进过程中避障并清扫垃圾的参考程序(sketch_sep14a.ino):
/*------------------------------------------------------------------------------------
版权说明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.
Distributed under MIT license.See file LICENSE for detail or copy at
https://opensource.org/licenses/MIT
by 机器谱 2023-09-14 https://www.robotway.com/
------------------------------*/
#include <Servo.h>
Servo left_wheel; // 左轮
Servo right_wheel; // 右轮
#define forward_speed_left 60 // 小车前进时,左轮速度
#define forward_speed_right 120 // 小车前进时,右轮速度
#define back_speed_left 120 // 小车后退时,左轮速度
#define back_speed_right 60 // 小车后退时,右轮速度
#define turnleft_speed_left 120 // 小车左转时,左轮速度
#define turnleft_speed_right 120 // 小车左传时,右轮速度
#define turnright_speed_left 60 // 小车右转时,左轮速度
#define turnright_speed_right 60 // 小车右转时,右轮速度
#define stop_left 90 // 小车停止时,左轮速度
#define stop_right 90 // 小车停止时,右轮速度
#define obstacle_threshold 500 // 触须传感器阈值
#define ir_threshold 800 // 近红外传感器阈值
int left_obstacle_sensor; // 左侧触须传感器
int right_obstacle_sensor; // 右侧触须传感器
int ir_sensor; // 近红外传感器
void setup() {
delay(50);
Serial.begin(9600);
left_wheel.attach(3); // 定义左右轮引脚
right_wheel.attach(4);
pinMode(A0, INPUT); // 左边触须传感器接口
pinMode(A2, INPUT); // 右边触须传感器接口
pinMode(A3, INPUT); // 前面近红外传感器接口
}
void loop() {
left_obstacle_sensor = analogRead(A0); // 读取左边触须传感器值
right_obstacle_sensor = analogRead(A2); // 读取右边触须传感器值
ir_sensor = analogRead(A3); // 读取近红外传感器值
// 如果左边传感器检测到障碍物,执行后退并向右转操作
if (left_obstacle_sensor > obstacle_threshold) {
backRight();
}
// 如果右边传感器检测到障碍物,执行后退并向左转操作
else if (right_obstacle_sensor > obstacle_threshold) {
backLeft();
}
// 如果前面近红外传感器检测到障碍物,执行后退操作
else if (ir_sensor > ir_threshold) {
back();
}
// 如果都没有检测到障碍物,执行前进操作
else {
forward();
}
}
// 小车前进
void forward() {
left_wheel.write(forward_speed_left);
right_wheel.write(forward_speed_right);
}
// 小车后退
void back() {
left_wheel.write(back_speed_left);
right_wheel.write(back_speed_right);
}
// 小车后退左转
void backLeft() {
left_wheel.write(back_speed_left);
right_wheel.write(turnleft_speed_right);
}
// 小车后退右转
void backRight() {
left_wheel.write(turnright_speed_left);
right_wheel.write(back_speed_right);
}
// 小车停止
void stop() {
left_wheel.write(stop_left); // 停止
right_wheel.write(stop_right); // 停止
}
本样机有一些简单的扩展案例,如下图所示将舵机更换为直流电机:
资料内容:
①程序源代码
②样机3D文件
资料下载地址:扫地机器人