这个故事还得从在校园湖边散步说起……水面上遥控船吸引了我……
视频演示:【划水的瓶子-哔哩哔哩】

材料清单:

合宙air101小板:9.9元

航模有刷电机:5元左右

L298N电机驱动板:6元左右

蓝牙模块:jdy33,7元左右

航模3s电池或者5-12V充电宝

工具:

热熔胶枪,烙铁,焊锡,杜邦线,剪刀……

功能:

能实现手机控制小船前进后退及行驶速度;超过信号距离,蓝牙断开后,小船停止运动。

硬件连接


原理:

代码:原理看注释

--定义限幅函数
function LimitThrust(T)if T>100 thenT=100elseif T<0 thenT=0endreturn T
endfunction shache()--刹车--刹车
--控制电机L转动方向,逆时针
gpio.set(19,0)--PB3-->IN2
gpio.set(21,0)--pB5-->IN1
--上电后,先关闭PWM,
-- pwm.close(1)--关闭PWM0
--控制电机R转动方向,顺时针
gpio.set(1,0)--PA1-->IN3
gpio.set(4,0)--pA4-->IN4
--上电后,先关闭PWM,
-- pwm.close(0)--关闭PWM0
print("刹车,关闭PWM")
endfunction qianjin(X,Y)--前进local T_start=40   --启动油门,慢慢调,T_startlocal TL=T_start-(50-X)+(Y-50)--左边电机,TL不超过100,得限幅local TR=T_start+(50-X)+(Y-50)--右边电机,TR不超过100,得限幅--控制电机L转动方向,逆时针,产生拉力gpio.set(19,1)--PB3-->IN2gpio.set(21,0)--pB5-->IN1--控制电机R转动方向,顺时针,产生拉力gpio.set(1,0)--PA1-->IN3gpio.set(4,1)--pA4-->IN4--限制在0-100内local speed_L=LimitThrust(TL)-- (0~100)local speed_R=LimitThrust(TR)-- (0~100)print("speed_L",speed_L)print("speed_R",speed_R)if speed_L==0 or speed_R==0 thenpwm.close(0)--关闭PWM0pwm.close(1)--关闭PWM1print("PWM Close")else--Suart.write(id,"PWM open "..tostring(speed_x))--此函数只能发送字符串,不能发送数字,发送给手机pwm.open(1,50,speed_L,0,100)--占空比为0时,会出问题,所以用if else区分开,左边电机接PWM1pwm.open(0,50,speed_R,0,100)--占空比为0时,会出问题,所以用if else区分开,左边电机接PWM0end
endfunction houtui(X,Y)--后退local T_start=40   --启动油门,慢慢调,T_startlocal TL=T_start-(50-X)+(50-Y)--左边电机,TL不超过100,得限幅local TR=T_start+(50-X)+(50-Y)--右边电机,TR不超过100,得限幅--控制电机L转动方向,顺时针,产生推力gpio.set(19,0)--PB3-->IN2gpio.set(21,1)--pB5-->IN1--控制电机R转动方向,顺时针,产生推力gpio.set(1,1)--PA1-->IN3gpio.set(4,0)--pA4-->IN4--限制在0-100内local speed_L=LimitThrust(TL)-- (0~100)local speed_R=LimitThrust(TR)-- (0~100)print("speed_L",speed_L)print("speed_R",speed_R)if speed_L==0 or speed_R==0 thenpwm.close(0)--关闭PWM0pwm.close(1)--关闭PWM1print("PWM Close")else--Suart.write(id,"PWM open "..tostring(speed_x))--此函数只能发送字符串,不能发送数字,发送给手机pwm.open(1,50,speed_L,0,100)--占空比为0时,会出问题,所以用if else区分开,左边电机接PWM1pwm.open(0,50,speed_R,0,100)--占空比为0时,会出问题,所以用if else区分开,右边电机接PWM0end
endRxData={[1]=0,[2]=0,[3]=0,[4]=0,[5]=0,}function jiexi(rec_data)--解析数据帧--由于蓝牙端口或者连接会自动发送数据给串口,这种简单的通信方式会造成错误命令,但也可以利用这个做个保护机制--连接成功自动给串口发送:+CONNECTED              对应的RxData[1]=C ,ASSIC码为67。RxData[2]=O , ASSIC码为79。--蓝牙断开自动给串口发送:+DISCONNECT             对应的RxData[1]=D ,ASSIC码为68。RxData[2]=I ,ASSIC码为73。--解析手机发来的命令RxData[1]=string.byte(rec_data,1,1)--帧头OXA5,ASSIC码为165RxData[2]=string.byte(rec_data,2,2)--接收数据帧的第二个字符,x轴数据,0~100RxData[3]=string.byte(rec_data,3,3)--接收数据帧的第三个字符,y轴数据,0~100RxData[4]=string.byte(rec_data,4,4)--校验和,由手机app算好,发送过来RxData[5]=string.byte(rec_data,5,5)--帧尾OX5A,ASSIC码为90
end--根据L298N使用说明,需设置引脚电平控制电机转向,选择
--控制电机L转动方向
--GPIO19-->PB3-->IN2
--GPIO21-->pB5-->IN1
gpio.setup(19, 0)
gpio.setup(21, 0)
--控制电机R转动方向
--GPIO1-->PA1-->IN3
--GPIO4-->pA4-->IN4
--先将引脚设置为输出模式,后续更改输出电平控制转向
gpio.setup(1, 0)
gpio.setup(4, 0)--设置串口
uart.setup(1,9600)--设置串口1的波特率为9600
--打开串口1的回调函数,当串口1收到数据会自动调function函数
uart.on(1,"receive",function(id,len)Rec_data=uart.read(id,len)--将串口收到的数据读出jiexi(Rec_data)--解析数据帧if  (RxData[1]==165)and(RxData[5]==90)and(RxData[4]==RxData[2]+RxData[3]) then--判断是否为有效数据帧--print("x=",RxData[1],"y=",RxData[2])local x=RxData[2]local y=RxData[3]if (x>=0 and x<=100)and(y>=0 and y<=100)then--有效坐标数据if y>50 then--摇杆中位以上qianjin(x,y)--前进elseif (x==50 and y==50) then--摇杆中位shache();--刹车elseif y<50 thenhoutui(x,y)--后退endendelseif (RxData[2]==67 and RxData[3]==79)or(RxData[2]==68 and RxData[3]==73)  then--如果是蓝牙断开或者连接产生的提示字符串shache();--刹车endend)

注意:
1,

--由于蓝牙端口或者连接会自动发送数据给串口,这种简单的通信方式会造成错误命令,但也可以利用这个做个保护机制--连接成功自动给串口发送:+CONNECTED              对应的RxData[1]=C ,ASSIC码为67。RxData[2]=O , ASSIC码为79。--蓝牙断开自动给串口发送:+DISCONNECT             对应的RxData[1]=D ,ASSIC码为68。RxData[2]=I ,ASSIC码为73。

2,调试时,不要上桨叶
3,电机会发烫,全靠热熔胶是不行的

感觉:真不错,100行代码不到搞定

视频:

手机端:

安装app:蓝牙调试器
配置步骤:
1,刷新蓝牙,连接蓝牙

2,进入专业调试,点击中间弹出,添加工程,进入通信设置,再编辑控件

通信设置:添加两个字符型变量,命名为 x,y,

再编辑控件:
添加组件,链接变量,调整组件大小

弄好返回,自动弹出设置x\y范围,设置为0-100,打开这个开关,摇杆会自动归中

点击运行:

可以愉快的玩耍了。

补充:

这个是协议

设置通信模式:仅操作控件时发生。拒绝无效通信

有改成其他单片机的需求,联系主页邮箱

使用合宙air101系统板DIY一个小船相关推荐

  1. AIR32F103(一) 合宙AIR32F103CBT6开发板上手报告

    目录 AIR32F103(一) 合宙AIR32F103CBT6开发板上手报告 AIR32F103(二) Linux环境和LibOpenCM3项目模板 AIR32F103(三) Linux环境基于标准外 ...

  2. 0.1.3 合宙CORE-ESP32-C3开发板用arduino点亮ST7735 1.8寸TFT屏【已更新失效链接2022.07.10】

    9.9的ESP32开发板想用arduino开发,无奈都是用luatos玩,于是折腾了下 目的 用arduino驱动合宙ESP32-C3开发板点亮S7735TFT屏 材料 CORE-ESP32-C3开发 ...

  3. 含税9.9元包邮——合宙ESP32-C3核心板来了

    当ESP32遇上LuatOS,会产生怎样奇妙的火花?--工程师朋友们呼声极高的CORE ESP32-C3核心板来了. 工程师需要,合宙造!适配越来越多的CPU支持LuatOS,敬请期待! 合宙ESP3 ...

  4. 合宙Air101的软硬件开发

    上半年利用业余时间使用国产芯片-合宙Air101 做了个小玩具,有点小成果,奈何现在忙带娃,基本没有时间继续了,已经吃灰了一段时间,做个总结,送有缘人. XT-E804是阿里平头哥的MCU,属于CSK ...

  5. 合宙-icool 开发板使用手册

    概述:iCool(idea cool)手机是基于合宙Air722UG模块,移植LittleVGL,用lua脚本语言开发的一款5寸触摸屏手机产品. 目录 1.总体介绍 2.准备工作 3.功能介绍 3.1 ...

  6. 实测:合宙ESP32C3开发板可以直接用Arduino开发

    合宙推出了一款ESP32C3开发板,制作精良,而且9.9包邮,可谓是相当吸引人了. 但当看某宝评论的时候,会发现很多人要么说这款开发板不能用Arduino开发,要么说不适合小白使用,又有说需要用电烙铁 ...

  7. 合宙Air101 的LCD怎么用Arudino IDE驱动

    屏幕怎么驱动 有个官方的资料,可以了解到是ST7735,屏幕的分辨率 https://doc.openluat.com/wiki/21?wiki_page_id=2672 有个库但是这个库是LuatO ...

  8. 新品上市 | 合宙工业级4G全网通DTU全新来袭,DTU-S401核心板超值团购开启

    搭载LuatOS-iRTU软件解决方案的DTU,不仅仅是一种传统DTU,更是一种"硬件成本大幅降低.业务功能扩充方便.脚本源码免费开放"的系统级主控DTU. 合宙DTU-S401核 ...

  9. 实惠的Arduino开发板——合宙ESP32C3

    目录 1.0 ESP32C3单片机 2.0 使用方法: 3.0 其他注意事项: 4. 小结 esp32长期以来都是最具性价比的开发板,特别在当今的缺芯潮下,很多MCU价格已经上天,但esp32系列仍然 ...

最新文章

  1. 移动端AR的适用分析(二)
  2. 文字输入限制_输入框设计,设计样式及设计要点
  3. Adaboost算法原理以及matlab代码实现(超详细)
  4. 中国工商银行的 Service Mesh 探索与实践
  5. [20151112]ORA-01450?3215?.txt
  6. 超图Cesium鼠标事件处理
  7. 洛谷P1879 [USACO06NOV]玉米田Corn Fields
  8. 赛锐信息:SAP 程序优化
  9. SENT协议学习总结
  10. oracle存储过程实例带参数,oracle简单存储过程(带参数)
  11. 在ENVI5.3 下基于GLT/IGM文件的几何校正具体过程
  12. 制作u盘启动盘对u盘有什么影响
  13. 影响不良贷款拨备覆盖率的因素分析
  14. 【开发环境】(基于Hexo)个人博客主题(Hexo Fluid)更换
  15. 《The One!团队》第一次作业:团队亮相
  16. Verilog 6位数码管LG3661BH 的动态显示
  17. Polo360网站页面制作练习
  18. 生物信息学 | 富集分析
  19. 根据年月以及月中周次,获取该周开始,结束日期
  20. 3D打印机Marlin固件双Z轴设置

热门文章

  1. 树莓派3使用红外遥控器模拟鼠标和键盘
  2. ubuntu 查询程序崩溃日志_ubuntu查看系统日志及相关文件介绍
  3. 对比腾讯、163、商务密邮、360加密邮,发加密邮件用哪个更好
  4. Kafka系列 - 10 Kafka副本|分区副本分配|手动调整分区副本|Leader Partition 负载平衡|增加副本因子
  5. ftp工具上传,三大ftp上传工具(推荐)
  6. 计算机打开bios按键,电脑按热键,进入不了,BIOS怎么处理
  7. Netkiller FreeBSD 手札之前言
  8. 最新产品 L1频段卫星导航射频前端低噪声放大器芯片AT2659
  9. 强化学习经典算法笔记(十九):无监督策略学习算法Diversity Is All You Need
  10. ionic和avos相结合