coche evitación de obstáculos ultrasónico basado Arduino-
El uso de ondas ultrasónicas, si existe o no es un obstáculo por delante, si no se está convirtiendo el coche, el coche no es recta
materiales necesarios
- El bastidor de la cabina y la rueda (SW puede ser modelado utilizando una impresora 3D y, a continuación, el suelo de la cabina también se pueden comprar directamente en línea, cartón más barata O (∩_∩) O ~ ha)
- placa de desarrollo Arduino y tarjeta de expansión
- Dos engranaje de dirección de 360 grados (I estaba con servo-accionado, el motor también se puede utilizar)
- número de línea de DuPont
- módulo de ultrasonidos
- batería de litio
montaje de automóviles y el módulo de depuración
Servo depurar el aparato de gobierno para aprobar el código de explotación para detener la precuela
código de referencia es la siguiente:
#include <Servo.h>
Servo servo; //定义舵机
void setup()
{
servo.attach(2);//舵机串口设为2
}
void loop()
{
servo.write( 360 );//舵机前转
delay(1000);
servo.write( -360 );//舵机后转
delay(1000);
servo.write( 90 );//舵机停止
delay(1000);
}
Ultrasónica depuración del módulo:
int Ecoh=A6;//Ecoh为回声脚
int Trig=A7;//Trig为触发脚
int Distance;
void setup()
{
Serial.begin(9600);//初始化串口
pinMode(Ecoh,INPUT);//定义超声波输入脚
pinMode(Trig,OUTPUT);//定义超声波输出脚
}
void loop()//距离测试
{
digitalWrite(Trig,LOW);//给触发脚低电平2微妙
delayMicroseconds(2);
digitalWrite(Trig,HIGH);//给触发脚高电平10微妙
delayMicroseconds(10);
digitalWrite(Trig,LOW);//给触发脚持续低电平
float Fdistance=pulseIn(Ecoh,HIGH);//读取高电平时间
Fdistance=Fdistance/58;//L(m)=t(s)*344/2
Distance=Fdistance;
if(Fdistance<400)
{
Serial.print("Distance:");//输出距离
Serial.print(Fdistance);//距离
Serial.print("cm\n");
}
else
Serial.print("!!!out of range!!!\n");
}
obstáculo coche código de evitación.
#include <Servo.h>
Servo servo_pin_right; //定义右驱动
Servo servo_pin_left; //定义左驱动
int Ecoh=A6;//Ecoh为回声脚
int Trig=A7;//Trig为触发脚
int Distance;
void setup()
{
Serial.begin(9600);//初始化串口
pinMode(Ecoh,INPUT);//定义超声波输入脚
pinMode(Trig,OUTPUT);//定义超声波输出脚
servo_pin_right.attach(9);//右驱动串口设为9
servo_pin_left.attach(10);//左驱动串口设为10
}
//===========小车基本运动===============
//void car_go(int time)//小车直行
void car_go()
{
servo_pin_left.write( 360 );//左轮前进
servo_pin_right.write( -360);//右轮前进
//delay( 100*time );//执行时间
}
void car_left(int time)//小车左转
{
servo_pin_left.write( 90);//左轮后退
servo_pin_right.write( -360 );//右轮前进
delay( 100*time );//执行时间
}
void car_back(int time)//小车后退
{
servo_pin_left.write( -360 );//左轮后退
servo_pin_right.write(360 );//右轮后退
delay( 100*time );//执行时间
}
void car_right(int time)//小车右转
{
servo_pin_left.write( 360 );//左轮前进
servo_pin_right.write( 90);//右轮后退
delay( 100*time );//执行时间
}
void car_stop(int time)//小车停止
{
servo_pin_left.write( 90 );//左轮停止
servo_pin_right.write(90 );//右轮停止
delay( 100*time );//执行时间
}
void Distance_test()//距离测试
{
digitalWrite(Trig,LOW);//给触发脚低电平2微妙
delayMicroseconds(2);
digitalWrite(Trig,HIGH);//给触发脚高电平10微妙
delayMicroseconds(10);
digitalWrite(Trig,LOW);//给触发脚持续低电平
float Fdistance=pulseIn(Ecoh,HIGH);//读取高电平时间
Fdistance=Fdistance/58;//L(m)=t(s)*344/2
Distance=Fdistance;
if(Fdistance<400)
{
Serial.print("Distance:");//输出距离
Serial.print(Fdistance);//距离
Serial.print("cm\n");
}
else
Serial.print("!!!out of range!!!\n");
}
void loop()
{
while(1)
{
Distance_test();
if(Distance<24)
{
while(Distance<24)
{
car_right(2);
car_stop(1);
Distance_test();
}
}
else
car_go();
}
}