4318| 8
|
[项目] 【mPythonX】N+千里马智能机器人——无线控制 |
善跑的骏马,可以日行千里,掌控板的生态越来越友好! 2019年10月,百灵鸽正式问世;11月,小鸽子的伙伴千里马也来了! 12月29日,收到了桃李科技寄来的“千里马智能机器人”, 很高兴成为20名内测用户中的一员!今天分享一个《【mPythonX】N+千里马智能机器人——无线控制》。 一、思路: 利用无线广播radio,通过A端掌控板控制B端千里马运行状态, 当A端掌控板P触摸按键,发送命令:qianjin, B端千里马前进; 当A端掌控板Y触摸按键,发送命令:houtui, B端千里马后退; 当A端掌控板T触摸按键,发送命令:zuozhuan,B端千里马坐转; 当A端掌控板H触摸按键,发送命令:youzhuan,B端千里马右转; 当A端掌控板O触摸按键,发送命令:xuanzhuan,B端千里马自转; 当A端掌控板N触摸按键,发送命令:stop, B端千里马停止; 二、环境: 1.软件:mPythonX0.5.0 2、硬件: (1).千里马 (2).掌控板 (3).百灵鸽 三、组装 1.巡线模块两路红外巡线传感器,方便实现老马识途,保证不会迷失方向。 2.动力模块两个金属电机为千里马提供动力,最大转速:45转/转;减速比:1:150 . 3.电源模块千里马有700MAH锂电池,超10H小时奔跑能力。 4.超声波模块为千里马配上识别远方的眼睛,不会迷失方向。 5.灯光模块12路1600万RGB彩灯,加上掌控板3路,渲染节日气氛。6.颜色模块颜色识别传感器,千里马识别黄色红色等颜色。 7.控制模块通过Radio无线通信,A端掌控板控制B端千里马。 8.声音模块内置音频功放及小喇叭,3.5mm音频接口,播放动听音乐。 9.气象模块搭载BME280传感器,检测温度、湿度、大气压、海拔高度。 四、编程准备工作1.将Horse.py和 horse.pbm上传掌控板中 (1).mPythonX图形化对应的库叫lark.py, horse.py改名lark.py;文件名:horse.py (2).板载文件管理中,将ark.py上传到掌控板根目录下; (3).在板载文件管理中,新建“文件夹”pbm,将千里马图片上传pbm文件夹中。 2.创建一个N+的目录文件名:N+.zip (1).N+文件解压缩 (2).将整个文件夹复制到mPythonX安装目录下 plugins 目录 (3).打开 mPythonX,左侧有扩展选项,找到”N+” 3.编写程序(1).控制A端掌控板 (2).授控B端千里马 1.运动千里马参考清者淡老师的“掌控板&如何让屏幕显示的图片动起来”。 文件名:gif分离.rar(1)利用gif分离工具,将horse.gif分解5个bmp图片, (2)pbm格式转换,打开链接:将你的文件格式在线转换成*.pbm格式; (3)打开mpythonX,连接掌控板,打开文件管理,新建文件夹(命名为pbm),然后将转好的pbm文件一个一个的上传至掌控板。 2.horse代码说明: 详细请见:文件名:千里马使用说明(简易版) 3.无线广播图形切换到代码模式。 (1)代码模式去掉motor = Motor() (2)前进:car.forward() (3)后退:car.backward() (4)停止:car.stop() (5)右转:car.turn_r() (6)左转:car.turn_l() B端千里马python代码: [mw_shl_code=python,true]from mpython import * from machine import Timer import radio import ubinascii from lark import * import neopixel import time _radio_msg_list = [] def radio_callback(_msg): global _radio_msg_list try: radio_recv(_msg) except: pass if _msg in _radio_msg_list: eval('radio_recv_' + bytes.decode(ubinascii.hexlify(_msg)) + '()') tim13 = Timer(13) def timer13_tick(_): _msg = radio.receive() if not _msg: return radio_callback(_msg) tim13.init(period=20, mode=Timer.PERIODIC, callback=timer13_tick) my_rgb = neopixel.NeoPixel(Pin(Pin.P7), n=12, bpp=3, timing=1) def make_rainbow(_neopixel, _num, _bright, _offset): _rgb = ((255,0,0), (255,127,0), (255,255,0), (0,255,0), (0,255,255), (0,0,255), (136,0,255), (255,0,0)) for i in range(_num): t = 7 * i / _num t0 = int(t) r = round((_rgb[t0][0] + (t-t0)*(_rgb[t0+1][0]-_rgb[t0][0]))*_bright)>>8 g = round((_rgb[t0][1] + (t-t0)*(_rgb[t0+1][1]-_rgb[t0][1]))*_bright)>>8 b = round((_rgb[t0][2] + (t-t0)*(_rgb[t0+1][2]-_rgb[t0][2]))*_bright)>>8 _neopixel[(i + _offset) % _num] = (r, g, b) car=Car() _radio_msg_list.append('qianjin') def radio_recv_7169616e6a696e(): global m car.forward(100) _radio_msg_list.append('houtui') def radio_recv_686f75747569(): global m car.backward(-100) _radio_msg_list.append('zuozhuan') def radio_recv_7a756f7a6875616e(): global m car.turn_l(50,100) _radio_msg_list.append('youzhuan') def radio_recv_796f757a6875616e(): global m car.turn_r(100,50) #_radio_msg_list.append('xuanzhuan') #def radio_recv_7875616e7a6875616e(): # global m #car.revolve(-100,100) _radio_msg_list.append('stop') def radio_recv_73746f70(): global m car.stop() image_picture = Image() radio.on() radio.config(channel=13) m = 0 while True: for m in range(0, 256, 10): make_rainbow(my_rgb, 12, 25, m) m = m + 1 my_rgb.write() oled.fill(0) oled.blit(image_picture.load("pbm/horse1.pbm", 0), 0, 0) oled.show() time.sleep_ms(50) oled.fill(0) oled.blit(image_picture.load("pbm/horse4.pbm", 0), 0, 0)[/mw_shl_code]五、视频回放: 六、知识拓展: 超声波传感器 声波,人的耳朵能听到的声波频率为20-200002,当声波动频率大于20000H2时,人耳无法听到。超声波因其频率下限大约等于人的听觉上限而得名。因此,我们把频率高于2000的声波称为“超声波”,超声波传感器是将超声波信号转换成电信号的传感器,有两个探头,一个发射超声波,另一个接收。有效测距面围为2--400CM,2CM以内为盲区。 感谢各位技术老师大力支持,谢谢你们,本产品来源:N+ |
mPythonX图形化对应的库叫lark.py, horse.py改名lark.py;文件名:horse.py 千里马使用说明(简易版) (3).docx3.无线广播图形切换到代码模式。 (1)代码模式去掉motor = Motor() (2)前进:car.forward() (3)后退:car.backward() (4)停止:car.stop() (5)右转:car.turn_r() (6)左转:car.turn_l() |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed