想成為一個(gè)機(jī)器人達(dá)人,入門之物都少不了一輛智能小車。而面對(duì)動(dòng)輒一套上千的商品級(jí)智能車,用Arduino開發(fā)板DIY一輛小車無疑是更加實(shí)用和經(jīng)濟(jì)的選擇。愛DIY,愛機(jī)器人,就一起來動(dòng)手證明你自己吧。

| DIYer: | ifeller |
|---|---|
| 制作時(shí)間: | 2天 |
| 制作難度: | ★★★★☆ |
| GEEK指數(shù): | ★★★★☆ |
想必每位有志于在機(jī)器人領(lǐng)域發(fā)展,為人類未來創(chuàng)造更加美好生活的有志之士(廢話也是必不可少的)入門必不可少接觸的一個(gè)練手之物便是智能小車,但是,一套現(xiàn)成的智能小車全套下來要上千大洋,所以我覺得我自己可以動(dòng)手DIY一臺(tái)這樣神車出來,一來滿足一下我練手的需要,二來將本人用萬能板制作Arduino擴(kuò)展板的經(jīng)驗(yàn)介紹給大家。愛DIY,愛機(jī)器人,就一起來動(dòng)手證明一下你自己吧。不當(dāng)之處望大家指正。
雙向電梯
1???材料和工具
2???結(jié)構(gòu)制作部分
3???電路制作部分
4???程序部分
1???材料和工具

工具如圖
材料:
360度連續(xù)旋轉(zhuǎn)舵機(jī)兩個(gè)
鋁合金型材若干
萬向輪*1
arduino核心板*1
LM339N電壓比較器*1
103電位器*4
IN4007二極管*1
發(fā)光二極管*5
L7805CV*3
47uf電解電容6
107鉭電容*1
1K電阻*5
10K電阻*4
微動(dòng)開關(guān)*2
11.1V鋰電池*1(航模用,不用擔(dān)心功率不足)
各種杜邦線、插頭若干(用起來方便到爆)

部分零件圖
2???結(jié)構(gòu)制作部分

加工好的全部的鋁合金組件(全部手工)

機(jī)械結(jié)構(gòu)組裝好后就基本成型了,黑色的是絕緣電工膠帶,便于安放各種電路板。
這個(gè)輪子是在街上買的萬向輪然后把輪子單獨(dú)拆了下來,輪子厚20mm,直徑50mm。
輪子通過舵機(jī)的擺臂固定上,這樣很方便的連接舵機(jī)。
萬向輪裝上去,萬向輪高35mm,后面?zhèn)z輪子裝到舵機(jī)上底板正好離地35mm,萬向輪裝上去正好合適,很幸運(yùn)。
順便說下,上圖中前面那個(gè)桿是用來安裝光電傳感器的,由于沒法直接打上孔往上裝,必須解決跟萬向輪凸起的那個(gè)沖突,我就畫上一個(gè)弧線然后用銼磨了出來,磨出來還很滿意。
這個(gè)構(gòu)件是裝中間兩個(gè)光電傳感器的(這兩個(gè)光電傳感器視功能可選)
3???電路制作部分
這我從網(wǎng)上買的光電傳感器及其基于LM339N的電壓比較器。
但是用買來的光電傳感器各種測(cè)試不理想,而且還得用導(dǎo)線跟Arduino連接,所以我就有了自己DIY的念頭。我專門花一周時(shí)間學(xué)習(xí)了Altium designer 9,所以參考別人的光電傳感器電壓比較強(qiáng)模塊我畫了原理圖也大致用PCB規(guī)劃了一下走線,然后用萬能板焊接,這個(gè)過程之后還是相當(dāng)有成就感的。

光電傳感器模塊
Header2方便接跳線帽,可以選擇是加電就返回信號(hào),還是對(duì)發(fā)光二極管控制才返回信號(hào),我用的加電就返回信號(hào)。


模塊的走線規(guī)劃。

光電傳感器由發(fā)射二極管和接收管組成,A、K是紅外發(fā)射二極管的正負(fù)極,C、E是接收管的正負(fù)極。
只要A極接高電平、K極接低電平,紅外發(fā)射管就能發(fā)出紅外線??梢栽趥鞲衅骷由贤鈬娐穪頇z測(cè)接收管的信號(hào),進(jìn)而確定是否接受到反射回來的紅外線,如上圖圖右下方的器件工作示意圖。

所謂電壓比較的原理就是給任一輸入端一個(gè)參考電壓(通過轉(zhuǎn)動(dòng)電位器來改變參考電壓的值),我的原理圖中給IN-輸入?yún)⒖茧妷?,?dāng)IN+的電壓高于IN-時(shí),OUT為低電平,反之亦然,IN+僅需與IN-相差mV就能在OUT端得到比較結(jié)果。

在做Arduino擴(kuò)展板的時(shí)候一定要對(duì)各端口的使用有個(gè)大致的規(guī)劃,其實(shí)我覺得Arduino核心板的設(shè)計(jì)是不太理想的。
大家都知道,萬能板相鄰兩孔的間距是標(biāo)準(zhǔn)的100mil也就是2.54mm,圖中b= 5.08mm,圖中2.54<a<5.08,這就很尷尬,導(dǎo)致我之前焊的萬能板如果要同時(shí)用0-7和8-13口的時(shí)候,板子需要很費(fèi)勁的插上去,并且插上去萬能板就彎曲了。
所以我為了避免那樣的情況再次發(fā)生,我板子里的端口只用了0-7和A0-A5(A口也可以做數(shù)字輸入輸出,端口為14-19),還有VIN-RESET。

電壓比較器原理圖
注:擴(kuò)展板上加一個(gè)復(fù)位開關(guān)是非常方便調(diào)試的。


用萬能板焊好的電路,這個(gè)電路焊完非常有成就感,對(duì)于萬能板來說應(yīng)該密度還挺高的。
考慮到給舵機(jī)供電的原因,我決定給每個(gè)舵機(jī)獨(dú)立用7805供電,還好L7805CV的電流最大有1A,完全能滿足舵機(jī)的需求,這個(gè)板我稱作基礎(chǔ)動(dòng)力電源擴(kuò)展板,預(yù)留了超聲波接口和一個(gè)多余的舵機(jī)口,所以這個(gè)板用來實(shí)現(xiàn)超聲波壁障也是沒問題的。



都焊過前面那個(gè)板子了,焊這個(gè)板子當(dāng)然是小菜一碟了。

插上調(diào)試,我的兩個(gè)用萬能板焊的板子沒有任何問題,在佩服自己的同時(shí)也再次自信一下吧!

將電路裝到小車上,開始調(diào)試……
4???程序部分
(時(shí)間倉促,未精調(diào),只是實(shí)現(xiàn)功能)供大家參考:
先定義各接口
?
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) //左邊兒檢測(cè)到黑線,左轉(zhuǎn) { ldate = 1480; rdate = 1630; a = 10; } else if(r == HIGH) //右邊兒檢測(cè)到黑線,右轉(zhuǎn) { ldate = 1350; rdate = 1500; a = 10; } else { ldate = 1300; rdate = 1730; a = 1; } run(); }
?
上圖若干:



這個(gè)小車不算完,因?yàn)橛刑嗟墓δ芸晒┐蠹彝?,比如我就裝上了超聲波和紅外傳感器,是不是挺萌的!
與其叫這個(gè)東西小車,不如說它是每個(gè)機(jī)器人愛好者入門的神車吧!
?
電子發(fā)燒友App

















評(píng)論