2024-10-7 11:30:32 [显示全部楼层]
1227浏览
查看: 1227|回复: 1

[项目] Arduino智能硬件项目:迎宾机器人

[复制链接]
本帖最后由 SimpleChen 于 2024-10-7 17:30 编辑

所需器材:
  • DFRduino UNO R3(含USB线|传感器扩展板)*1
  • URM37 V5.0超声波测距传感器(创客商城有售,文末有链接)*1
  • 单芯优质 杜邦线(10根) 母母头(创客商城有售,文末有链接)*1
  • DFRobot DF9GMS 180° 微型舵机(创客商城有售,文末有链接)*2
  • 68段语音模块(某宝有售)


接线图:(为了使图片更加简洁,本图舍去了VCC和GND线的连接,并且本图中所有连线相交处均不连接,接线图在文末)

上传模式ArduinoC代码:(Mind+程序在文末)
  1. /*!
  2. * MindPlus
  3. * uno
  4. *
  5. */
  6. #include <Voice68.h>
  7. #include <DFRobot_URM10.h>
  8. #include <DFRobot_Servo.h>
  9. // 动态变量
  10. volatile float mind_n_nearOrLeft, mind_n_distance, mind_n_preDist, mind_n_distMin,
  11.                mind_n_distMax;
  12. // 创建对象
  13. VOICE68       voice(11,12,13);
  14. DFRobot_URM10 urm10;
  15. Servo         servo_A3;
  16. Servo         servo_A1;
  17. // 主程序开始
  18. void setup() {
  19.         servo_A3.attach(A3);
  20.         servo_A1.attach(A1);
  21.         mind_n_nearOrLeft = 0;
  22.         mind_n_distance = 0;
  23.         mind_n_preDist = 0;
  24.         mind_n_distMin = 10;
  25.         mind_n_distMax = 30;
  26. }
  27. void loop() {
  28.         mind_n_distance = (urm10.getDistanceCM(3, 2));
  29.         if ((mind_n_preDist<mind_n_distance)) {
  30.                 mind_n_nearOrLeft = 0;
  31.         }
  32.         else {
  33.                 mind_n_nearOrLeft = 1;
  34.         }
  35.         if (((mind_n_nearOrLeft==0) && (mind_n_distance==mind_n_distMax))) {
  36.                 servo_A3.angle(abs(10));
  37.                 delay(5);
  38.                 voice.play(50);
  39.                 voice.play(25);
  40.                 voice.play(59);
  41.         }
  42.         if (((mind_n_nearOrLeft==1) && (mind_n_distance==mind_n_distMin))) {
  43.                 servo_A1.angle(abs(10));
  44.                 delay(5);
  45.                 voice.play(26);
  46.         }
  47.         delay(100);
  48.         mind_n_preDist = mind_n_distance;
  49.         servo_A3.angle(abs(90));
  50.         delay(5);
  51.         servo_A1.angle(abs(90));
  52.         delay(5);
  53. }
复制代码

Python模式代码:(Mind+程序在文末)
  1. #  -*- coding: UTF-8 -*-
  2. # MindPlus
  3. # Python
  4. import time
  5. from pinpong.board import Pin
  6. from pinpong.board import Board
  7. from pinpong.board import Servo
  8. from pinpong.board import SR04_URM10
  9. # 自定义函数
  10. def readSentence_num(num):
  11. Rst.write_digital(0)
  12. time.sleep(0.000002)
  13.     Rst.write_digital(1)
  14.     time.sleep(0.0001)
  15.     Rst.write_digital(0)
  16.     time.sleep(0.0001)
  17.     for i in range(1, num, 1):
  18.         Data.write_digital(1)
  19.         time.sleep(0.0001)
  20.         Data.write_digital(0)
  21.         time.sleep(0.0001)
  22.     while not ((Busy.read_digital() == 0)):
  23.         pass
  24. Board("uno").begin()
  25. global nearOrLeft
  26. nearOrLeft = 0
  27. global TrigPin
  28. TrigPin = 3
  29. global EchoPin
  30. EchoPin = 2
  31. global servoLeftPin
  32. servoLeftPin = A1
  33. global servoRightPin
  34. servoRightPin = A3
  35. global distance
  36. distance = 0
  37. global preDist
  38. preDist = 0
  39. global distMin
  40. distMin = 10
  41. global distMax
  42. distMax = 30
  43. Rst = 11
  44. Data = 12
  45. Busy = 13
  46. TrigPin = Pin(TrigPin, Pin.OUT)
  47. EchoPin = Pin(EchoPin, Pin.IN)
  48. servoLeftPin = Pin(servoLeftPin, Pin.PWM)
  49. servoRightPin = Pin(servoRightPin, Pin.PWM)
  50. Rst = Pin(Rst, Pin.PWM)
  51. Data = Pin(Data, Pin.PWM)
  52. Busy = Pin(Busy, Pin.PWM)
  53. servoLeftPin = Servo(servoLeftPin)
  54. servoRightPin = Servo(servoRightPin)
  55. (str(servoLeftPin) + str(servoRightPin)) = SR04_URM10(TrigPin,EchoPin)
  56. while True:
  57.     distance = (str(servoLeftPin) + str(servoRightPin)).distance_cm()
  58.     if (preDist < distance):
  59.         nearOrLeft = 0
  60.     else:
  61.         nearOrLeft = 1
  62.     if ((nearOrLeft == 0) and (distance == distMax)):
  63.         servoRightPin.write_angle(10)
  64.         time.sleep(0.005)
  65.         readSentence_num(50)
  66.         readSentence_num(25)
  67.         readSentence_num(59)
  68.     if ((nearOrLeft == 1) and (distance == distMin)):
  69.         servoLeftPin.write_angle(10)
  70.         time.sleep(0.005)
  71.         readSentence_num(26)
  72.     time.sleep(0.1)
  73.     servoRightPin.write_angle(90)
  74.     time.sleep(0.01)
  75.     servoLeftPin.write_angle(90)
  76.     time.sleep(0.01)
复制代码


运行效果:
上传程序后,用书本在超声波前做前后移动,当距离分别为10cm和30cm时,舵机动作同时扬声器播报内容。












DFRduino UNO R3(含USB线_传感器扩展板)-套餐组合-DFRobot创客商城.zip

2.99 MB, 下载次数: 18

URM37 V5.0超声波测距传感器-距离传感器-DFRobot创客商城.zip

2 MB, 下载次数: 22

单芯优质杜邦线(10根)母母头-杜邦线-DFRobot创客商城.zip

3.83 MB, 下载次数: 17

DFRobot DF9GMS 180°微型舵机-模拟舵机-DFRobot创客商城.zip

2.03 MB, 下载次数: 20

接线图 程序.zip

1.6 MB, 下载次数: 19

罗罗罗  中级技师

发表于 2024-10-10 22:37:45

学习了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail