1、把红外避障传感器固定在小车的正前方,接好线。
2、红外传感器的避障距离也是可调,调节滑动变阻器可以调节避障距离。
3、编制程序激态,实现小车检查即可画明搜源好。
//舵机和超声波调试代码#include <Servo.h>
#include <Metro.h>
Metro measureDistance = Metro(50)
Metro sweepServo = Metro(20)
unsigned long actualDistance = 0
Servo myservo //创建舵机
int pos = 60
int sweepFlag = 1
int URPWM = 3//仔晌PWM输出0-25000us,每念隐锋50us代表1cm
int URTRIG= 10// PWM trigger pin PWM串口为10
uint8_t EnPwmCmd[4]={0x44,0x02,0xbb,0x01} // distance measure command 距离测量命令
void setup(){ // Serial initialization 串行初始化
myservo.attach(9) //舵机串口为9
Serial.begin(9600)// Sets the baud rate to 9600
SensorSetup()
}
void loop(){
if(measureDistance.check() == 1){
actualDistance = MeasureDistance()
// Serial.println(actualDistance)
// delay(100)
}
if(sweepServo.check() == 1){
servoSweep()
}
}
void SensorSetup(){
pinMode(URTRIG,OUTPUT)// A low pull on pin COMP/TRIG
digitalWrite(URTRIG,HIGH) // Set to HIGH
pinMode(URPWM, INPUT) // Sending Enable PWM mode command 发送使能控制模式命令
for(int i=0i<4i++){
Serial.write(EnPwmCmd[i])
}
}
int MeasureDistance(){// a low pull on pin COMP/TRIG triggering a sensor reading 触发传感器读数
digitalWrite(URTRIG, LOW)
digitalWrite(URTRIG, HIGH) // reading Pin PWM will output pulses读引脚脉宽调制将输出脉冲
unsigned long distance=pulseIn(URPWM,LOW)
if(distance==50000){ // the reading is invalid.阅读无效
Serial.print("Invalid")
}else{
distance=distance/携腔50 // every 50us low level stands for 1cm
}
return distance
}
void servoSweep(){
if(sweepFlag ){
if(pos>=60 &&pos<=120){
pos=pos+1 // in steps of 1 degree 1度角度的转动
myservo.write(pos)// tell servo to go to position in variable 'pos' 告诉舵机转动的角度
}
if(pos>119) sweepFlag = false // assign the variable again 重新分配变量
}else {
if(pos>=60 &&pos<=120){
pos=pos-1
myservo.write(pos)
}
if(pos<61) sweepFlag = true
}
}
////////////////////////////////////////////////////////////
需要加载一个Metro.h的库,这只是调试机器,余下的完全看你的发挥了,加上电机
常用的采用光探测物体的模块有红外测距与激光测距,红外测距模块价格低廉,科技陵轿小制作中被广泛使用。从小车底盘上可以发现,小车前部左右两侧各有一个红外避障探头(集成在底盘电路板上),用于探测左前或右前方在一定范围内是否有障碍物。
红外避障探头具有一对红外线发射与接收管,发射管发射出一定频率的红外线,当检测方向遇到障碍物(反射面)时,红外线反射回来被接收尺洞肆管接收,经过比较器电路处理之后,绿色指示灯会亮起,同时信号输出接口输出数字信号(一颤册个低电平信号),可通过红外避障可调电阻调节检测距离,有效距离范围 2~30cm。
接线:
arduino A4 A5端口接底盘P4的OUT3 OUT4两个引脚,把arduino 5V与GND与底盘上的vcc GND相连。
测试探头:
将避障模块的红外探头对准墙壁或其他障碍物,距离为3 – 30cm厘米以内,此时指示灯亮,输出低电平。
通过读取arduino A4 A5电平状态,判断哪个方向有障碍物,以此改变小车的运行方向。
算法如下:
两个红外探头模块检测到物体(都是低电平)————停车
只有左探头模块检测到物体——右转
只有右探头模块检测到物体——左转
两个红外探头模块都没检测到物体(都是高电平)——前进
主程序代码如下:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)