① 51单片机红外避障小车教程
你好,我以前参加过飞思卡尔智能小车竞赛,程序已经找不到了,但我可以给你一些建议。
寻路或者避障,主要由光电和摄像头两种,如果你采用光电去做,你需要了解一写光电传感器,距离传感器的知识。如果你选择摄像头去做,你需要了解一些AD转换,图像处理的知识
C程序应该包括电机驱动,舵机驱动,当前传感器状态识别/当前图像处理等内容
② 51单片机智能小车制作,求通俗易懂的讲解
系统的单片机程序:
#include"reg52.h"
#definedet_Dist2.55//
单个脉冲对应的小车行走距离,其值为车轮周长
/4#defineRD9//
小车对角轴长度。
#definePI3.1415926
#defineANG_9090
#defineANG_90_T102
#defineANG_180189/
全局变量定义区。
/sbitP10=P1^0;//
控制继电器的开闭sbitP11=P1^1;//
控制金属接近开关。
(2)避障小车的编程扩展阅读:
控制器部分:接收传感器部分传递过来的信号,并根据事前写入的决策系统(软件程序),来决定机器人对外部信号的反应,将控制信号发给执行器部分。好比人的大脑。
执行器部分:驱动机器人做出各种行为,包括发出各种信号(点亮发光二极管、发出声音)的部分,并且可以根据控制器部分的信号调整自己的状态。
对机器人小车来说,最基本的就是轮子。这部分就好比人的四肢一样。 传感器部分:机器人用来读取各种外部信号的传感器,以及控制机器人行动的各种开关。好比人的眼睛、耳朵等感觉器官。
③ 我要做一个基于51单片机的智能避障小车,而且要显示行走距离,要怎么做要用到什么器件什么原理
可以通过轮轴转圈数来计数(可以通过感应端口扫描实现),然后乘以轮胎的周长就是行走路程。
至于避障可以通过红外实现。
④ 求arino避障小车程序,急!(高额悬赏)
//舵机和超声波调试代码
#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=0;i<4;i++){
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的库,这只是调试机器,余下的完全看你的发挥了,加上电机
⑤ STC89C52单片机避障小车程序编写
void Avoid()
{
while(S<400)//小于避障距离就停车同时报警
{
beep=0;//使能蜂鸣器
stop();//停车
}
beep=1;//一直到移除障碍,则关闭蜂鸣器报警回到主程序。
}
⑥ 单片机程序问题 超声波避障小车
修改为:
void Avoid()
{
while(S < 400)//设置避障距离
{
beep = 0;//使能蜂鸣器
stop();//停车
}
beep = 1;//关闭蜂鸣器
}