亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Arduino 驱动的迷你漫游车:自制避障机器人

零部件与材料

所需工具

软件与平台

项目背景

我 9 岁的侄子和 7 岁的侄女看了我之前制作的避障机器人视频后兴奋不已。遗憾的是那个教程因硬盘损毁永远丢失了(从此领会备份和 GitHub 的重要性)。

我决定设计一个简化版,既具教育意义又好玩。底盘用的是蟹肉棒包装盒,尺寸刚好完美(感谢父亲大量消费蟹肉棒)。黄油盒也合适。

安全声明: 孩子们几乎完成了所有制作。我绝不建议无监护人指导让儿童操作刀具、电烙铁等。请根据孩子能力判断任务分配。我们甚至让孩子戴护目镜,用无绳电动螺丝刀钻孔以减少风险。急救包全程未用上,但成年人必须把控安全。

电路设计

电路连接了两个舵机,稍显复杂。为方便孩子接线,我将面包板原理图 1:1 打印在 A4 纸上,配对颜色和长度正确的杜邦线。

Arduino 驱动的迷你漫游车:自制避障机器人
Arduino 驱动的迷你漫游车:自制避障机器人

接线完成后上传程序。代码含注释便于调试。若接线正确,舵机转动、LED 闪烁;手伸至超声波模块前,一舵机停转、另一舵机反转片刻即避障动作。

机械组装

  1. 前部标记超声波模块位置,剪开“眼睛”孔。
  2. 侧面测量轮子位置,在盒底边缘剪孔安装舵机,孔径要让舵机本体进去但安装耳卡住。
  3. 小钻头钻两孔装 LED。
  4. 盒底后部拧入或热熔胶固定万向轮。
Arduino 驱动的迷你漫游车:自制避障机器人

将所有电子元件放入盒内,热熔胶固定。胶干后安装车轮。最后装饰盒子(欢迎发照片!)。

Arduino 驱动的迷你漫游车:自制避障机器人

装入电池,小车将在房间随机游走,直到电池耗尽、噪音让你厌烦、或被狗叼走!:D

代码

#include <Servo.h>
/* 如果你的超声波模块只有 3 引脚,取消注释第 6 行,注释掉第 7 行 */
//int distanceR = A0; // Trigger 引脚
int distance = 6; // Trigger 引脚
int pingDelay = 10; // 超声波脉冲宽度
int distanceR = A0; // Echo 引脚
int led1 = 8, led2 = 9; // LED
Servo leftPower;
Servo rightPower;
unsigned long flashTime;
unsigned long nextSensorTime;
float obstacleDist = 0.0f;

void setup() {
  //Serial.begin(115200);
  leftPower.attach(3);
  rightPower.attach(5);
  leftPower.write(90);
  rightPower.write(90);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  delay(1000);
}

void loop() {
  LEDs();
  // 限制测距频率为 5Hz,省电
  if(millis() - nextSensorTime > 200){
    nextSensorTime = millis();
    // 读两次取大值,防止偶发误读
    float reading1 = TakeReading();
    delay(100);
    float reading2 = TakeReading();
    Serial.println(reading1);
    Serial.println(reading2);
    obstacleDist = reading1 >= reading2 ? reading1 : reading2;
    // 距离小于 10cm 转向,否则前进
    if(obstacleDist < 10.0f){
      //Serial.println("turn");
      turn();
    }else{
      //Serial.println("forward");
      forward();
    }
  }
}

void LEDs(){
  if(millis() - flashTime > 1000) flashTime = millis();
  if(millis() - flashTime < 500){
    digitalWrite(led1, LOW);
    digitalWrite(led2, HIGH);
  }else if(millis() - flashTime > 500){
    digitalWrite(led1, HIGH);
    digitalWrite(led2, LOW);
  }
}

void forward(){
  /* 如果车倒退,交换 135 和 45 */
  leftPower.write(135);
  rightPower.write(45);
}

void turn(){
  /* 若想反向转向,取消注释 92-93,注释 95-96 */
  //leftPower.write(90);
  //rightPower.write(135);
  leftPower.write(45);
  rightPower.write(90);
  delay(350);
}

float TakeReading(){
  unsigned long echo = 0;
  float result = 0.0f;
  pinMode(distance, OUTPUT);
  digitalWrite(distance, LOW);
  delayMicroseconds(2);
  digitalWrite(distance, HIGH);
  delayMicroseconds(pingDelay);
  digitalWrite(distance, LOW);
  pinMode(distanceR, INPUT);
  digitalWrite(distanceR, HIGH);
  echo = pulseIn(distanceR, HIGH, 38000);
  result = echo / 58.138;
  return result;
}

原理图文件

Fritzing 源文件:littlerover_87IypZOgwm.fzz

制造工艺

  1. 树莓派 2 运行 Windows IoT Core 打造 Rover 机器人:从入门到进阶指南
  2. Arduino UNO + MAX7219 自制《UFO攻击》复古射击游戏机
  3. Arduino 数字骰子:LCD 显示随机点数的电子骰子
  4. 水驱动火焰效果:Arduino UNO + Neopixel Stick 仿真壁炉
  5. 3D RGB Arduclock — 蓝牙控制全彩LED时钟带RTC与闹钟
  6. MyRiver:基于 Arduino MKR FOX 1200 的河流水质远程监测系统
  7. DIY 钢铁侠人偶:Arduino 控制超声波触发音效与灯光
  8. Arduino + 模拟摇杆互动游戏:五向 LED 反馈
  9. Find Me:基于 Arduino 与蓝牙的智能寻物器制作指南
  10. 打造功能完整的 Arduino 驱动 3D 打印机械臂:分步指南
  11. 便携测距仪 DIY 套件:Arduino Nano + HC-SR04 + 18650 电池 + 3D 打印外壳
  12. DIY Arduino 加湿器控制器:继电器安全控制高压电路