水上浮岛
2016-05-162.7万
精华项目
AI 快速预览详细
本文介绍了如何自制一个可控的水上浮岛,通过Arduino、蓝牙和Zigbee模块实现远程控制。项目分为三部分:带蓝牙的安卓手机、蓝牙转Zigbee串口+Arduino UNO遥控器、带Zigbee串口+双L298N+Arduino NANO浮岛体。通过手机APP发送命令,遥控器接收并处理后,再由Zigbee模块发出指令,控制浮岛体上的电机,实现200米范围内的左右转、前进、加速前进和后退等功能。该项目适合家长与孩子一起动手实践,培养孩子的动手能力和创新思维。
|
【新路历程】 夺取保卫美丽的钓鱼岛,人人有责;![]() 演练抢滩登陆台湾岛这是我军正在进行的必修课。![]() 以上都得有运输工具才行吧?于是,陪着儿子搜索家里现有的破烂玩意儿,就自造了这个永不沉没的可控“浮岛”,模拟侦察,运输,抢滩,有一定的可玩性。 【实现功能】及【展示】 三部分:1.【带蓝牙】安卓手机,2.【蓝牙转Zigbee串口+ArduinoUNO】中转遥控器, 3.【带Zigbee串口+双L298N+ArduinoNANO】浮岛体 【工作原理】安卓手机用蓝牙发出命令, 遥控器上的蓝牙模块接收并被UNO处理后转由UNO上软串口上的Zigbee模块再次发出命令,远处水面上“浮岛”体上另一Zigbee模块接收并被NANO处理控制2个L298N电机模块,从而控制3个电机的方向与速度,以此来实现200米范围内的“浮岛”体的左右转,前进,加速前进,后退等。 【疑问先答】你可能会问:为什么不直接用手机蓝牙控制水面上的“浮岛”体,省去遥控器呢?答:目前蓝牙距离传输最多60米,万一“浮岛”体冲到湖中心,失联了,回不了家!所以中转由我目前用的200多米的Zigbee模块。 水面控制测试 三部分岸边测试(最后自动停机是因没电了) 【制作过程】 Step 1 首先试验小电机在水中是否能较稳定地工作,把玩具电扇接通电源浸入水中至少一个小时,之后观察工作正常,奠定我继续下一步的信心。【安全提示:仅小电机可试】 Step 2 找来一块增强密度的泡沫板作为浮体(不用考虑浮力和漏水) ![]() 前进方向稍作修整,利于减少阻力。 ![]() Step 3 固定三电机 ![]() 我儿子开始制作的双电机支架(后来想来个加速,添加第三个电机,这个就否定了) ![]() ![]() ![]() 加速电机(点击“加速前进”三个电机并行运行) ![]() 双电机 ![]() “加速“模式---三电机启动运行 Step 4 “浮岛”体成型【自始至终要考虑重心落在中心】 ![]() 面包板+ArduinoNANO ![]() ![]() 一个L298N能同时控制2个电机的方向与速度 ![]() 电源7.4V置于中央并用电工胶带粘牢 ![]() ![]() 三电机两L298N模块均用扎带固定 ![]() 开始发现桨露出水面一点点会有较多水花飞溅,可能使控制板失灵,故而增加垫层 ![]() 电机完全浸没水中,水面平衡测试,吃水测试 Step 5 遥控器组装 ![]() 1个蓝牙模块+1个Zigbee模块分别安装在硬软串口上(UNO只有一个硬串口) Step 6 利用MIT的AI制作APK(或者干脆网搜个呗) ![]() APKBOAT3M.zip室内测试一下 ![]() 放在室外湖面上准备ing ![]() “集结”完毕 【代码1:可控“浮岛”体】 // 20160507 // + 在双电机基础上增加第3个电机(速度更快),因此也须配另一个L298N // Zigbee->arduino nano->L298N->双电机遥控船,备注: // 此L298N,当方向为HIGH时,则速度值为0->255相当于速度从最大->最小(零)!!! // 此L298N,当方向为LOW时,则速度值为0->255相当于速度从最小->最大!!! // 手机遥控界面: // AA // LL SS RR // BB // HC-06我的蓝牙模块(先与手机配对)、Zigbee手机端程序功能: // 手机发送字符串“SS”,Zigbee接收到后机器人调用停止函数“boatStop();” // 手机发送字符串“AA”,Zigbee接收到后机器人调用前进函数“boatAdvance(0,0);” // 手机发送字符串“BB”,Zigbee接收到后机器人调用后退函数“boatBack(255,255);” // 手机发送字符串“LL”,Zigbee接收到后机器人调用左转函数“boatTurnLeft(255,0);” // 手机发送字符串“RR”,Zigbee接收到后机器人调用右转函数“boatTurnRight(0,255);” // 接线方式ARDUINO为4576-->L298N的IN1234为5476 // Zigbee的TX接NANO的RX const int speedPin_M3 = 3; // 第2个L298N连接第3个电机 const int directionPin_M3 = 2; const int speedPin_M1 = 5; // M1 Speed Control const int speedPin_M2 = 6; // M2 Speed Control const int directionPin_M1 = 4; // M1 Direction Control const int directionPin_M2 = 7; // M2 Direction Control const int ledPin = 13; String APKStr ="**"; // 利用字符串对象暂存来自手机的命令以准备ARDUINO处理 void setup() { Serial.begin(115200); pinMode(ledPin,OUTPUT); } ///////////////////////// void loop() { // digitalWrite(ledPin,HIGH); // 内置LED13一直保持亮 while(Serial.available()) { APKStr = Serial.readString(); // 读串口的字符串 // Serial.println(APKStr); // 检验从手机遥控端发来的信号是否是所需要信号[OK] if(APKStr == "SS") // 此处若用SWITCH(APKStr)则无法通过编译,报非integer { boatStop(); for(int i=0;i<9;i++) // 停止时闪烁9次共约3.6S { digitalWrite(ledPin,HIGH); delay(200); digitalWrite(ledPin,LOW); delay(200); } }else if(APKStr == "AA") // if(APKStr == "AA"||APKStr == "")由于手机没有发送空串命令,此处后半无效 { boatAdvance(0,0); }else if (APKStr == "BB") { boatBack(255,255); }else if (APKStr == "LL") { boatTurnLeft(255,0); }else if (APKStr == "RR") { boatTurnRight(0,255); }else if (APKStr == "ADDSPEED") // 当长按手机按钮执行“加速前进”命令时,3个电机全力启动向前进 { boatAdvance(0,0); // 1,2电机全力向前 boatAddSpeed(); // 3电机全力向前 } // END IF } // END WHILE } // END LOOP ////////////////////////////////////////////// ////////////////////////////////////////////// void blinkLED13() // 用于测试串口收发是否正确 { // 如果接收到相应的字符串,则LED13快闪3次,打印出接收字符串 for(int i=0;i<3;i++) { digitalWrite(ledPin,HIGH); delay(200); digitalWrite(ledPin,LOW); delay(200); } Serial.println(APKStr); } //////////////////////////////////////////// void boatStop(){ // 3 Motor Stop digitalWrite(directionPin_M1,LOW); // + 当停止命令执行时,3个电机同时停机 analogWrite(speedPin_M3,0); // + digitalWrite(directionPin_M2,LOW); digitalWrite(directionPin_M3,LOW); analogWrite(speedPin_M1,0); // 此L298N 当以上为LOW时,则此处必须为0才能停止! analogWrite(speedPin_M2,0); } ////////////////////////////////////////////// void boatAdvance(int leftSpeed,int rightSpeed){ //Move forward digitalWrite(directionPin_M1,HIGH); digitalWrite(directionPin_M2,HIGH); digitalWrite(directionPin_M3,LOW); // + 当执行前进命令时,第3个电机停机 analogWrite(speedPin_M3,0); // + analogWrite(speedPin_M1,leftSpeed); // 此L298N,当以上为HIGH时,则此处为0->255相当于 analogWrite(speedPin_M2,rightSpeed); // 速度从最大->最小(零)!!! } ////////////////////////////////////////////// void boatBack(int leftSpeed,int rightSpeed){ //Move backward digitalWrite(directionPin_M1,LOW); digitalWrite(directionPin_M2,LOW); digitalWrite(directionPin_M3,LOW); // + 当执行后退命令时,第3个电机停机 analogWrite(speedPin_M3,0); // + analogWrite(speedPin_M1,leftSpeed); // 此L298N,当以上为LOW时,则此处为0->255相当于 analogWrite(speedPin_M2,rightSpeed); // 速度从最小->最大 } ////////////////////////////////////////////// void boatTurnRight(int leftSpeed,int rightSpeed){ //Turn Right digitalWrite(directionPin_M1,HIGH); digitalWrite(directionPin_M2,LOW); digitalWrite(directionPin_M3,LOW); // + 当执行此命令时,第3个电机停机 analogWrite(speedPin_M3,0); // + analogWrite(speedPin_M1,leftSpeed); // 注意数值大小 analogWrite(speedPin_M2,rightSpeed); } ////////////////////////////////////////////// void boatTurnLeft(int leftSpeed,int rightSpeed){ //Turn Left digitalWrite(directionPin_M1,LOW); digitalWrite(directionPin_M2,HIGH); digitalWrite(directionPin_M3,LOW); // + 当执行此命令时,第3个电机停机 analogWrite(speedPin_M3,0); // + analogWrite(speedPin_M1,leftSpeed); analogWrite(speedPin_M2,rightSpeed); // 注意数值大小 } ////////////////////////////////////////////// + void boatAddSpeed(){ digitalWrite(directionPin_M3,HIGH); // + 当长按手机按钮执行“加速前进”命令时,第3个电机全力启动仅向前进 analogWrite(speedPin_M3,0); // + } ////////////////////////////////////////////// + 【代码2:中转遥控器】 // 20160410 #include <SoftwareSerial.h> SoftwareSerial mySerial(10, 11); // RX, TX :蓝牙模块TX->RX(UNO_D10)所连软串口 ///////////////////////////////////////// void setup() { Serial.begin(115200); // UNO硬串口连 Zigbee 模块 mySerial.begin(9600); // 应与蓝牙模块设置值一致 } ///////////////////////////////////////// void loop() { if (mySerial.available()) { Serial.print(mySerial.readString()); } } ///////////////////////////////////////// 【代码3:手机APK(仅供参考)】 ![]() 手机APK界面设计 ![]() 块语言代码截图(第一部分) ![]() 块语言代码截图(第二部分) 【可以不回顾】 |
-
Screenshot_2016-05-08-15-25-04_com.miui.gallery.png (574.62 KB, 下载次数: 4378)

夺取保卫美丽的钓鱼岛,人人有责;



























越障,爬坡,防撞,远程侦察摄像,展开你的想像力!
X-MEN ROBOT 17自由度,可以加TTS语音模块...
是啊,大家可以想像加入更多传感器或设备呀。
我最近在履带车机器人上安装了二自由度摄像机也可以移植到这小“岛”上哟
[media=x,500,375]http://v.youku.com/v_show/id_XMTU3MzMwODA0NA==.html[/media]二自由度小蚁摄像云台
履带车手机端控制小车和摄像机