8586| 4
|
[项目] Arduino小车系列1 [胡萝卜创客] |
写在前面做个什么样的小车 目标是一个小车平台,后续可以基于这个平台做巡线小车、语音小车、监控小车等等有意思的事情。这样的话,我选择了4个轮子车架,空间更大。通过Arduino板子控制小车,原因是arduino产品丰富,高中低端都有,可以使用价格很低的arduino的pro mini或nano,便宜的10几块钱就可以搞到。并且arduino的资料是相当丰富了,基于它做小车的教程也好多。通信模块选择zigbee,比蓝牙的障碍物穿透性好,隔一堵墙是没有问题的,正好手里有这样的板子,很容易上手。 Step By Step
我又重新按照上面文章的步骤,重新组装了一遍小车,一次成功。 整体原理介绍L298N用来控制4个电机,比如,向前转、向后转,左侧轮子向前转而右侧向后转,从而实现向右转弯,控制电机转速快慢。但是,光有L298N是完不成这么多复杂动作的,它只是执行具体任务的小兵,还需要一个指挥官来指挥它才行。这个指挥官就是arduino板子,它可以支持编写程序,通过程序来给L298N下发指令,叫它完成响应的动作。arduino板子程序编写完成后,这个指挥官就有了一些控制电机的技能了。但是,我们希望可以再指挥arduino这个指挥官,比如,我说“启动”,它就让小车开动起来;我说“停止”,它就让小车停下来。要想arduino这个指挥官可以随时听从我的指挥,就需要zigbee这个通讯员了,它可以进行无线数据传输,我们就可以把我们的指令通过zigbee告诉给arduino这个指挥官了。 软件编程
//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秒 }
电池通电,4个强劲的轮子转起来 微信公众号:huluobospace(胡萝卜创客) |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed