⑴ 用单片机AT89C51设计智能小车,要有循迹、避障、计算路程的功能
这个很麻烦的 自己做不但要有单片机基础 还要花费很多精力
如果你只想应付的话就几个人凑钱 在淘宝上买到类似的小车 大概几百元
如果自己做的话 就花个100~200买个车模 然后自己做控制电路
这个得需要经验 慢慢来
⑵ 智能小车避障程序~~~急
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit moto1=P1^5;
sbit moto2=P1^6;
sbit moto3=P2^0;
sbit moto4=P2^1;
sbit en1=P1^7;
sbit en2=P2^2;
///////////////
sbit left1=P1^0;//
sbit left2=P1^1;
sbit left3=P1^2;
sbit mid=P1^3;//
sbit right1=P1^4;
sbit right2=P2^3;
sbit right3=P2^4;////////////////
sbit hled=P0^0;
sbit bled=P0^1;
sbit lled=P0^2;
sbit rled=P0^3;
sbit bizhang=P2^5;
uchar pro_head;
uchar pro_back;
uchar i;
uchar j; //前后占空比标志
void delay(uint z)
{
uchar i;
while(z--)
{
for(i=0;i<121;i++);
}
}
void init()
{
TMOD=0x01;
TH0=(65536-100)/256;
TL0=(65536-100)%6;
EA=1;
ET0=1;
TR0=1;
en1=1;
en2=1;
}
void time0(void) interrupt 1
{
i++;
j++;
if(i<=pro_back)
{
en1=1;
}
else
{
en1=0;
}
if(i==40)
{
en1=~en1;
i=0;
}
if(j<=pro_head)
{
en2=1;
}
else
{
en2=0;
}
if(j==40)
{
en2=~en2;
j=0;
}
TH0=(65536-100)/256;
TL0=(65536-100)%6;
}
void qianjin()/////////////////////
{
pro_back=15;
pro_head=5;
moto1=0;
moto2=0;
moto3=1;
moto4=0;
lled=1;
rled=1;
bled=1;
}
void turn_right1()//
{
pro_back=10;
pro_head=15;
moto1=0;
moto2=1;
moto3=1;
moto4=0;
}
。。。。。。。
void xunji() //
{
uchar flag;
if((left1==0)&&(left2==0)&&(left3==1)&&(mid==1)&&(right1==0)&&(right2==0)&&(right3==0))
{
flag=1;
}
else if((left1==0)&&(left2==0)&&(left3==1)&&(mid==0)&&(right1==0)&&(right2==0)&&(right3==0))
{
flag=2;
}
else if((left1==0)&&(left2==1)&&(left3==1)&&(mid==0)&&(right1==0)&&(right2==0)&&(right3==0))
{
flag=3;
}
、。。。。。。。。。。。。。
switch (flag)
{
case 0:qianjin();headled();
break;
case 1:turn_left1();leftled();
break;
case 2:turn_left2();leftled();
、。。。。。。。。。。。。。。。 break; default:backled();
break;
}
}
void main()
{
init();
delay(600);
jiance();
delay(300);
while(1)
{
if(bizhang==1)
{
xunji();
}
else
bz();
}
}、、、、、、、、、后面根据自己的实际情况填写吧!
⑶ 避障小车原理
避障小车原理:
一、运动机理:
控制前面两个轮子的转动方向就可以控制整个机器人行进的方向:
1、左右两个前轮都向前转,则机器人向“正前方”直线前进;
2、左右两个前轮都向后转,则机器人向“正后方”直线倒退;
3、左前轮向后转,右前轮向前转,则机器人将以后轮为轴心逆时针转动,即实现向“右后方”转弯倒退;
4、左前轮向前转,右前轮向后转,则机器人将以后轮为轴心顺时针转动,即实现向“左后方”转弯倒退。
二、控制原理
在机器人的头部用钢丝做两根触须,一左一右各连接到一个碰撞开关,分别控制两个前轮的旋转方向。
特别注意,左右触须与对应控制的电机是交叉过来的,即:左边的触须连接右边的碰撞开关,控散穗制右边的电机;右边的触须连接左边的碰撞开关,控制左边的电机。
(1)无障碍物
当前方都没有障碍物,左右两个轮子都向前正转,则机器人向“前方”直线前进。
(2)左前方有障碍物
当左前方有障碍物,在左边触须碰到障碍物时,控制右边的轮子反转,则机器人向“左后方”倒退并转弯,即方向转向了障碍物的右边,从而避开了左边的障碍物。
向后倒退转弯会持续一会,在完成转弯之后,左边触须不再碰到障碍物,则两个轮子都正转,机器人继续向新的没有障碍物的“前方”直线前进。
(3)右前方有障碍物
当右前方有障碍物,在右边触须碰到障碍物时,控制左边的轮子反转,则机器人向“右后方”倒退并转弯,即方向转向了障碍物的左边,从而避开了右边的障碍物。
向后倒退转弯会持续一会,在完成转弯之后,右边触须不再碰到障碍物,则两个轮子都正转,机器人继续向新的没有障碍物的“前方”直线前进。
(4)正前方有障碍物
当正前方有障碍物,左右两边的触须都会碰到障碍物,控制左右两边的轮子都反转,则机器人向“正后方”倒退,从而避开障碍物。
在直线倒退持续了一会后,左右两边的触须都不再碰到障碍物,则两个轮子都正转又变成直线前进;然后又会遇到正前方的障碍物又会直线倒退,再直线前进……如此反复变成一个死循环。
三、电路原理
机器人头部有两根钢冲伏卜丝作的触须,触须分别连接在两个碰撞开关上(厅轮注意两根钢丝对应的碰撞开关是交叉的,即:“左—右”钢丝,对应“右—左”碰撞开关)。
(1)没有障碍物时,触须没有被挤压,不触发碰撞开关,碰撞开关默认的通路,给电机供给一个“正方向”的电流,电机于是“顺时针方向”旋转。
(2)有障碍物时,触须被挤压,触发碰撞开关,碰撞开关断开默认通路,连接另外的一组通路,给电机供一个“反方向”的电流,电机于是“逆时针方向”旋转。
⑷ 51单片机红外避障小车教程
你好,我以前参加过飞思卡尔智能小车竞赛,程序已经找不到了,但我可以给回你一些建议。
寻路或者避障答,主要由光电和摄像头两种,如果你采用光电去做,你需要了解一写光电传感器,距离传感器的知识。如果你选择摄像头去做,你需要了解一些AD转换,图像处理的知识
C程序应该包括电机驱动,舵机驱动,当前传感器状态识别/当前图像处理等内容
⑸ 求避障小车的程序
#include<reg52.h> //添加函数库
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
sbit s=P3^5; //定义红外避障检测端口
sbit m1=P3^4; //定义电机M1电平输出端口
sbit m2=P3^6; //定义电机M2电平输出端口
void delay_ms(uint z); //声明延时函数
main() //主函数
{
uint i=0; //初始值设定
m1=1;
m2=1;
while(1) //无限循环
{
if(s==0) //S=0表示前方有障碍物 进行转向
{
for(i=0;i<5;i++)
{
m1=0;
m2=1;
delay_ms(15);//状态保持15ms
m1=1;
m2=1;
delay_ms(5);//状态保持5ms
}
}
if(s==1) //S=1表示前方无障碍物 直线行驶
{
m1=1;
m2=1;
delay_ms(10);//状态保持10ms
}
}
}
void delay_ms(uint z) //延时函数 循环嵌套原理
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
⑹ 求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的库,这只是调试机器,余下的完全看你的发挥了,加上电机
⑺ 怎么编写51单片机C程序让智能循迹小车,无论是否遇到障碍物都朝着目标走啊跪求大神解答。。
http://code.21ic.com/code/27229基于51单片机运用两个单片机控制小车前进,一个控制转向,一个控制后轮前进,两个单片机没有联系各自工作。21ic电子技术网站上有很多源码,可以找找看!
⑻ 求一个智能小车实现电机调速(尽量使速度降低)、循迹避障功能的C程序。
几个驱动轮的?可以用笨一点的方法 如果你是四轮车 你可以控制它直线高速四轮全动 低速动两个
转弯的话 高速可以正转一边反转 低速一边正转 另一边锁死 或者转一个 我比较笨 到现在都没学会pwm 所以只有这本办法了~