Arduino小车系列1 [胡萝卜创客]

写在前面

为什么要写这样一系列文章,网上很早就有并且还很多此类文章了呀,对于电子相关专业的人分分钟可以搞定的事呀。但,我要写一个和那些文章视角不同的系列,就是我的文章的目标读者是小白人士,可以是各行业对编程和电子硬件都不了解的人,可以是正在小学初中读书的学生。让这些人,通过价格低廉、资料丰富的开源硬件和编程来做一些有意思的事情。

做个什么样的小车

目标是一个小车平台,后续可以基于这个平台做巡线小车、语音小车、监控小车等等有意思的事情。这样的话,我选择了4个轮子车架,空间更大。通过arduino板子控制小车,原因是arduino产品丰富,高中低端都有,可以使用价格很低的arduino的pro mini或nano,便宜的10几块钱就可以搞到。并且arduino的资料是相当丰富了,基于它做小车的教程也好多。通信模块选择zigbee,比蓝牙的障碍物穿透性好,隔一堵墙是没有问题的,正好手里有这样的板子,很容易上手。

Step By Step

  1. 最基础的车架,我选择了最常见的亚克力材料树莓派小车车架购买链接(42元购入)。包括了4个直流电机,1个18650电池的3节电池盒。这个小车底盘可以多层,也有安装树莓派的地方,当时就是冲着这些可扩展性买的。提醒一点:这个底盘组装并不容易,安装电机的卡槽不是很吻合,我使了好大力气才完成。
    小车底盘

    第二层车架,用来安装电池盒、控制器、L298N等。
    第二层车架
  2. 使用L298N电机驱动板购买链接(7.9元入手)。它有两个作用,一是连接控制器和电机,达到控制器编程控制电机的目的。二是把12V的输入降压为5V输出,用来给控制器Zduino供电。具体硬件连接:OUT1连接左侧两个电机的负极,OUT2连接左侧两个电机的正极。OUT3连接右侧两个电机的正极,OUT4连接右侧两个电机的负极。
    • L298N本身的供电,它的输入是5V-35V,我选择12V的电源输入。使用3节18650电池购买链接(每节4.9元入手,一节3.7V)串联得到约12V输入。说明:这个电池可以充电,多次使用,绿色环保。相关配套:18650电池充电器购买链接(8.5元),18650电池盒(3节串联,和小车底盘一并购入)购买链接
      L298N
  3. 控制器选择Zduino pro mini购买链接(28元入,它属于Arduino Pro Mini类型)。这款控制器用来控制电机和控制通信模块,可以对它进行编程。
    Zduino pro mini
    • Zduino本身的供电,它的输入电压是5V,这里使用L298N的5V输出。说一个惨痛经历:在前一天,使用12v电源给Zduino pro mini供电,可以驱动两个电机转动。今天同样连线,通电后电机也转动了一下,然后就不转了,同时闻到焦味,一摸Zduino芯片烫手,看来是板子烧了。然后,尝试使用USB串口写入程序,发现烧录程序失败,看来结果就是这样了。分析原因,第二次使用时,电池是充满了电的,电压达到了12V,之前电池虚电并没有12V那么高。
    • 控制电机使用了引脚5,6,9,10, 它们依次连接L298N的IN1,IN2,IN3,IN4这4个输入,IN1和IN2控制输出OUT1和OUT2,IN3和IN4控制输出OUT3和OUT4。
    • 控制ZigBee模块(下图1),有两点,一是给Zigbee模块供电(Zduino输出电压5V,Zigbee模块输入电压3.3V,故用降压板),二是与Zigbee模块通过串口进行通信。具体连线是:Zduino的VCC,GND,RXI,TXO依次连接Zigbee模块的降压板(下图2)的5V,GND,引脚1,引脚2,降压板的3V3,GND,引脚1,引脚2依次连接Zigbee板的VCC,GND,Tx,Rx。说明一下,串口的连接也就是RXI和TXO,需要对调连接,即RXI连接Tx,TXO连接Rx。这里的名字不太一致,命名规范问题,功能是一样的。


      Zigbee

      降压板
  4. 其他硬件还包括杜邦线,小车还是比较紧凑的,不需要太长的杜邦线,否则显得凌乱,10cm以内刚刚好。杜邦线分为公对公,母对母,公对母,每种都采购一些,非常便宜。面包板,有了它,可以把Zduino的引脚扩展出来,可以很方便与其他硬件模块连接,电源的连接也会方便很多,最大的好处,就是让我们的小车显得很清爽,不至于邋遢。

小车最终形象

我又重新按照上面文章的步骤,重新组装了一遍小车,一次成功。


whole2.png
whole1.png

整体原理介绍

L298N用来控制4个电机,比如,向前转、向后转,左侧轮子向前转而右侧向后转,从而实现向右转弯,控制电机转速快慢。但是,光有L298N是完不成这么多复杂动作的,它只是执行具体任务的小兵,还需要一个指挥官来指挥它才行。这个指挥官就是arduino板子,它可以支持编写程序,通过程序来给L298N下发指令,叫它完成响应的动作。arduino板子程序编写完成后,这个指挥官就有了一些控制电机的技能了。但是,我们希望可以再指挥arduino这个指挥官,比如,我说“启动”,它就让小车开动起来;我说“停止”,它就让小车停下来。要想arduino这个指挥官可以随时听从我的指挥,就需要zigbee这个通讯员了,它可以进行无线数据传输,我们就可以把我们的指令通过zigbee告诉给arduino这个指挥官了。

软件编程

  1. 本文对应的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 向前转  
      digitalWrite(input1,HIGH); //给高电平  
      digitalWrite(input2,LOW);  //给低电平  
      digitalWrite(input3,HIGH); //给高电平  
      digitalWrite(input4,LOW);  //给低电平
      delay(1000);  //延时0.5秒    
}

void stopCar(){
     digitalWrite(input1,LOW);  
     digitalWrite(input2,LOW);    
     digitalWrite(input3,LOW);  
     digitalWrite(input4,LOW);
     delay(1000);  //延时0.5秒      
}
  1. 以上程序如何烧录到Zduino板子中呢,需要两个工具,一是需要一个硬件USB转串口模块购买地址(25元购入,现在12.5元)。二是需要Arduino的开发工具Arduino IDE下载地址
    • USB转串口模块和Zduino的连线方式,该模块的GND,VCC,DTR/RTS,TX,RX依次连接Zduino的GND,VCC,DTR,RXI,TXO。


      USB转串口模块连接
    • 打开Arduino IDE,点击IDE的菜单:工具(tools)-->开发板(board),选择Arduino Pro or Pro Mini,然后点击这个菜单的下一个:端口(port),选择/dev/ttyUSB0。


      Arduino_IDE.png
    • 把上面的代码粘贴到编辑区,点击菜单:项目-->上传。


      上传成功.png

电池通电,4个强劲的轮子转起来

微信公众号:huluobospace(胡萝卜创客)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容