① 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;//關閉蜂鳴器
}