基於Arduino的麥克納姆輪小車程式控制設計

2021-09-01 11:40:14 字數 1708 閱讀 6586

/材料:uno+moebius電機驅動板+藍芽模組

/****************************io引腳定義*****************************/

//電機引腳

#define pwma 3 //a電機轉速

#define dira 2 //a電機轉向

#define pwmb 5 //b電機轉速

#define dirb 4 //b電機轉向

#define pwmc 6 //a電機轉速

#define dirc 7 //a電機轉向

#define pwmd 9 //b電機轉速

#define dird 8 //b電機轉向

//控制電機運動 巨集定義

#define motor_go_forward //車體前進

#define motor_go_back //車體後退

#define motor_go_left_1 //車體左前轉

#define motor_go_left_2 //車體左轉

#define motor_go_left_3 //車體左後轉

#define motor_go_right_1 //車體右前轉

#define motor_go_right_2 //車體右轉

#define motor_go_right_3 //車體右後轉

#define motor_go_stop //車體靜止

//串列埠接收處理

#define max_packetsize 32 //串列埠接收緩衝區

char buffuart[max_packetsize];

unsigned int buffuartindex = 0;

unsigned long preuarttick = 0;

//小車轉向

enum dn

drive_num=def;

//電機控制標誌量

bool flag1=false;

bool stopflag = true;

bool jogflag = false;

uint16_t jogtimecnt = 0;

uint32_t jogtime=0;

//小車電機控制

void car_control()

drive_num=def;

//小車保持姿態210ms

if(millis()-jogtime>=210)

jogtime--;

}if(stopflag == true)

}}//串列埠資料接收處理

void uart_control()

if(buffuartindex > 0 && (millis() - preuarttick >= 100))//超過100ms沒接到資料,則認為已經接收到完整指令

else uart_date=buffuart[0];

buffuartindex = 0;

}switch (uart_date) //串列埠控制指令

}//io初始化

void io_init()

/初始化

void setup()

void loop()

```/

2017 04 21 麥克納姆輪簡介

這個是德國庫卡kmp omnimove移動負載平台上使用的輪子,這個輪子的名字叫麥克納姆輪。麥克納姆輪是基於乙個有許多位於機輪周邊的輪軸的中心輪的原理上,這些成角度的周邊輪軸把一部分的機輪轉向力轉化到乙個機輪法向力上面。依靠各自機輪的方向和速度,這些力的最終合成在任何要求的方向上產生乙個合力向量,從...

基於Arduino的自動澆水

房子裝修好之後,甲醛含量測下來很高,買了好幾盆綠植淨化空氣。結果被派出去長期出差,正值天氣轉暖,花草得經常澆水,只好拜託朋友幫忙,很是麻煩。為了解決這個麻煩,便想著基於arduino做乙個自動澆水裝置,解決在外出差時家裡花花草草的澆水問題。出差期間,在油管上看到一些別人做的案列,發現要實現自動澆水並...

基於arduino的氣象站

bmp180的簡介 壓力範圍 300 1100hpa 海拔 9000 公尺 500 公尺 電源電壓 1.8v 3.6v vdda 1.62v 3 6v vddd 尺寸 3.6mmx3.8x0.93mm 低功耗 5 a,在標準模式 高精度 低功耗模式下,解析度為 0.06hpa 0.5 公尺 高線性模...