相信每個男生心里都有一個機器人的夢想,但自個花錢去買個機器人總是太奢侈,作為一個工程師,我們可以學以致用,利用自己的專門技術去DIY一個機器人可就不亦樂乎,以下就給大家介紹一下怎樣去制造一個簡單的Arduino小車。以下就是這小車的整體圖
1、材料和工具:
360度連續旋轉舵機兩個
鋁合金型材若干
萬向輪*1
arduino核心板*1 ST188
103電位器
LM339N電壓比較器*1
103電位器*4
IN4007二極管*1
發光二極管*5
L7805CV*3
47uf電解電容6
107鉭電容*1
1K電阻*5
10K電阻*4
微動開關*2
11.1V鋰電池*1(航模用,不用擔心功率不足)
各種杜邦線、插頭若干(用起來方便到爆)
部分元件如下圖:
工具就不多介紹,見下圖
2 、結構制作部分
鋁合金材料
加工好的全部的鋁合金組件(全部手工)
機械結構組裝好后就基本成型了,黑色的是絕緣電工膠帶,便于安放各種電路板。
這個輪子是在街上買的萬向輪然后把輪子單獨拆了下來,輪子厚20mm,直徑50mm。
輪子通過舵機的擺臂固定上,這樣很方便的連接舵機。
萬向輪裝上去,萬向輪高35mm,后面倆輪子裝到舵機上底板正好離地35mm,萬向輪裝上去正好合適,很幸運。
順便說下,上圖中前面那個桿是用來安裝光電傳感器的,由于沒法直接打上孔往上裝,必須解決跟萬向輪凸起的那個沖突,我就畫上一個弧線然后用銼磨了出來,磨出來還很滿意。
下圖中的構件是裝中間兩個光電傳感器的(這兩個光電傳感器視功能可選)
3 、電路制作部分:
下圖是我從網上買的光電傳感器及其基于LM339N的電壓比較器比較器
但是用買來的光電傳感器各種測試不理想,而且還得用導線跟Arduino連接,所以我就有了自己DIY的年頭,我專門花一周時間學習了Altium designer 9,所以參考別人的光電傳感器電壓比較強模塊我畫了原理圖也大致用PCB規劃了一下走線,然后用萬能板焊接,這個過程之后還是相當有成就感的。
? ? ? ?光電傳感器模塊
? ? ? ? Header2方便接跳線帽,可以選擇是加電就返回信號,還是對發光二極管控制才返回信號,我用的加電就返回信號。
下圖是模塊的走線規劃。
光電傳感器由發射二極管和接收管組成,A、K是紅外發射二極管的正負極,C、E是接收管的正負極。如圖:
? ? ? ? ??只要A極接高電平、K極接低電平,紅外發射管就能發出紅外線。可以在傳感器加上外圍電路來檢測接收管的信號,進而確定是否接受到反射回來的紅外線,如上圖圖右下方的器件工作示意圖。
所謂電壓比較的原理就是給任一輸入端一個參考電壓(通過轉動電位器來改變參考電壓的值),我的原理圖中給IN-輸入參考電壓,當IN+的電壓高于IN-時,OUT為低電平,反之亦然,IN+僅需與IN-相差mV就能在OUT端得到比較結果。
在做Arduino擴展板的時候一定要對各端口的使用有個大致的規劃,其實我覺得Arduino核心板的設計是不太理想的,見下圖:
大家都知道,萬能板相鄰兩孔的間距是標準的100mil也就是2.54mm,圖中b= 5.08mm,圖中2.54《a《5.08,這就很尷尬,導致我之前焊的萬能板如果要同時用0-7和8-13口的時候,板子需要很費勁的插上去,并且插上去萬能板就彎曲了,如下圖:
所以我為了避免那樣的情況再次發生,我板子里的端口只用了0-7和A0-A5(A口也可以做數字輸入輸出,端口為14-19),還有VIN-RESET。
電壓比較器原理圖
注:擴展板上加一個復位開關是非常方便調試的。
下圖是用萬能板焊好的電路,這個電路焊完非常有成就感,對于萬能板來說應該密度還挺高的。 怎么樣,本人的焊接技術還行吧!
考慮到給舵機供電的原因,我決定給每個舵機獨立用7805供電,還好L7805CV的電流最大有1A,完全能滿足舵機的需求,這個板我稱作基礎動力電源擴展板,預留了超聲波接口和一個多余的舵機口,所以這個板用來實現超聲波壁障也是沒問題的。
都焊過前面那個板子了,焊這個板子當然是小菜一碟了。
插上調試,我的兩個用萬能板焊的板子沒有任何問題,在佩服自己的同時也再次自信一下吧!
將電路裝到小車上,開始調試……
4 、程序部分
(時間倉促,未精調,只是實現功能)供大家參考:
先定義各接口
int lled = 7;
int rled = 4;
int lmotor = 19;
int rmotor = 18;
int rdate = 0;
int ldate = 0;
int ledpin = 14;
int l = 0;
int r = 0;
int a = 0;
int b = 0;
int c = 0;
int e = 0;
void setup()
{
pinMode(lled,INPUT);
pinMode(rled,INPUT);
pinMode(lmotor,OUTPUT);
pinMode(rmotor,OUTPUT);
pinMode(ledpin,OUTPUT);
}
void run()
{
for(int i = 0;i 《 a;i ++)
{
digitalWrite(lmotor,HIGH);
delayMicroseconds(ldate);
digitalWrite(lmotor,LOW);
digitalWrite(rmotor,HIGH);
delayMicroseconds(rdate);
digitalWrite(rmotor,LOW);
delay(18);
}
}
void loop()
{
l = digitalRead(lled);
r = digitalRead(rled);
if ((l == HIGH) || (r == HIGH))
digitalWrite(ledpin,HIGH);
else
digitalWrite(ledpin,LOW);
if((l == HIGH)&&(r == HIGH))
{
while((l == HIGH)&&(r == HIGH))
{
l = digitalRead(lled);
r = digitalRead(rled);
}
}
else if(l == HIGH) //左邊兒檢測到黑線,左轉
{
ldate = 1480;
rdate = 1630;
a = 10;
}
else if(r == HIGH) //右邊兒檢測到黑線,右轉
{
ldate = 1350;
rdate = 1500;
a = 10;
}
else
{
ldate = 1300;
rdate = 1730;
a = 1;
}
run();
}
上圖若干:
這個小車不算完,因為有太多的功能可供大家玩,比如我就裝上了超聲波和紅外傳感器,是不是挺萌的!
評論
查看更多