終于是完成了圖紙的設(shè)計了,導(dǎo)入到建模軟件的效果也還滿意,于是準(zhǔn)備下一步的切割了。
圖紙到實物
我在某寶上找了個加工KT板的廠家,將圖紙發(fā)過去了。之前確實考慮過使用木板,但是輕木太軟,桐木太脆,椴木太重,權(quán)衡下來還是切kt板,因為之前玩航模確實很多飛機(jī)都是用KT板做的,很結(jié)實也很輕。
等待了幾天之后,切割好的kt板送到了,查看了一下,沒有問題,由于切割KT板的時候切割機(jī)會燒灼KT板的邊緣導(dǎo)致一些尺寸會對不上,幸好我在設(shè)計圖紙的時候預(yù)留了一些余量,這點也提醒大家注意。
圖5_看圖王.jpg (406.54 KB, 下載次數(shù): 208)
下載附件
2019-6-10 14:11 上傳
隨后急忙的組裝了起來,這時候門鈴響了,原來是買的電機(jī)到貨了。正好趕上組裝,于是迅速的安裝上了電機(jī),成品如下:
圖34.jpg (511.57 KB, 下載次數(shù): 195)
下載附件
2019-6-10 14:11 上傳
下面就是安裝我設(shè)計的電路板了,設(shè)計圖紙時給氣墊船設(shè)計了一個設(shè)備艙,正好可以容納電路板。
微信圖片_20190508212929.jpg (456.47 KB, 下載次數(shù): 207)
下載附件
2019-6-10 14:13 上傳
電路板裝進(jìn)去,將電機(jī)插頭插到板子上,到這里所有的結(jié)構(gòu)搭建以及硬件電路都連接好了,下面就是給氣墊船注入靈魂——編寫代碼了!
圖33_看圖王.jpg (498.95 KB, 下載次數(shù): 196)
下載附件
2019-6-10 14:11 上傳
程序的編寫
其實控制程序非常簡單,首先說接受端,其實就是將無線模塊接收到的數(shù)據(jù)轉(zhuǎn)換成對應(yīng)引腳輸出的PWM占空比來控制電機(jī)的轉(zhuǎn)速。于是一段時間過后,我編好了接受端的代碼。- //接收端程序
-
- #include <SPI.h>
- #include <Mirf.h>
- #include <nRF24L01.h>
- #include <MirfHardwareSpiDriver.h>
-
- unsigned int value;
- unsigned int CH1,CH3,left,right,qi;
- void setup()
- {
- Serial.begin(9600);
- Mirf.spi = &MirfHardwareSpi;
- Mirf.init();
-
- Mirf.setRADDR((byte *)"FGHIJ"); //設(shè)置自己的地址(接收端地址),使用5個字符
- Mirf.payload = sizeof(value);
- Mirf.channel = 90; //設(shè)置使用的信道
- Mirf.config();
- Serial.println("Listening..."); //開始監(jiān)聽接收到的數(shù)據(jù)
-
- pinMode(10,OUTPUT);
- pinMode(5,OUTPUT);
- pinMode(6,OUTPUT);
- pinMode(3,OUTPUT);
- pinMode(9,OUTPUT);
- digitalWrite(5,0);
- digitalWrite(6,0);
- digitalWrite(9,0);
- digitalWrite(3,0);
- digitalWrite(10,0);
- }
-
- void loop()
- {
- if(Mirf.dataReady()) { //當(dāng)接收到程序,便從串口輸出接收到的數(shù)據(jù)
- Mirf.getData((byte *) &value);
-
- CH3=(unsigned int)value&255;
- CH1=(unsigned int)value>>8;
-
-
- if(CH1>140)
- {
- qi=CH1;
- if(CH3>135) //左轉(zhuǎn)彎
- {
- right=CH1;
-
- if(CH1<CH3)
- left=0;
- else
- left=CH1-CH3/3.5;
- }
- else if(CH3<120) //右轉(zhuǎn)彎
- {
- if(CH1<(255-CH3))
- right=0;
- else
- right=CH1-((255-CH3)/3.5);
-
- left=CH1;
- }
- else
- {
- right=CH1;
- left=CH1;
- }
- }
- else
- {
- left=0;
- right=0;
- qi=0;
- }
-
- analogWrite(3,left);
- analogWrite(9,right);
- analogWrite(10,qi);
-
- Serial.print("Got data: ");
- Serial.print(CH1);
- Serial.print(" ");
- Serial.print(CH3);
- Serial.print(" ");
- Serial.print(left);
- Serial.print(" ");
- Serial.println(right);
- }
- }
復(fù)制代碼
發(fā)送端也是很簡單,我使用搖桿作為控制桿,用arduino的ADC引腳讀取搖桿輸出的電壓來獲得當(dāng)前的搖桿位置,然后將搖桿位置的數(shù)據(jù)通過無線模塊發(fā)送出去。- //發(fā)射端程序
-
- #include <SPI.h>
- #include <Mirf.h>
- #include <nRF24L01.h>
- #include <MirfHardwareSpiDriver.h>
-
- unsigned int value,value1;
- unsigned int data;
-
- unsigned int CH1,CH3;
- void setup()
- {
- Mirf.spi = &MirfHardwareSpi;
- Mirf.init();
- Mirf.setRADDR((byte *)"ABCDE"); //設(shè)置自己的地址(發(fā)送端地址),使用5個字符
- Mirf.payload = sizeof(value);
- Mirf.channel = 90; //設(shè)置所用信道
- Mirf.config();
-
- Serial.begin(9600);
- }
-
- void loop()
- {
- Mirf.setTADDR((byte *)"FGHIJ"); //設(shè)置接收端地址
- value = analogRead(1); //0-255的隨機(jī)數(shù)
- value1 = analogRead(6);
-
- CH1=value/4;
- CH3=value1/4;
-
- data=((unsigned int)(CH1<<8)+CH3);
- Serial.print(CH1);
- Serial.print(" ");
- Serial.print(CH3);
- Serial.print(" ");
- Serial.println(data);
- //Serial.println(value1);
- Mirf.send((byte *)&data); //發(fā)送指令,發(fā)送隨機(jī)數(shù)value
- while(Mirf.isSending()) delay(1); //直到發(fā)送成功,退出循環(huán)
- delay(10);
- }
復(fù)制代碼 下載程序到氣墊船和遙控器中:
圖32.jpg (478.28 KB, 下載次數(shù): 203)
下載附件
2019-6-10 14:11 上傳
上電!我使用的電池是550mah的3.7v鋰電池,帶這四個電機(jī)大概可以玩10分鐘的時間。于是》》》迫不及待的上電開始玩耍!
圖36_看圖王.jpg (509.47 KB, 下載次數(shù): 207)
下載附件
2019-6-10 14:15 上傳
需要的一些改進(jìn)
在玩耍中發(fā)現(xiàn)由于氣墊船的阻力非常小(幾乎不和地面接觸),所以推進(jìn)電機(jī)要是速度不一樣就會導(dǎo)致氣墊船偏航,但是由于驅(qū)動芯片的誤差以及電機(jī)之間的誤差問題,即使我使用相同占空比的PWM方波驅(qū)動他們,仍然會導(dǎo)致他們轉(zhuǎn)速不同以致氣墊船容易偏航(很難跑直線),這個問題比較影響玩耍的體驗感,需要改進(jìn)。
計劃是使用一個電子羅盤,也就是磁力計來確定現(xiàn)在氣墊船船頭的指向,然后引入PID算法來通過電子羅盤的數(shù)據(jù)來校正控制每個推進(jìn)電機(jī)的PWM波,這樣應(yīng)該會改善到整體的操控性。
不過這有需要一段時間的研究,主要是軟件方面,現(xiàn)在板子上預(yù)留了IIC的通信接口,想必找到一個IIC通信的電子羅盤應(yīng)該不是什么難事,問題就在PID算法以及一些濾波算法上,我還對PID算法不太了解。而且是否運轉(zhuǎn)的電機(jī)或者電機(jī)內(nèi)的磁鐵會對電子羅盤的數(shù)據(jù)產(chǎn)生干擾也不是很確定。
成功的讓這個氣墊船跑起來達(dá)到了我的目的,對于 其的一些改進(jìn)應(yīng)該會放在之后,應(yīng)為近期準(zhǔn)備開始做室內(nèi)玩的遙控飛機(jī)的板子,是基于51單片機(jī)和LT8920的,所以這個改進(jìn)應(yīng)該會等到做完那個項目之后。如果你對這個氣墊船有什么改進(jìn)的建議,歡迎提出來。