水上浮岛
本帖最后由 安卓机器人 于 2016-5-17 06:57 编辑【新路历程】{:5_159:}夺取保卫美丽的钓鱼岛,人人有责;
{:5_168:}演练抢滩登陆台湾岛这是我军正在进行的必修课。
以上都得有运输工具才行吧?于是,陪着儿子搜索家里现有的破烂玩意儿,就自造了这个永不沉没的可控“浮岛”,模拟侦察,运输,抢滩,有一定的可玩性。
【实现功能】及【展示】
{:5_196:}三部分:1.【带蓝牙】安卓手机,
2.【蓝牙转Zigbee串口+ArduinoUNO】中转遥控器,
3.【带Zigbee串口+双L298N+ArduinoNANO】浮岛体
【工作原理】安卓手机用蓝牙发出命令, 遥控器上的蓝牙模块接收并被UNO处理后转由UNO上软串口上的Zigbee模块再次发出命令,远处水面上“浮岛”体上另一Zigbee模块接收并被NANO处理控制2个L298N电机模块,从而控制3个电机的方向与速度,以此来实现200米范围内的“浮岛”体的左右转,前进,加速前进,后退等。
【疑问先答】你可能会问:为什么不直接用手机蓝牙控制水面上的“浮岛”体,省去遥控器呢?答:目前蓝牙距离传输最多60米,万一“浮岛”体冲到湖中心,失联了,回不了家!所以中转由我目前用的200多米的Zigbee模块。
http://v.youku.com/v_show/id_XMTU3Mjc5MDE5Mg==.html
水面控制测试
http://v.youku.com/v_show/id_XMTU3MjgzODMyNA==.html
三部分岸边测试(最后自动停机是因没电了)
【制作过程】
Step 1 首先试验小电机在水中是否能较稳定地工作,把玩具电扇接通电源浸入水中至少一个小时,之后观察工作正常,奠定我继续下一步的信心。【安全提示:仅小电机可试】
http://v.youku.com/v_show/id_XMTU3Mjg3Nzk1Ng==.html
Step 2 找来一块增强密度的泡沫板作为浮体(不用考虑浮力和漏水)
前进方向稍作修整,利于减少阻力。
Step 3 固定三电机
我儿子开始制作的双电机支架(后来想来个加速,添加第三个电机,这个就否定了)
加速电机(点击“加速前进”三个电机并行运行)
双电机
“加速“模式---三电机启动运行
Step 4 “浮岛”体成型【自始至终要考虑重心落在中心】
面包板+ArduinoNANO
一个L298N能同时控制2个电机的方向与速度
电源7.4V置于中央并用电工胶带粘牢
三电机两L298N模块均用扎带固定
开始发现桨露出水面一点点会有较多水花飞溅,可能使控制板失灵,故而增加垫层
电机完全浸没水中,水面平衡测试,吃水测试
Step 5 遥控器组装
1个蓝牙模块+1个Zigbee模块分别安装在硬软串口上(UNO只有一个硬串口)
Step 6 利用MIT的AI制作APK(或者干脆网搜个呗)
http://v.youku.com/v_show/id_XMTU3Mjk3MjkxNg==.html
室内测试一下
放在室外湖面上准备ing
“集结”完毕
【代码1:可控“浮岛”体】
// 20160507
// + 在双电机基础上增加第3个电机(速度更快),因此也须配另一个L298N
// Zigbee->arduino nano->L298N->双电机遥控船,备注:
// 此L298N,当方向为HIGH时,则速度值为0->255相当于速度从最大->最小(零)!!!
// 此L298N,当方向为LOW时,则速度值为0->255相当于速度从最小->最大!!!
// 手机遥控界面:
// AA
//LLSS 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); //检验从手机遥控端发来的信号是否是所需要信号
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界面设计
块语言代码截图(第一部分)
块语言代码截图(第二部分)
【可以不回顾】
http://v.youku.com/v_show/id_XMTU3MzAwNDc3Mg==.html
好简陋的“岛”啊 本帖最后由 安卓机器人 于 2016-5-17 09:03 编辑
dsweiliang 发表于 2016-5-17 08:16
好简陋的“岛”啊
是啊,大家可以想像加入更多传感器或设备呀。{:5_166:}
我最近在履带车机器人上安装了二自由度摄像机也可以移植到这小“岛”上哟
http://v.youku.com/v_show/id_XMTU3MzMwODA0NA==.html二自由度小蚁摄像云台
履带车手机端控制小车和摄像机
更多芬享准备ing...
{:5_196:}越障,爬坡,防撞,远程侦察摄像,展开你的想像力!
{:5_132:}X-MEN ROBOT 17自由度,可以加TTS语音模块...
颜值有点低:( 材料好像是螃蟹王国买的吧? svw 发表于 2016-5-17 19:45
材料好像是螃蟹王国买的吧?
蓝色的是的哟 zigbee的品牌是什么?能传输多远的距离? gada888 发表于 2016-5-19 07:29
zigbee的品牌是什么?能传输多远的距离?
中联创新,我的地面上1.5米距离150稳定,空中应该200-250米吧 安卓机器人 发表于 2016-5-19 10:53
中联创新,我的地面上1.5米距离150稳定,空中应该200-250米吧
谢谢,是叫深联创新。 liangyuteng 发表于 2016-6-2 12:00
楼主可以试试接受命令部分用switch cast
可以试着加上国旗~~
:victory::loveliness:您的建议很贴合主题哟,谢谢!我想试试。先前我用SWITCH CASE 似乎只能CASE 单个字符,我这里用了字符串,好像不得不用IF~ELSE 原来130电机还能水下使用
页:
[1]