相信每個(gè)男生心里都有一個(gè)機(jī)器人的夢(mèng)想,但自個(gè)花錢(qián)去買(mǎi)個(gè)機(jī)器人總是太奢侈,作為一個(gè)工程師,我們可以學(xué)以致用,利用自己的專(zhuān)門(mén)技術(shù)去DIY一個(gè)機(jī)器人可就不亦樂(lè)乎,以下就給大家介紹一下怎樣去制造一個(gè)簡(jiǎn)單的Arduino小車(chē)。以下就是這小車(chē)的整體圖

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

工具就不多介紹,見(jiàn)下圖

2 、結(jié)構(gòu)制作部分
鋁合金材料

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

機(jī)械結(jié)構(gòu)組裝好后就基本成型了,黑色的是絕緣電工膠帶,便于安放各種電路板。
這個(gè)輪子是在街上買(mǎi)的萬(wàn)向輪然后把輪子單獨(dú)拆了下來(lái),輪子厚20mm,直徑50mm。

輪子通過(guò)舵機(jī)的擺臂固定上,這樣很方便的連接舵機(jī)。
萬(wàn)向輪裝上去,萬(wàn)向輪高35mm,后面?zhèn)z輪子裝到舵機(jī)上底板正好離地35mm,萬(wàn)向輪裝上去正好合適,很幸運(yùn)。



順便說(shuō)下,上圖中前面那個(gè)桿是用來(lái)安裝光電傳感器的,由于沒(méi)法直接打上孔往上裝,必須解決跟萬(wàn)向輪凸起的那個(gè)沖突,我就畫(huà)上一個(gè)弧線(xiàn)然后用銼磨了出來(lái),磨出來(lái)還很滿(mǎn)意。

下圖中的構(gòu)件是裝中間兩個(gè)光電傳感器的(這兩個(gè)光電傳感器視功能可選)

3 、電路制作部分:
下圖是我從網(wǎng)上買(mǎi)的光電傳感器及其基于LM339N的電壓比較器比較器

但是用買(mǎi)來(lái)的光電傳感器各種測(cè)試不理想,而且還得用導(dǎo)線(xiàn)跟Arduino連接,所以我就有了自己DIY的年頭,我專(zhuān)門(mén)花一周時(shí)間學(xué)習(xí)了Altium designer 9,所以參考別人的光電傳感器電壓比較強(qiáng)模塊我畫(huà)了原理圖也大致用PCB規(guī)劃了一下走線(xiàn),然后用萬(wàn)能板焊接,這個(gè)過(guò)程之后還是相當(dāng)有成就感的。

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



光電傳感器由發(fā)射二極管和接收管組成,A、K是紅外發(fā)射二極管的正負(fù)極,C、E是接收管的正負(fù)極。如圖:

? ? ? ? ??只要A極接高電平、K極接低電平,紅外發(fā)射管就能發(fā)出紅外線(xiàn)??梢栽趥鞲衅骷由贤鈬娐穪?lái)檢測(cè)接收管的信號(hào),進(jìn)而確定是否接受到反射回來(lái)的紅外線(xiàn),如上圖圖右下方的器件工作示意圖。

所謂電壓比較的原理就是給任一輸入端一個(gè)參考電壓(通過(guò)轉(zhuǎn)動(dòng)電位器來(lái)改變參考電壓的值),我的原理圖中給IN-輸入?yún)⒖茧妷海?dāng)IN+的電壓高于IN-時(shí),OUT為低電平,反之亦然,IN+僅需與IN-相差mV就能在OUT端得到比較結(jié)果。
在做Arduino擴(kuò)展板的時(shí)候一定要對(duì)各端口的使用有個(gè)大致的規(guī)劃,其實(shí)我覺(jué)得Arduino核心板的設(shè)計(jì)是不太理想的,見(jiàn)下圖:

大家都知道,萬(wàn)能板相鄰兩孔的間距是標(biāo)準(zhǔn)的100mil也就是2.54mm,圖中b= 5.08mm,圖中2.54《a《5.08,這就很尷尬,導(dǎo)致我之前焊的萬(wàn)能板如果要同時(shí)用0-7和8-13口的時(shí)候,板子需要很費(fèi)勁的插上去,并且插上去萬(wàn)能板就彎曲了,如下圖:

所以我為了避免那樣的情況再次發(fā)生,我板子里的端口只用了0-7和A0-A5(A口也可以做數(shù)字輸入輸出,端口為14-19),還有VIN-RESET。

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

下圖是用萬(wàn)能板焊好的電路,這個(gè)電路焊完非常有成就感,對(duì)于萬(wàn)能板來(lái)說(shuō)應(yīng)該密度還挺高的。 怎么樣,本人的焊接技術(shù)還行吧!


考慮到給舵機(jī)供電的原因,我決定給每個(gè)舵機(jī)獨(dú)立用7805供電,還好L7805CV的電流最大有1A,完全能滿(mǎn)足舵機(jī)的需求,這個(gè)板我稱(chēng)作基礎(chǔ)動(dòng)力電源擴(kuò)展板,預(yù)留了超聲波接口和一個(gè)多余的舵機(jī)口,所以這個(gè)板用來(lái)實(shí)現(xiàn)超聲波壁障也是沒(méi)問(wèn)題的。


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




插上調(diào)試,我的兩個(gè)用萬(wàn)能板焊的板子沒(méi)有任何問(wèn)題,在佩服自己的同時(shí)也再次自信一下吧!
將電路裝到小車(chē)上,開(kāi)始調(diào)試……

4 、程序部分
(時(shí)間倉(cāng)促,未精調(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è)到黑線(xiàn),左轉(zhuǎn)
{
ldate = 1480;
rdate = 1630;
a = 10;
}
else if(r == HIGH) //右邊兒檢測(cè)到黑線(xiàn),右轉(zhuǎn)
{
ldate = 1350;
rdate = 1500;
a = 10;
}
else
{
ldate = 1300;
rdate = 1730;
a = 1;
}
run();
}
上圖若干:


這個(gè)小車(chē)不算完,因?yàn)橛刑嗟墓δ芸晒┐蠹彝?,比如我就裝上了超聲波和紅外傳感器,是不是挺萌的!

電子發(fā)燒友App









評(píng)論