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

制作您的第一个 Arduino 机器人 - 最佳初学者指南!

组件和用品

Arduino UNO
× 1
Adafruit L293D 电机防护罩
这是一款低成本的设备,并且易于使用。它是常用的电机防护罩,不需要任何先前的技能。它也可以使用 Adafruit 库轻松编程。
× 1
HC-SR4 超声波传感器
× 1
HC-05 蓝牙模块
× 1
齿轮马达
× 2
轮子
× 2
脚轮
× 2
9V 电池(通用)
× 3
9V 电池夹
× 3
母/母跳线
× 8
塑料盒
× 1

必要的工具和机器

烙铁(通用)
热胶枪(通用)
螺丝刀

应用和在线服务

蓝牙电子产品
Arduino IDE
Adafruit-Motor-Shield-library

关于这个项目

如果您是 Arduino 的初学者并计划制作您的第一个机器人,那么这里有适合您的教程。看看你今天要构建的图像。

在本教程中,我将展示如何制作具有不同功能的 Arduino 机器人。我们可以学习使用不同的程序实现不同的功能,主要是智能手机控制的机器人,带有避障器、墙壁跟随器和迷宫求解器。或者你也可以只为一个功能制作它。

材料和工具

第 2 步:制作机箱

为电机钻两个孔:

连接两个电机:

为脚轮打三个孔:

连接脚轮:

测量并标记正确的直径后,在盒子的两侧开两个孔用于连接电机,在底部开三个孔用于连接脚轮。然后安装电机和脚轮。

电池

连接电池。

连接图。

将电池粘在盒子内。

在脚轮上方的盒子内安装两节 9 伏电池。然后将它们并联并连接一个开关,如上图所示。

连接Arduino和电机扩展板

将电机护罩连接到 Arduino 上方。

将电池线连接到 PWR 电机屏蔽端子。

将电机连接到电机屏蔽。

从此端口移除跳线。

将电机护罩连接到 Arduino 上方并将其放置在电池上方。然后将电机和电池的电线连接到电机护罩。连接前请查看连接图,因为它非常重要。

接线说明:

  • 将左侧电机连接到电机护罩的“M1”
  • 将正确的电机连接到电机护罩的“M3”
  • 将电池的电线连接到电机护罩的“ext pwr”

打两个孔并为 Arduino 供电

标记要打孔的位置。

打孔。

将电池夹连接到 9V 电池的 DC 公头插孔。

将这个 9 伏电池放在盒子里。

制作两个孔用于访问 Arduino 的 USB 端口和 DC 输入端口。另取一块 9 伏电池,将电池夹连接到 DC 公插孔适配器,然后将 DC 公插孔连接到 Arduino DC 输入端口,为 Arduino 供电。然后将电池放在电机和盒子内的 Arduino 之间。

连接蓝牙模块和开关

如连接图所示将蓝牙模块连接到Arduino并将其放入盒子内。然后在盒子的背面打孔安装开关并连接开关(这里因为一些焊接问题我改变了之前使用的开关)。

蓝牙模块接线说明:

  • 蓝牙模块的“TX”去Arduino的“RX”
  • 蓝牙模块的“RX”去Arduino的“TX”
  • 蓝牙模块的“VCC”到Arduino的“5v”
  • 蓝牙模块的“GND”到Arduino的“GND”
  • BT 模块的状态和关键引脚未使用。

整体电路图

传感器超声波安装

拿起超声波传感器,将一个小的“L”形塑料片粘在上面,然后将其粘在塑料盒的顶部(或者,如果您没有胶棒,请使用双面胶带)。然后按照上面的电路图连接跳线。

超声波传感器接线说明:

  • 超声波传感器的“VCC”到Arduino的“+5”
  • 超声波传感器的“GND”到Arduino的“GND”
  • 超声波传感器的“Trig”引脚连接到Arduino的“模拟引脚1”
  • 超声波传感器的“Echo”引脚连接到Arduino的“模拟引脚0”

现在我们完成了所有的连接,是时候进行编程了。

最后一步 - Arduino 代码和蓝牙应用程序编辑

上传“最终草图 " 在代码部分提供。如果您遇到任何错误,请确保您已安装 AFmotor 库。

现在,我们学习了如何轻松地对 Arduino 进行编程。我在这里展示了一些程序,可以将这个机器人用作避障机器人、墙跟随器和蓝牙控制。最后我将这三个功能结合在一起。观看视频了解更多详情和信息

蓝牙应用入门

墙壁跟随器和避障的一些乐趣

在此处访问我的博客 - Robotechmaker.com

如果您有任何问题或任何建议,请在下方评论。

代码

  • 蓝牙(受控机器人)草图
  • 最终草图(最终代码)
  • 避障草图
  • 墙跟随草图
蓝牙(受控机器人)草图Arduino
/*作者:Marcelo Moraes 这个项目包含公共领域的代码。允许修改,恕不另行通知。 *///Libraries#include //ObjectsAF_DCMotor motorRight(1, MOTOR12_64KHZ); // 创建电机 #1, 64KHz pwmAF_DCMotor motorLeft(3, MOTOR12_64KHZ); // 创建电机 #3, 64KHz pwm//Constants and variablechar dataIn ='S';char determinant;char det;int vel =0; //蓝牙Stuffvoid setup() { Serial.begin(9600); // 以 9600 bps 的速度设置串行库 //初始化消息 Serial.println("ArduinoBymyself - ROVERBot"); Serial.println("AF 电机测试!"); //关闭电机 motorRight.setSpeed(0); motorLeft.setSpeed(0); motorRight.run(RELEASE); motorLeft.run(RELEASE); }void loop() { det =check(); //调用check()子程序获取串口代码 //串口代码分析开关(det){ case 'F':// F,向前移动motorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorRight.run(FORWARD); motorLeft.run(FORWARD); det =检查();休息; case 'B':// B, 向后移动 motorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorRight.run(向后); motorLeft.run(向后); det =检查();休息; case 'L':// L, 向左移动轮子 motorRight.setSpeed(vel); motorLeft.setSpeed(vel/4); motorRight.run(FORWARD); motorLeft.run(FORWARD); det =检查();休息; case 'R':// R,向右移动轮子 motorRight.setSpeed(vel/4); motorLeft.setSpeed(vel); motorRight.run(FORWARD); motorLeft.run(FORWARD); det =检查();休息; case 'I':// I, 向右转 motorRight.setSpeed(vel/2); motorLeft.setSpeed(vel); motorRight.run(FORWARD); motorLeft.run(FORWARD); det =检查();休息; case 'J':// J,右转 motorRight.setSpeed(vel/2); motorLeft.setSpeed(vel); motorRight.run(向后); motorLeft.run(向后); det =检查();休息; case 'G':// G,左转 motorRight.setSpeed(vel); motorLeft.setSpeed(vel/2); motorRight.run(FORWARD); motorLeft.run(FORWARD); det =检查();休息; case 'H':// H,左转 motorRight.setSpeed(vel); motorLeft.setSpeed(vel/2); motorRight.run(向后); motorLeft.run(向后); det =检查();休息; case 'S':// S,停止 motorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorRight.run(RELEASE); motorLeft.run(RELEASE); det =检查();休息; }}//获取串口收到的蓝牙码int check(){ if (Serial.available()> 0){// 如果串口中有有效数据 dataIn =Serial.read();// 存入数据a varialbe //检查代码 if (dataIn =='F'){//前向行列式 ='F'; } else if (dataIn =='B'){//后向行列式 ='B'; } else if (dataIn =='L'){//左行列式 ='L'; } else if (dataIn =='R'){//右行列式 ='R'; } else if (dataIn =='I'){//Froward Right 行列式 ='I'; } else if (dataIn =='J'){//向后右行列式 ='J'; } else if (dataIn =='G'){//前向左行列式 ='G'; } else if (dataIn =='H'){//向后左行列式 ='H'; } else if (dataIn =='S'){//停止行列式 ='S'; } else if (dataIn =='0'){//速度 0 vel =0; } else if (dataIn =='1'){//Speed 25 vel =25; } else if (dataIn =='2'){//Speed 50 vel =50; } else if (dataIn =='3'){//Speed 75 vel =75; } else if (dataIn =='4'){//Speed 100 vel =100; } else if (dataIn =='5'){//Speed 125 vel =125; } else if (dataIn =='6'){//Speed 150 vel =150; } else if (dataIn =='7'){//Speed 175 vel =175; } else if (dataIn =='8'){//Speed 200 vel =200; } else if (dataIn =='9'){//Speed 225 vel =225; } else if (dataIn =='q'){//Speed 255 vel =255; } else if (dataIn =='U'){//行列式背光 ='U'; } else if (dataIn =='u'){//Back Lights Off determinant ='u'; } else if (dataIn =='W'){//行列式前灯 ='W'; } else if (dataIn =='w'){//前灯关闭行列式 ='w'; } else if (dataIn =='V'){//Horn On determinant ='V'; } else if (dataIn =='v'){//Horn Off 行列式 ='v'; } else if (dataIn =='X'){//额外的行列式 ='X'; } else if (dataIn =='x'){//Extra Off determinant ='x'; } } 返回行列式;}
最终草图(最终代码)Arduino
/*作者:Muhammed Azharvisit -robotechmaker.com*/#include #define trigPin 14 // 定义传感器的引脚#define echoPin 15 //ObjectsAF_DCMotor motorRight(1, MOTOR12_64KHZ); // 创建电机 #1, 64KHz pwmAF_DCMotor motorLeft(3, MOTOR12_64KHZ); // 创建电机 #3, 64KHz pwm//Constants and variablechar dataIn ='S';char determinant;char det;int vel =255; //蓝牙Stuffvoid setup() { Serial.begin(9600); // 设置串行库为 9600 bps pinMode(trigPin, OUTPUT);// 设置触发引脚为输出(发送声波) pinMode(echoPin, INPUT);// 设置回声引脚为输入(接收声波)/ /初始化消息 Serial.println(" Mr.robot"); Serial.println("上班啦!"); //关闭电机 motorRight.setSpeed(0); motorLeft.setSpeed(0); motorRight.run(RELEASE); motorLeft.run(RELEASE);}void loop() { det =check(); //调用check()子程序获取串口代码 //串口代码分析开关(det){ case 'F':// F,向前移动motorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorRight.run(FORWARD); motorLeft.run(FORWARD); det =检查();休息; case 'B':// B, 向后移动 motorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorRight.run(向后); motorLeft.run(向后); det =检查();休息; case 'L':// L, 向左移动轮子 motorRight.setSpeed(vel); motorLeft.setSpeed(vel/4); motorRight.run(FORWARD); motorLeft.run(FORWARD); det =检查();休息; case 'R':// R,向右移动轮子 motorRight.setSpeed(vel/4); motorLeft.setSpeed(vel); motorRight.run(FORWARD); motorLeft.run(FORWARD); det =检查();休息; case 'I':// I, 向右转 motorRight.setSpeed(vel/2); motorLeft.setSpeed(vel); motorRight.run(FORWARD); motorLeft.run(FORWARD); det =检查();休息; case 'J':// J,右转 motorRight.setSpeed(vel/2); motorLeft.setSpeed(vel); motorRight.run(向后); motorLeft.run(向后); det =检查();休息; case 'G':// G,左转 motorRight.setSpeed(vel); motorLeft.setSpeed(vel/2); motorRight.run(FORWARD); motorLeft.run(FORWARD); det =检查();休息; case 'H':// H,左转 motorRight.setSpeed(vel); motorLeft.setSpeed(vel/2); motorRight.run(向后); motorLeft.run(向后); det =检查();休息; case 'S':// S,停止 motorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorRight.run(RELEASE); motorLeft.run(RELEASE); det =检查();休息; case 'm':// 用于墙壁跟随机器人。 motorRight.setSpeed(vel); //设置电机的速度,在0-255之间 motorLeft.setSpeed (vel);持续时间长,距离远; // 开始扫描 digitalWrite(trigPin, LOW);延迟微秒(2); // 成功的传感器操作需要延迟。数字写入(触发引脚,高);延迟微秒(10); //这个延迟也是必需的!数字写入(trigPin,低);持续时间 =脉冲输入(echoPin,高); distance =(duration/2) / 29.1;// 将距离转换为厘米。 if (distance <30)/*需要与墙保持的距离*/ { Serial.println ("Wall is dected!" );Serial.println ("开始跟随墙");Serial.println("转!"); motorRight.setSpeed(vel); motorLeft.setSpeed(0); motorRight.run(FORWARD); motorLeft.run(RELEASE);延迟(500); // 等待一秒钟} else { Serial.println ("没有检测到墙。转身");延迟(15); motorRight.setSpeed(0); motorLeft.setSpeed(vel); motorRight.run(RELEASE); motorLeft.run(前进); } 休息; case 'b'://避障机器人 motorRight.setSpeed(vel); //设置电机的速度,在0-255之间 motorLeft.setSpeed (vel);久久,远方; // 开始扫描 digitalWrite(trigPin, LOW);延迟微秒(2); // 成功的传感器操作需要延迟。数字写入(触发引脚,高);延迟微秒(10); //这个延迟也是必需的!数字写入(trigPin,低); Aduration =pulseIn(echoPin, HIGH); Adistance =(Aduration/2) / 29.1;// 将距离转换为厘米。 if (Adistance <25)/*如果前方25厘米处有障碍物,请执行以下操作:*/ { Serial.println ("Close Obstacle detected!" );Serial.println ("Obstacle Details:");Serial.print ("Distance From Robot is " );Serial.print (Adistance);Serial.print("CM!");//打印出以厘米为单位的距离.Serial.println("由于距离较近,障碍物被宣布为威胁.");Serial.println("转!"); motorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorLeft.run(向后); // 只要前方有障碍物就转弯。 motorRight.run (FORWARD);} else { Serial.println ("没有检测到障碍物。前进");延迟(15); motorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorRight.run(FORWARD); //如果前方没有障碍物,前进! motorLeft.run(FORWARD); } 休息; }}//获取串口收到的蓝牙码int check(){ if (Serial.available()> 0){// 如果串口中有有效数据 dataIn =Serial.read();// 存入数据一个变量//检查代码 if (dataIn =='F'){//前向行列式 ='F'; } else if (dataIn =='B'){//后向行列式 ='B'; } else if (dataIn =='L'){//左行列式 ='L'; } else if (dataIn =='R'){//右行列式 ='R'; } else if (dataIn =='I'){//Froward Right 行列式 ='I'; } else if (dataIn =='J'){//向后右行列式 ='J'; } else if (dataIn =='G'){//前向左行列式 ='G'; } else if (dataIn =='H'){//向后左行列式 ='H'; } else if (dataIn =='S'){//停止行列式 ='S'; } else if (dataIn =='0'){//速度 0 vel =0; } else if (dataIn =='1'){//Speed 25 vel =25; } else if (dataIn =='2'){//Speed 50 vel =50; } else if (dataIn =='3'){//Speed 75 vel =75; } else if (dataIn =='4'){//Speed 100 vel =100; } else if (dataIn =='5'){//Speed 125 vel =125; } else if (dataIn =='6'){//Speed 150 vel =150; } else if (dataIn =='7'){//Speed 175 vel =175; } else if (dataIn =='8'){//Speed 200 vel =200; } else if (dataIn =='9'){//Speed 225 vel =225; } else if (dataIn =='b'){//Extra On determinant ='b'; } else if (dataIn =='m'){//Extra On determinant ='m'; } } 返回行列式;}
避障草图Arduino
/*作者:Muhammed Azharvisit - robotechmaker.com*/#include #define trigPin 14 // 定义传感器的引脚#define echoPin 15 int vel =255; // 机器人速度//ObjectsAF_DCMotor motorRight(1, MOTOR12_64KHZ); // 创建电机 #1, 64KHz pwmAF_DCMotor motorLeft(3, MOTOR12_64KHZ); // 创建电机 #3, 64KHz pwmvoid setup() { Serial.begin(9600); // 设置串行库为 9600 bps pinMode(trigPin, OUTPUT);// 设置触发引脚为输出(发送声波) pinMode(echoPin, INPUT);// 设置回声引脚为输入(接收声波)/ /初始化消息 Serial.println(" Mr.robot"); Serial.println("上班啦!"); //关闭电机 motorRight.setSpeed(0); motorLeft.setSpeed(0); motorRight.run(RELEASE); motorLeft.run(RELEASE);}void loop() { //避障机器人 motorRight.setSpeed(vel); //设置电机的速度,在0-255之间 motorLeft.setSpeed (vel);持续时间长,距离远; // 开始扫描 digitalWrite(trigPin, LOW);延迟微秒(2); // 成功的传感器操作需要延迟。数字写入(触发引脚,高);延迟微秒(10); //这个延迟也是必需的!数字写入(trigPin,低);持续时间 =脉冲输入(echoPin,高); distance =(duration/2) / 29.1;// 将距离转换为厘米。 if (distance <25)/*如果前方25厘米处有障碍物,请执行以下操作:*/ { Serial.println ("Close Obstacle detected!" );Serial.println ("Obstacle Details:");Serial.print ("距离机器人是");Serial.print(距离);Serial.print("CM!");//以厘米为单位打印距离.Serial.println("由于距离较近,障碍物被宣布为威胁.");Serial.println("转!"); motorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorLeft.run(向后); // 只要前方有障碍物就转弯。 motorRight.run (FORWARD);} else { Serial.println ("没有检测到障碍物。前进");延迟(15); motorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorRight.run(FORWARD); //如果前方没有障碍物,前进! motorLeft.run(FORWARD); } } 
Wall Follower SketchArduino
/*作者:Muhammed Azharvisit - robotechmaker.com*/#include #define trigPin 14 // 定义传感器的引脚#define echoPin 15 int vel =255; // 机器人速度 //ObjectsAF_DCMotor motorRight(1, MOTOR12_64KHZ); // 创建电机 #1, 64KHz pwmAF_DCMotor motorLeft(3, MOTOR12_64KHZ); // 创建电机 #3, 64KHz pwmvoid setup(){ Serial.begin(9600); // 设置串行库为 9600 bps pinMode(trigPin, OUTPUT);// 设置触发引脚为输出(发送声波) pinMode(echoPin, INPUT);// 设置回声引脚为输入(接收声波)/ /初始化消息 Serial.println(" Mr.robot"); Serial.println("上班啦!"); //关闭电机 motorRight.setSpeed(0); motorLeft.setSpeed(0); motorRight.run(RELEASE); motorLeft.run(RELEASE);}void loop(){ // 用于墙壁跟随机器人。 motorRight.setSpeed(vel); //设置电机的速度,在0-255之间 motorLeft.setSpeed(vel);持续时间长,距离远; // 开始扫描 digitalWrite(trigPin, LOW);延迟微秒(2); // 成功的传感器操作需要延迟。数字写入(触发引脚,高);延迟微秒(10); //这个延迟也是必需的!数字写入(trigPin,低);持续时间 =脉冲输入(echoPin,高); distance =(duration / 2) / 29.1;// 将距离转换为厘米。 if (distance <30)/*需要与墙保持的距离*/ { Serial.println("Wall is ditected!"); Serial.println("开始爬墙"); Serial.println("转!"); motorRight.setSpeed(vel); motorLeft.setSpeed(0); motorRight.run(FORWARD); motorLeft.run(RELEASE);延迟(500); // 等待一秒钟 } else { Serial.println("未检测到墙。转身");延迟(15); motorRight.setSpeed(0); motorLeft.setSpeed(vel); motorRight.run(RELEASE); motorLeft.run(FORWARD); }}

示意图


制造工艺

  1. Raspberry Pi 的最佳配件
  2. 资产跟踪最佳实践:如何充分利用来之不易的资产数据
  3. 现在如何充分利用您的供应链
  4. 超酷室内导航机器人
  5. 电机安装座 101:选择最佳电机安装座材料的指南
  6. 最佳工业农产品终极指南
  7. 最佳起重机品牌指南
  8. Ultiboard – 最适合初学者的终极指南
  9. 机械车间最佳 3D 打印机购买指南
  10. 构建物联网原型的最佳方式
  11. CNC Wire EDM:您在车间最好的朋友
  12. 为您的工作选择最好的铣床