【2020】N+千里马智能机器人——无线控制

rzegkly, 创新中国 有你有我
帖子创建于2019年12月30日 基础使用 1083 次浏览 13 个赞 1 人关注


善跑的骏马,可以日行千里,掌控板的生态越来越友好! 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).docx

3.无线广播图形切换到代码模式。

(1)代码模式去掉motor = Motor()

(2)前进:car.forward()

(3)后退:car.backward()

(4)停止:car.stop()

(5)右转:car.turn_r()

(6)左转:car.turn_l()



B端千里马python代码:

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)

五、视频回放:

https://v.youku.com/v_show/id_XNDQ4ODIzODc1Ng==.html?spm=user.playlsit.page.36

感谢各位技术老师大力支持,谢谢你们,本产品来源:N+

10 条评论

小齿轮 汝州一中朱现伟

2019年12月30日

千里马,很棒啊

rzegkly

2019年12月30日

这几天考试,忙里偷闲,写的有点简单

赵春艳

2020年02月02日

这个真的好

创客教育~周斌

2020年02月02日

应该挺好玩的

盛思米兰

2020年02月03日

千里马,意思小车跑的很快吗哈哈

白色小猫

2020年02月03日

好玩

汤菇凉

2020年02月03日

不错

悄墨

2020年02月03日

很有意思

赵雯俊

2020年02月03日

很好玩的样子…

心若幽兰

2020年02月03日

厉害了