2897| 6
|
[入门教程] 2019,守护最好的阿中 |
本帖最后由 rzyzzxw 于 2019-8-21 11:29 编辑 2019,注定是不平静的一年。 免责声明: 本文图片来自网络 版权归原作者所有 这个夏天 爱国青年热血沸腾 默默取出我心爱的 怎么忍心让你受折磨 是我给你自由过了火 以下正文 故事虚构 情节简单 能量很正 人物: Hongkong小朋友小爱 内地小朋友小德 故事: 在香港的小爱同学要播放国歌支持特区政府,设备密码遗失。小爱向内地的小德同学求助,小德发去密码。 小爱顺利完成设备启动,嘹亮的国歌响彻港岛。 序曲 步骤1认认真真做好准备工作 组装设备 2x micro:bit2x micro:bit扩展板2x 锂电池2x BOSONLED灯1x 乐高颗粒若干1x 导电胶带步骤2编程MicroPython 编程平台:MIND+1.5.6 编程模式:上传模式 编程语言:MicroPython 1、主控选择 2、编程语言选择 3、手动编辑改写代码 4、代码功能 用B键或者用pin2做触摸键,发送信号。 pin0控制蜂鸣器,pin1控制马达或者LED灯。 A键显示或清除显示。 两个设备代码一样,可以互相发送电码。 本项目中,运用micro:bitP2的触摸功能来实现发报。而bit的触摸功能是需要GND来配合的。 所以设备中用导电胶带同时引出了p2和GND,做成了发报机的样子。 参考代码: https://github.com/jg00dman/m0rvj_microbit_cw_transceiver 稍有修改。代码 [mw_shl_code=python,true]from microbit import * import radio import music radio.on() radio.reset() #Customise these settings for tx, pwr, channel and speed. radio.config(power=7) WPM = 15 txenabled = True #in case you want to practice without sending sidetone = 550 dotlength = int( 60000 / ( WPM * 50 ) ) dashlength = dotlength * 3 interelement = dotlength interletter = dotlength * 2 interword = dotlength * 7 DOT_THRESHOLD = dotlength * 2 DASH_THRESHOLD = dotlength * 5 WORD_THRESHOLD = dotlength * 7 DOT = Image("00000:00000:00900:00000:00000") DASH = Image("00000:00000:09990:00000:00000") ANT = Image("90909:09990:00900:00900:00900") morse = { "A":".-", "B":"-...", "C":"-.-.", "D":"-..", "E":".", "F":"..-.", "G":"--.", "H":"....", "I":"..", "J":".---", "K":"-.-", "L":".-..", "M":"--", "N":"-.", "O":"---", "P":".--.", "Q":"--.-", "R":".-.", "S":"...", "T":"-", "U":"..-", "V":"...-", "W":".--", "X":"-..-", "Y":"-.--", "Z":"--..", "0":"-----", "1":".----", "2":"..---", "3":"...--", "4":"....-", "5":".....", "6":"-....", "7":"--...", "8":"---..", "9":"----.", ".":".-.-.", ",":"--..--", "/":"-..-.", "?":"..--.." } # reverse dict. decodemorse = {v: k for k, v in morse.items()} # convert string to cw def EncodeMorse(message): m = message.upper() enc = "" for c in m: enc = enc + morse.get(c," ") if morse.get(c," ") != " ": enc = enc + " " return enc # function to flash and play cw def FlashMorse(pattern): for c in pattern: if c == ".": display.show(DOT) pin1.write_digital(1) music.pitch(sidetone, dotlength) display.clear() pin1.write_digital(0) sleep(interelement) elif c == "-": display.show(DASH) pin1.write_digital(1) music.pitch(sidetone, dashlength) display.clear() pin1.write_digital(0) sleep(interelement) elif c == " ": sleep(interletter) return def ReceiveCW(): display.show(ANT) message = '' started = running_time() while True: waiting = running_time() - started received = radio.receive() if received: FlashMorse(EncodeMorse(received)) message += received if button_b.is_pressed(): return # breakin to immediate keying if pin2.is_touched(): return # breakin to immediate keying if button_a.was_pressed(): display.scroll(message) # nb blocks receive while showing... message = '' if waiting > WORD_THRESHOLD * 2: display.show(ANT) if len(message) > 15: #keep message buffer short... message = message[1:16] if accelerometer.was_gesture("shake"): display.scroll("CW TRX by M0RVJ") def Keyer(): buffer = '' message = '' started = running_time() while True: waited = running_time() - started key_down_time = None while button_b.is_pressed(): ## button B keying if not key_down_time: key_down_time = running_time() music.pitch(sidetone, -1, pin0, False) pin1.write_digital(1) while True: if not button_b.is_pressed(): music.stop() pin1.write_digital(0) break while pin2.is_touched(): ## touch keying if not key_down_time: key_down_time = running_time() music.pitch(sidetone, -1, pin0, False) pin1.write_digital(1) while True: if not pin2.is_touched(): music.stop() pin1.write_digital(0) break key_up_time = running_time() if key_down_time: duration = key_up_time - key_down_time if duration < DOT_THRESHOLD: buffer += '.' display.show(DOT) elif duration: buffer += '-' display.show(DASH) started = running_time() elif len(buffer) > 0 and waited > DASH_THRESHOLD: display.clear() character = decodemorse.get(buffer, '?') buffer = '' display.show(character) if txenabled: radio.send(character) message += character if waited > WORD_THRESHOLD * 2: return while True: Keyer() ReceiveCW()[/mw_shl_code] 5、BXY--另一种代码编程方式 BXY是一款运行于Windows平台的MicroPython编程IDE,界面简介,操作便利。为众多micro:bit和掌控板爱好者提供了一个简洁实用的平台。 QQ群:336213887 绿色版下载地址 安装版下载地址 区别: 绿色版体积小巧无需安装即可运行,但是需要在电脑网络畅通的情况下使用以便下载编译器及示例程序,否则会出现程序无法上传和没有示例程序等问题,推荐个人用户使用。 安装版安装即可运行,即使无网络也可以运行,适合电脑教室和大规模培训等网络不通畅的情况。 6、莫尔斯电码认识 7、莫尔斯电码练习 第一幕 步骤3Hongkong小朋友小爱要播放国歌支持政府 他向小德发送求助信号SOS,寻求小德给予密码提示。 步骤4小德收到来自HongKong的电报 sos 步骤5小德发送密码给小爱 步骤6小爱接收到密码 23 第二幕 步骤7国歌播放装置配置 材料清单 1x micro:bit主控板2x BOSON按钮模块1x BOSON分支模块1x micro:bit扩展板1x BOSON神经元模块1x 好搭徽章板1x 录音模块及小喇叭(已录国歌10秒)1、国歌播放设备组装 2、MIND+实时模式编程 3、训练神经元 3、和徽章板互动 徽章板编程: http://haohaodada.com/hz/index.php?id=9787 步骤8小爱输入密码,成功启动装置播放国歌 尾声 设备资料: 神经元 https://wiki.dfrobot.com.cn/index.php?title=%E5%8D%95%E7%A5%9E%E7%BB%8F%E5%85%83%E6%A8%A1%E5%9D%97 在人工神经网络中,复杂的算法将会对每个神经元记录的数据进⾏自动反馈和校准,才形成了“学习”的过程,也就是 “机器学习”,这个过程过于抽象和复杂。NeurOne单神经元模块是一款专为中小学人⼯智能课程设计的教学⼯具,具有基础模式识别功能。 NeurOne单神经元模块,兼容各类传感器,可读取和运用各类数据;模块板载的按钮和旋钮,分别用于记录数据和反馈校准,板载指示灯会提示学⽣是否识别成功。 学生在不断校准过程中,可以体验人工智能“学习”的过程。通过运用该模块,学生可以学习和了解人工智能的基础功能,并理解机器学习的原理。 NeurOne单神经元模块给学⽣极大想象空间,更是让他们真正体验到人⼯智能带来的神奇之处。 徽章板 https://mc.dfrobot.com.cn/thread-296812-1-1.html micro:bit掌控I/O扩展板 本扩展板能完全兼容micro:bit和掌控板和两种主板。正面插入掌控,反面插入micro:bit。引出10路数字/模拟3Pin口,两路IIC口以及一路UART口;板载两路电机驱动,且不占用额外引脚;板载PH2.0及microUSB两种供电口,既可以通过usb线也可以通过电池盒或者锂电池供电,供电电压3.5-5V,板载开关,可以开关外接供电电源;板载一个高品质蜂鸣器,且带有开关控制,可以随时关闭蜂鸣器;引出了9个鳄鱼夹接口;分别兼容掌控的触控金手指和micro:bit金手指。扩展板兼容乐高尺寸孔位,可以与乐高进行拼插结合。 录音模块 DFRobot最新推出ISD1820录放音模块,集成录放音功能为一体。板载按键和麦克风,可直接通过按键录音和放音,一按录音,一按放音。可实现10秒音频录放功能。输出接口最大支持外接3W小喇叭,也可以外接有源音响,共同分享欢乐时光。此外,模块还外扩了Arduino接口,支持通过Arduino管脚控制模块。 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed