Arduino小車系列1 [胡蘿卜創(chuàng)客]

寫在前面

為什么要寫這樣一系列文章骇两,網(wǎng)上很早就有并且還很多此類文章了呀,對(duì)于電子相關(guān)專業(yè)的人分分鐘可以搞定的事呀拳喻。但哭当,我要寫一個(gè)和那些文章視角不同的系列,就是我的文章的目標(biāo)讀者是小白人士冗澈,可以是各行業(yè)對(duì)編程和電子硬件都不了解的人钦勘,可以是正在小學(xué)初中讀書的學(xué)生。讓這些人亚亲,通過價(jià)格低廉彻采、資料豐富的開源硬件和編程來做一些有意思的事情。

做個(gè)什么樣的小車

目標(biāo)是一個(gè)小車平臺(tái)捌归,后續(xù)可以基于這個(gè)平臺(tái)做巡線小車肛响、語音小車、監(jiān)控小車等等有意思的事情惜索。這樣的話特笋,我選擇了4個(gè)輪子車架,空間更大巾兆。通過arduino板子控制小車猎物,原因是arduino產(chǎn)品豐富虎囚,高中低端都有,可以使用價(jià)格很低的arduino的pro mini或nano蔫磨,便宜的10幾塊錢就可以搞到淘讥。并且arduino的資料是相當(dāng)豐富了,基于它做小車的教程也好多堤如。通信模塊選擇zigbee蒲列,比藍(lán)牙的障礙物穿透性好,隔一堵墻是沒有問題的煤惩,正好手里有這樣的板子嫉嘀,很容易上手。

Step By Step

  1. 最基礎(chǔ)的車架魄揉,我選擇了最常見的亞克力材料樹莓派小車車架購(gòu)買鏈接(42元購(gòu)入)。包括了4個(gè)直流電機(jī)拭宁,1個(gè)18650電池的3節(jié)電池盒洛退。這個(gè)小車底盤可以多層,也有安裝樹莓派的地方杰标,當(dāng)時(shí)就是沖著這些可擴(kuò)展性買的兵怯。提醒一點(diǎn):這個(gè)底盤組裝并不容易,安裝電機(jī)的卡槽不是很吻合腔剂,我使了好大力氣才完成媒区。
    小車底盤

    第二層車架,用來安裝電池盒掸犬、控制器袜漩、L298N等。
    第二層車架
  2. 使用L298N電機(jī)驅(qū)動(dòng)板購(gòu)買鏈接(7.9元入手)湾碎。它有兩個(gè)作用宙攻,一是連接控制器和電機(jī),達(dá)到控制器編程控制電機(jī)的目的介褥。二是把12V的輸入降壓為5V輸出座掘,用來給控制器Zduino供電。具體硬件連接:OUT1連接左側(cè)兩個(gè)電機(jī)的負(fù)極柔滔,OUT2連接左側(cè)兩個(gè)電機(jī)的正極溢陪。OUT3連接右側(cè)兩個(gè)電機(jī)的正極,OUT4連接右側(cè)兩個(gè)電機(jī)的負(fù)極睛廊。
    • L298N本身的供電形真,它的輸入是5V-35V,我選擇12V的電源輸入喉前。使用3節(jié)18650電池購(gòu)買鏈接(每節(jié)4.9元入手没酣,一節(jié)3.7V)串聯(lián)得到約12V輸入王财。說明:這個(gè)電池可以充電,多次使用裕便,綠色環(huán)保绒净。相關(guān)配套:18650電池充電器購(gòu)買鏈接(8.5元),18650電池盒(3節(jié)串聯(lián)偿衰,和小車底盤一并購(gòu)入)購(gòu)買鏈接挂疆。
      L298N
  3. 控制器選擇Zduino pro mini購(gòu)買鏈接(28元入,它屬于Arduino Pro Mini類型)下翎。這款控制器用來控制電機(jī)和控制通信模塊缤言,可以對(duì)它進(jìn)行編程。
    Zduino pro mini
    • Zduino本身的供電视事,它的輸入電壓是5V胆萧,這里使用L298N的5V輸出。說一個(gè)慘痛經(jīng)歷:在前一天俐东,使用12v電源給Zduino pro mini供電跌穗,可以驅(qū)動(dòng)兩個(gè)電機(jī)轉(zhuǎn)動(dòng)。今天同樣連線虏辫,通電后電機(jī)也轉(zhuǎn)動(dòng)了一下蚌吸,然后就不轉(zhuǎn)了,同時(shí)聞到焦味砌庄,一摸Zduino芯片燙手羹唠,看來是板子燒了。然后娄昆,嘗試使用USB串口寫入程序佩微,發(fā)現(xiàn)燒錄程序失敗,看來結(jié)果就是這樣了稿黄。分析原因喊衫,第二次使用時(shí),電池是充滿了電的杆怕,電壓達(dá)到了12V族购,之前電池虛電并沒有12V那么高。
    • 控制電機(jī)使用了引腳5,6,9,10, 它們依次連接L298N的IN1陵珍,IN2寝杖,IN3,IN4這4個(gè)輸入互纯,IN1和IN2控制輸出OUT1和OUT2瑟幕,IN3和IN4控制輸出OUT3和OUT4。
    • 控制ZigBee模塊(下圖1),有兩點(diǎn)只盹,一是給Zigbee模塊供電(Zduino輸出電壓5V辣往,Zigbee模塊輸入電壓3.3V,故用降壓板)殖卑,二是與Zigbee模塊通過串口進(jìn)行通信站削。具體連線是:Zduino的VCC,GND孵稽,RXI许起,TXO依次連接Zigbee模塊的降壓板(下圖2)的5V,GND菩鲜,引腳1园细,引腳2,降壓板的3V3接校,GND猛频,引腳1,引腳2依次連接Zigbee板的VCC馅笙,GND伦乔,Tx,Rx董习。說明一下,串口的連接也就是RXI和TXO爱只,需要對(duì)調(diào)連接皿淋,即RXI連接Tx,TXO連接Rx恬试。這里的名字不太一致窝趣,命名規(guī)范問題,功能是一樣的训柴。


      Zigbee

      降壓板
  4. 其他硬件還包括杜邦線哑舒,小車還是比較緊湊的,不需要太長(zhǎng)的杜邦線幻馁,否則顯得凌亂洗鸵,10cm以內(nèi)剛剛好。杜邦線分為公對(duì)公仗嗦,母對(duì)母膘滨,公對(duì)母,每種都采購(gòu)一些稀拐,非常便宜火邓。面包板,有了它,可以把Zduino的引腳擴(kuò)展出來铲咨,可以很方便與其他硬件模塊連接躲胳,電源的連接也會(huì)方便很多,最大的好處纤勒,就是讓我們的小車顯得很清爽坯苹,不至于邋遢。

小車最終形象

我又重新按照上面文章的步驟踊东,重新組裝了一遍小車北滥,一次成功。


whole2.png
whole1.png

整體原理介紹

L298N用來控制4個(gè)電機(jī)闸翅,比如再芋,向前轉(zhuǎn)、向后轉(zhuǎn)坚冀,左側(cè)輪子向前轉(zhuǎn)而右側(cè)向后轉(zhuǎn)济赎,從而實(shí)現(xiàn)向右轉(zhuǎn)彎,控制電機(jī)轉(zhuǎn)速快慢记某。但是司训,光有L298N是完不成這么多復(fù)雜動(dòng)作的,它只是執(zhí)行具體任務(wù)的小兵液南,還需要一個(gè)指揮官來指揮它才行壳猜。這個(gè)指揮官就是arduino板子,它可以支持編寫程序滑凉,通過程序來給L298N下發(fā)指令统扳,叫它完成響應(yīng)的動(dòng)作。arduino板子程序編寫完成后畅姊,這個(gè)指揮官就有了一些控制電機(jī)的技能了咒钟。但是,我們希望可以再指揮arduino這個(gè)指揮官若未,比如朱嘴,我說“啟動(dòng)”,它就讓小車開動(dòng)起來粗合;我說“停止”萍嬉,它就讓小車停下來。要想arduino這個(gè)指揮官可以隨時(shí)聽從我的指揮舌劳,就需要zigbee這個(gè)通訊員了帚湘,它可以進(jìn)行無線數(shù)據(jù)傳輸,我們就可以把我們的指令通過zigbee告訴給arduino這個(gè)指揮官了甚淡。

軟件編程

  1. 本文對(duì)應(yīng)的Arduino代碼github地址
// hardware:Zduino pro mini
//Zduino pro mini only has one serial.

// this program is used to control car
// zigbee as communication protocol throgh DL-LN33

unsigned char returnFlag[8] = {0xfe, 0x05, 0x91, 0x90, 0x14, 0x10, 0x01, 0xff};
int input1 = 5; // 定義uno的pin 5 向 input1 輸出   
int input2 = 6; // 定義uno的pin 6 向 input2 輸出  
int input3 = 9; // 定義uno的pin 9 向 input3 輸出  
int input4 = 10; // 定義uno的pin 10 向 input4 輸出  
int carState = 1;

void setup() {
  Serial.begin(115200); //RX TX serial port
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(8, OUTPUT);

  //初始化各IO,模式為OUTPUT 輸出模式  
    pinMode(input1,OUTPUT);  
    pinMode(input2,OUTPUT);  
    pinMode(input3,OUTPUT);  
    pinMode(input4,OUTPUT);  

}

String myPtHex(int g){ // 把 g 最右邊 byte 印成 Hex 倆位
  String ret = "";
   int a = g& 0xf0;  // 左邊 4 bits
   a = a >> 4;  // 右移 4 bits
   int b = g& 0x0f;  // 右邊 4 bits
   char c = a < 10 ? a + '0' : a + 'A' - 10;
//   Serial.print(c);
   ret += c;
   c = b < 10 ? b + '0' : b + 'A' - 10;
//   Serial.print(c);
   ret += c;
//   Serial.print("#" + ret + "#");
   return ret;
}

void blinkLed(int pinNumber){
  digitalWrite(pinNumber, HIGH);
  delay(1);
  digitalWrite(pinNumber, LOW);
}

void loop() {

  // have zigbee data to come
  int dataIndex = 1;
   if (Serial.available()) {
    digitalWrite(LED_BUILTIN, HIGH); 

    //send back to zigbee board.
//    Serial.write(returnFlag, 8);
    
    myPtHex((char)Serial.read());  
    dataIndex ++;
    while(Serial.available()){
      String dataFlag = myPtHex((char)Serial.read()); 
      if(dataIndex == 7){
//        Serial.print("$"+dataFlag);

//if zigbee send data 01, start car.
        if(dataFlag == "01"){
          blinkLed(8);
          carState = 1;
        }
        // if zigbee send data 00, start car.
        if(dataFlag == "00"){
          blinkLed(8);
          carState = 0;
        }
      }
      dataIndex ++;
      
    }

    digitalWrite(LED_BUILTIN, LOW);
    
   }

    
  if(carState == 0){
    stopCar();
  }
  
  if(carState == 1){
    startCar();
  }

}



void startCar(){
  //forward 向前轉(zhuǎn)  
      digitalWrite(input1,HIGH); //給高電平  
      digitalWrite(input2,LOW);  //給低電平  
      digitalWrite(input3,HIGH); //給高電平  
      digitalWrite(input4,LOW);  //給低電平
      delay(1000);  //延時(shí)0.5秒    
}

void stopCar(){
     digitalWrite(input1,LOW);  
     digitalWrite(input2,LOW);    
     digitalWrite(input3,LOW);  
     digitalWrite(input4,LOW);
     delay(1000);  //延時(shí)0.5秒      
}
  1. 以上程序如何燒錄到Zduino板子中呢大诸,需要兩個(gè)工具捅厂,一是需要一個(gè)硬件USB轉(zhuǎn)串口模塊購(gòu)買地址(25元購(gòu)入,現(xiàn)在12.5元)资柔。二是需要Arduino的開發(fā)工具Arduino IDE下載地址焙贷。
    • USB轉(zhuǎn)串口模塊和Zduino的連線方式,該模塊的GND贿堰,VCC辙芍,DTR/RTS,TX羹与,RX依次連接Zduino的GND故硅,VCC,DTR纵搁,RXI吃衅,TXO。


      USB轉(zhuǎn)串口模塊連接
    • 打開Arduino IDE腾誉,點(diǎn)擊IDE的菜單:工具(tools)-->開發(fā)板(board)徘层,選擇Arduino Pro or Pro Mini,然后點(diǎn)擊這個(gè)菜單的下一個(gè):端口(port)利职,選擇/dev/ttyUSB0趣效。


      Arduino_IDE.png
    • 把上面的代碼粘貼到編輯區(qū),點(diǎn)擊菜單:項(xiàng)目-->上傳猪贪。


      上傳成功.png

電池通電跷敬,4個(gè)強(qiáng)勁的輪子轉(zhuǎn)起來

微信公眾號(hào):huluobospace(胡蘿卜創(chuàng)客)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市热押,隨后出現(xiàn)的幾起案子干花,更是在濱河造成了極大的恐慌,老刑警劉巖楞黄,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異抡驼,居然都是意外死亡鬼廓,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門致盟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碎税,“玉大人,你說我怎么就攤上這事馏锡±柞澹” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵杯道,是天一觀的道長(zhǎng)匪煌。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么萎庭? 我笑而不...
    開封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任霜医,我火速辦了婚禮,結(jié)果婚禮上驳规,老公的妹妹穿的比我還像新娘肴敛。我一直安慰自己,他們只是感情好吗购,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開白布医男。 她就那樣靜靜地躺著,像睡著了一般捻勉。 火紅的嫁衣襯著肌膚如雪镀梭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天贯底,我揣著相機(jī)與錄音丰辣,去河邊找鬼。 笑死禽捆,一個(gè)胖子當(dāng)著我的面吹牛笙什,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播胚想,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼琐凭,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了浊服?” 一聲冷哼從身側(cè)響起统屈,我...
    開封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎牙躺,沒想到半個(gè)月后愁憔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡孽拷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年吨掌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脓恕。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡膜宋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出炼幔,到底是詐尸還是另有隱情秋茫,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布乃秀,位于F島的核電站肛著,受9級(jí)特大地震影響圆兵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜策泣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一衙傀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧萨咕,春花似錦统抬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至茫陆,卻和暖如春金麸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背簿盅。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工挥下, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人桨醋。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓棚瘟,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親喜最。 傳聞我的和親對(duì)象是個(gè)殘疾皇子偎蘸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容