2023.10.24
又翻出了程小奔
- 如果是磁吸充电,或许可以让它自动到充电位充电
换个思路,虽然它是固定的usb,但可以想办法改造一下。
想办法告诉它"充电站"的位置,以便让它自己去充电。比如通过颜色传感器。
2019.10.16 网页中使用编程
之前安装了mlink依然不能在网页中进行连接,与官方沟通后,发现是后台没有启动此服务:sudo mblock-mlink start
作了一个alias cxb,简化启动。
根据Python与网络调用,很快增加了一点功能:通过网页设置在小程屏幕上显示内容
#
# 作者:Ease
# 时间:2019.10.16
# 功能:升级程小奔,让它更智能,更实用
#
import codey, event, time, rocky, random, iot
import urequests as requests
# 变量初始化
Dong = 0
Deng = 0
Statue = 0
Sleep = 0
Li = 0
#A按钮事件
@event.button_a_pressed
def on_button_a_pressed():
global Dong, Deng, Statue, Sleep, Li
"""A键:启动"""
Dong = 1
Statue = 1
#B按钮事件
@event.button_b_pressed
def on_button_b_pressed1():
global Dong, Deng, Statue, Sleep, Li
"""B键:停止"""
Dong = 0
Statue = 0
codey.display.clear()
codey.speaker.play_melody('switch.wav')
#C按钮事件
@event.button_c_pressed
def on_button_c_pressed2():
global Dong, Deng, Statue, Sleep, Li
"""C键:灯的开关"""
if Deng == 0:
Deng = 1
rocky.color_ir_sensor.set_led_color('white')
# 并行能力有限,循环读取一会儿就停止
for count in range(400):
if Li == codey.potentiometer.get_value():
codey.display.show(Li, wait = False)
else:
Li = codey.potentiometer.get_value()
codey.speaker.play_melody('score.wav')
codey.speaker.play_melody('right.wav')
else:
Deng = 0
rocky.color_ir_sensor.set_led_color('black')
codey.display.clear()
#当程小奔启动时
@event.start
def on_start():
global Dong, Deng, Statue, Sleep, Li
codey.led.off()
rocky.color_ir_sensor.set_led_color('black')
# 启动初始化并反馈
codey.speaker.volume = (10)
codey.wifi.start('Ease', 'yjz', codey.wifi.STA)
codey.speaker.play_melody('wake.wav')
while True:
# 齿轮调节驱动力量
Li = codey.potentiometer.get_value()
if codey.is_rocky_connected():
codey.led.off()
if Dong == 1:
if rocky.color_ir_sensor.is_obstacle_ahead():
codey.display.show_image("0000181c1c1800000000181c1c180000")
rocky.backward(Li, 1)
rocky.turn_right(Li, random.uniform(0.5, 2))
else:
codey.display.show_image("00003c7e7e3c000000003c7e7e3c0000")
rocky.forward(Li)
if codey.light_sensor.get_value() > 5:
rocky.color_ir_sensor.set_led_color('black')
else:
rocky.color_ir_sensor.set_led_color('white')
Sleep = 0
else:
rocky.stop()
Sleep = Sleep + 1
if Sleep//2000 == 1:
if codey.wifi.is_connected():
res = requests.get(url='http://s.scwy.net/cxb/Get')
codey.display.show(res.text, wait = False)
time.sleep(3)
codey.display.show("", wait = False)
# 当静止不动太久,随机时间反馈一点声音和图案
if Sleep > random.randint(50000, 100000):
codey.speaker.play_melody('meow.wav')
codey.display.show_image("00003c7e7e3c000000003c7e7e3c0000", time_s=0.5)
codey.display.show_image("00103030303010000010303030301000", time_s=0.5)
codey.display.clear()
Sleep = 0
else:
codey.led.show(255, 0, 0)
if codey.motion_sensor.is_shaked():
if codey.wifi.is_connected():
codey.display.show(iot.weather('2158433', '1'), wait = False)
else:
codey.speaker.play_melody('wrong.wav')
@event.greater_than(60, 'sound_sensor')
def on_greater_than():
global Dong, Deng, Statue, Sleep, Li
"""对外界声音的反馈:启停
响度值太小时容易被自己的声音影响"""
if Statue == 1:
if Dong == 1:
Dong = 0
codey.speaker.play_note(60, 0.25)
else:
Dong = 1
codey.speaker.play_note(36, 0.25)
2019.10.15 升级中…
它现在已经能在家里自由奔跑了…
希望我的升级就到这里,孩子能有更好的想法。不过觉得孩子要达到现在这些代码至少要到小三年级了…有点迫不急待的想让他们超过爸爸。
我可以研究的主要是:网络扩展能力,以及它现有的接口扩展。
功能:
- A键启动小奔
- B键停止小奔
- C键开关车灯,并在开灯时,可以调节滚轮,控制小奔的速度(移动力量)
- 根据环境灯光的亮度,自己判断是否开车灯
- 根据环境声音,自动启动或停止小奔
- 遇到障碍物自动避开
- 当长时间(随机时长)未使用时,它自己发出声音(现在是猫叫),提醒主人它还活着
- 启动过程中可以随时使用滚轮,控制小奔的速度
完善:
- 因为它的传感器在下部,所以有时候障碍物在上方时,它不能检测。解决:通过姿态传感器(x,y,z)来统合判断,如果行进过程中,某柱的值没有变化,表示卡起的。可以试图自己脱困(后退),三次尝试失败后,发出警报声。
- 因为声音传感器在下方,导致自己拾自己的音。建议官方将拾音器改为向上,朝上开。
- 因为(障碍)传感器只有一个,当遇到悬崖时,小奔并不知道,官方可以再加一个传感器,或者另想办法解决。
- 来个太阳能充电?
# generated by mBlock5 for codey & rocky
# codes make you happy
import codey, event, time, rocky, random
# initialize variables
Dong = 0
Deng = 0
Statue = 0
Sleep = 0
Li = 0
@event.button_a_pressed
def on_button_a_pressed():
global Dong, Deng, Statue, Sleep, Li
"""AŒü£ºÆô¶¯"""
Dong = 1
Statue = 1
@event.button_b_pressed
def on_button_b_pressed1():
global Dong, Deng, Statue, Sleep, Li
"""BŒü£ºÍ£Ö¹"""
Dong = 0
Statue = 0
codey.display.clear()
codey.speaker.play_melody('switch.wav')
@event.button_c_pressed
def on_button_c_pressed2():
global Dong, Deng, Statue, Sleep, Li
"""CŒü£ºµÆµÄ¿ª¹Ø"""
if Deng == 0:
Deng = 1
rocky.color_ir_sensor.set_led_color('white')
# ²¢ÐÐÄÜÁŠÓÐÏÞ£¬Ñ»·¶ÁÈ¡Ò»»á¶ùŸÍÍ£Ö¹
for count in range(600):
if Li == codey.potentiometer.get_value():
codey.display.show(Li, wait = False)
else:
Li = codey.potentiometer.get_value()
codey.speaker.play_melody('score.wav')
codey.speaker.play_melody('right.wav')
else:
Deng = 0
rocky.color_ir_sensor.set_led_color('black')
codey.display.clear()
@event.start
def on_start():
global Dong, Deng, Statue, Sleep, Li
codey.led.off()
rocky.color_ir_sensor.set_led_color('black')
# Æô¶¯³õÊŒ»¯²¢·ŽÀ¡
codey.speaker.volume = (10)
codey.speaker.play_melody('wake.wav')
while True:
# ³ÝÂÖµ÷œÚÇý¶¯ÁŠÁ¿
Li = codey.potentiometer.get_value()
if codey.is_rocky_connected():
if Dong == 1:
if rocky.color_ir_sensor.is_obstacle_ahead():
codey.display.show_image("0000181c1c1800000000181c1c180000")
rocky.backward(Li, 1)
rocky.turn_right(Li, random.uniform(0.5, 2))
else:
codey.display.show_image("00003c7e7e3c000000003c7e7e3c0000")
rocky.forward(Li)
if codey.light_sensor.get_value() > 5:
rocky.color_ir_sensor.set_led_color('black')
else:
rocky.color_ir_sensor.set_led_color('white')
Sleep = 0
else:
rocky.stop()
Sleep = Sleep + 1
# µ±Ÿ²Ö¹²»¶¯Ì«ŸÃ£¬Ëæ»úʱŒä·ŽÀ¡Ò»µãÉùÒôºÍÍŒ°ž
if Sleep > random.randint(50000, 100000):
codey.speaker.play_melody('meow.wav')
codey.display.show_image("00003c7e7e3c000000003c7e7e3c0000", time_s=0.5)
codey.display.show_image("00103030303010000010303030301000", time_s=0.5)
codey.display.clear()
codey.led.off()
Sleep = 0
else:
codey.emotion.uh_oh()
@event.greater_than(60, 'sound_sensor')
def on_greater_than():
global Dong, Deng, Statue, Sleep, Li
"""¶ÔÍâœçÉùÒôµÄ·ŽÀ¡£ºÆôÍ£
Ïì¶Èֵ̫СʱÈÝÒ×±»×ÔŒºµÄÉùÒôÓ°Ïì"""
if Statue == 1:
if Dong == 1:
Dong = 0
codey.speaker.play_note(60, 0.25)
else:
Dong = 1
codey.speaker.play_note(36, 0.25)
2019.10.14 盘古
为我家新客人程小奔(点这里看看它,以及它的由来)升级,让它更智能。或许以后可以加入点其它的,一起让它为家里服务。
在线编程环境,似乎只能谷歌浏览器 https://ide.makeblock.com/
功能:
- A键启动小奔
- B键停止小奔
- C键开关车灯
- 根据环境灯光的亮度,自己判断是否开车灯
- 根据环境声音,自动启动或停止小奔
- 遇到障碍物自动避开
问题或需求:
- 环境声音变化时,自己就动或停,需要在A键启动后,再执行此功能。
- 长时间没动时,它应该有所反应。
- 通过网络接收指令(既然它能够接收天气信息,就能够完成这个功能,不过似乎需要python)
# generated by mBlock5 for codey & rocky
# codes make you happy
import codey, event, time, rocky
# initialize variables
Dong = 0
Deng = 0
@event.greater_than(10, 'sound_sensor')
def on_greater_than():
global Dong, Deng
if Dong == 1:
codey.speaker.play_melody('wow.wav')
Dong = 0
else:
codey.speaker.play_melody('annoyed.wav')
Dong = 1
@event.button_a_pressed
def on_button_a_pressed():
global Dong, Deng
Dong = 1
@event.button_b_pressed
def on_button_b_pressed1():
global Dong, Deng
Dong = 0
@event.start
def on_start():
global Dong, Deng
while True:
if Dong == 1:
if rocky.color_ir_sensor.is_obstacle_ahead():
codey.display.show_image("0000181c1c1800000000181c1c180000")
rocky.backward(10, 1)
rocky.turn_right(10, 1)
else:
codey.display.show_image("00003c7e7e3c000000003c7e7e3c0000")
rocky.forward(50)
if codey.light_sensor.get_value() > 5:
rocky.color_ir_sensor.set_led_color('black')
else:
rocky.color_ir_sensor.set_led_color('white')
else:
rocky.stop()
@event.button_c_pressed
def on_button_c_pressed2():
global Dong, Deng
if Deng == 0:
Deng = 1
rocky.color_ir_sensor.set_led_color('white')
else:
Deng = 0
rocky.color_ir_sensor.set_led_color('black')