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+程序在文末)/*!
* MindPlus
* uno
*
*/
#include <Voice68.h>
#include <DFRobot_URM10.h>
#include <DFRobot_Servo.h>
// 动态变量
volatile float mind_n_nearOrLeft, mind_n_distance, mind_n_preDist, mind_n_distMin,
mind_n_distMax;
// 创建对象
VOICE68 voice(11,12,13);
DFRobot_URM10 urm10;
Servo servo_A3;
Servo servo_A1;
// 主程序开始
void setup() {
servo_A3.attach(A3);
servo_A1.attach(A1);
mind_n_nearOrLeft = 0;
mind_n_distance = 0;
mind_n_preDist = 0;
mind_n_distMin = 10;
mind_n_distMax = 30;
}
void loop() {
mind_n_distance = (urm10.getDistanceCM(3, 2));
if ((mind_n_preDist<mind_n_distance)) {
mind_n_nearOrLeft = 0;
}
else {
mind_n_nearOrLeft = 1;
}
if (((mind_n_nearOrLeft==0) && (mind_n_distance==mind_n_distMax))) {
servo_A3.angle(abs(10));
delay(5);
voice.play(50);
voice.play(25);
voice.play(59);
}
if (((mind_n_nearOrLeft==1) && (mind_n_distance==mind_n_distMin))) {
servo_A1.angle(abs(10));
delay(5);
voice.play(26);
}
delay(100);
mind_n_preDist = mind_n_distance;
servo_A3.angle(abs(90));
delay(5);
servo_A1.angle(abs(90));
delay(5);
}
Python模式代码:(Mind+程序在文末)#-*- coding: UTF-8 -*-
# MindPlus
# Python
import time
from pinpong.board import Pin
from pinpong.board import Board
from pinpong.board import Servo
from pinpong.board import SR04_URM10
# 自定义函数
def readSentence_num(num):
Rst.write_digital(0)
time.sleep(0.000002)
Rst.write_digital(1)
time.sleep(0.0001)
Rst.write_digital(0)
time.sleep(0.0001)
for i in range(1, num, 1):
Data.write_digital(1)
time.sleep(0.0001)
Data.write_digital(0)
time.sleep(0.0001)
while not ((Busy.read_digital() == 0)):
pass
Board("uno").begin()
global nearOrLeft
nearOrLeft = 0
global TrigPin
TrigPin = 3
global EchoPin
EchoPin = 2
global servoLeftPin
servoLeftPin = A1
global servoRightPin
servoRightPin = A3
global distance
distance = 0
global preDist
preDist = 0
global distMin
distMin = 10
global distMax
distMax = 30
Rst = 11
Data = 12
Busy = 13
TrigPin = Pin(TrigPin, Pin.OUT)
EchoPin = Pin(EchoPin, Pin.IN)
servoLeftPin = Pin(servoLeftPin, Pin.PWM)
servoRightPin = Pin(servoRightPin, Pin.PWM)
Rst = Pin(Rst, Pin.PWM)
Data = Pin(Data, Pin.PWM)
Busy = Pin(Busy, Pin.PWM)
servoLeftPin = Servo(servoLeftPin)
servoRightPin = Servo(servoRightPin)
(str(servoLeftPin) + str(servoRightPin)) = SR04_URM10(TrigPin,EchoPin)
while True:
distance = (str(servoLeftPin) + str(servoRightPin)).distance_cm()
if (preDist < distance):
nearOrLeft = 0
else:
nearOrLeft = 1
if ((nearOrLeft == 0) and (distance == distMax)):
servoRightPin.write_angle(10)
time.sleep(0.005)
readSentence_num(50)
readSentence_num(25)
readSentence_num(59)
if ((nearOrLeft == 1) and (distance == distMin)):
servoLeftPin.write_angle(10)
time.sleep(0.005)
readSentence_num(26)
time.sleep(0.1)
servoRightPin.write_angle(90)
time.sleep(0.01)
servoLeftPin.write_angle(90)
time.sleep(0.01)
运行效果:
上传程序后,用书本在超声波前做前后移动,当距离分别为10cm和30cm时,舵机动作同时扬声器播报内容。
学习了
页:
[1]