避障車編程
❶ 求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的庫,這只是調試機器,餘下的完全看你的發揮了,加上電機
❷ 避障小車原理
避障小車原理:
一、運動機理:
控制前面兩個輪子的轉動方向就可以控制整個機器人行進的方向:
1、左右兩個前輪都向前轉,則機器人向「正前方」直線前進;
2、左右兩個前輪都向後轉,則機器人向「正後方」直線倒退;
3、左前輪向後轉,右前輪向前轉,則機器人將以後輪為軸心逆時針轉動,即實現向「右後方」轉彎倒退;
4、左前輪向前轉,右前輪向後轉,則機器人將以後輪為軸心順時針轉動,即實現向「左後方」轉彎倒退。
二、控制原理
在機器人的頭部用鋼絲做兩根觸須,一左一右各連接到一個碰撞開關,分別控制兩個前輪的旋轉方向。
特別注意,左右觸須與對應控制的電機是交叉過來的,即:左邊的觸須連接右邊的碰撞開關,控制右邊的電機;右邊的觸須連接左邊的碰撞開關,控制左邊的電機。
(1)無障礙物
當前方都沒有障礙物,左右兩個輪子都向前正轉,則機器人向「前方」直線前進。
(2)左前方有障礙物
當左前方有障礙物,在左邊觸須碰到障礙物時,控制右邊的輪子反轉,則機器人向「左後方」倒退並轉彎,即方向轉向了障礙物的右邊,從而避開了左邊的障礙物。
向後倒退轉彎會持續一會,在完成轉彎之後,左邊觸須不再碰到障礙物,則兩個輪子都正轉,機器人繼續向新的沒有障礙物的「前方」直線前進。
(3)右前方有障礙物
當右前方有障礙物,在右邊觸須碰到障礙物時,控制左邊的輪子反轉,則機器人向「右後方」倒退並轉彎,即方向轉向了障礙物的左邊,從而避開了右邊的障礙物。
向後倒退轉彎會持續一會,在完成轉彎之後,右邊觸須不再碰到障礙物,則兩個輪子都正轉,機器人繼續向新的沒有障礙物的「前方」直線前進。
(4)正前方有障礙物
當正前方有障礙物,左右兩邊的觸須都會碰到障礙物,控制左右兩邊的輪子都反轉,則機器人向「正後方」倒退,從而避開障礙物。
在直線倒退持續了一會後,左右兩邊的觸須都不再碰到障礙物,則兩個輪子都正轉又變成直線前進;然後又會遇到正前方的障礙物又會直線倒退,再直線前進……如此反復變成一個死循環。
三、電路原理
機器人頭部有兩根鋼絲作的觸須,觸須分別連接在兩個碰撞開關上(注意兩根鋼絲對應的碰撞開關是交叉的,即:「左—右」鋼絲,對應「右—左」碰撞開關)。
(1)沒有障礙物時,觸須沒有被擠壓,不觸發碰撞開關,碰撞開關默認的通路,給電機供給一個「正方向」的電流,電機於是「順時針方向」旋轉。
(2)有障礙物時,觸須被擠壓,觸發碰撞開關,碰撞開關斷開默認通路,連接另外的一組通路,給電機供一個「反方向」的電流,電機於是「逆時針方向」旋轉。
❸ 51單片機紅外避障小車教程
time=th1*256+tl1;
這是用定時器t1做計數,time=th1*256+tl1;
這是根據定時器/計數器t1的計數值計算時間,th1是計數器的高8位,計數結果當然要乘256倍了,再加上低8位的值tl1。
th1=0;
tl1=0;
是計算完了,重新寫0,准備下一次計數。
❹ 我要做一個基於51單片機的智能避障小車,而且要顯示行走距離,要怎麼做要用到什麼器件什麼原理
可以通過輪軸轉圈數來計數(可以通過感應埠掃描實現),然後乘以輪胎的周長就是行走路程。
至於避障可以通過紅外實現。
❺ 循跡避障小車C語言編程
利用紅外感測器接收障礙物信號。。用2路PWM對倆電機進行調速。。實現轉彎和前進。 不知道障礙物是什麼樣的。。所以感測器你最好找個好位置裝好。這個直接影響整體效果。。
❻ STC89C52單片機避障小車程序編寫
void Avoid()
{
while(S<400)//小於避障距離就停車同時報警
{
beep=0;//使能蜂鳴器
stop();//停車
}
beep=1;//一直到移除障礙,則關閉蜂鳴器報警回到主程序。
}
❼ 製作循跡避障小車都需要什麼
需要攝像頭,和距離感測器,即時通信和信息處理中心,運動信號發射線路系統,和執行運動設備,按照一定的編程即可。
❽ 循跡避障小車編程時,cc2530的程序和51單片機程序在編寫時有什麼不同,可以把51的程序直接放到cc2530上嗎
CC2530 和 51單片機 一樣 埠操作多了埠功能寄存器和輸入輸出方向寄存器,多了個無線特殊寄存器。
❾ 寫一個避障小車的程序
很簡單啊,感測器當做I/O輸入,電機當做I/O輸出,首先需要進行轉定義,將地址映射為變數。
#define SENSOR_LEFT 0x????
#define SENSOR_RIGHT 0x????
#define MOTOR_LEFT 0x????
#define MOTOR_RIGHT 0x????
int Func()
{
while (1)
{
if ((1 ==SENSOR_LEFT) && (1 ==SENSOR_RIGHT))
{
MOTOR_LEFT = 0;
MOTOR_RIGHT = 0;
}
else if (1 ==SENSOR_LEFT)
{
MOTOR_LEFT = 1;
MOTOR_RIGHT = 0;
}
else if (1 ==SENSOR_RIGHT)
{
MOTOR_LEFT = 0;
MOTOR_RIGHT = 1;
}
else
{
MOTOR_LEFT = 1;
MOTOR_RIGHT = 1;
}
}
}
