3176| 0
|
[2019参赛作品] 【脑洞大赛】麦昆无线充电 |
本帖最后由 汤果 于 2019-8-20 15:28 编辑 【介绍】 利用徽章板、神经元模块和麦昆制作一个模拟无线充电的装置。主要用到了 Microbit 的无线通信功能。 为了保证趣味性,特地创设了一个火星历险记的情境。 背景 随着地球资源逐渐枯竭,人们逐渐开始探索宇宙,寻找更合适的栖息地。有一天,麦昆乘着飞船来到了火星。开始了资源探索之旅。 经过一段时间的探查,麦昆发现火星上到处都是环形坑,十分难走。于是没过多久,麦昆的两盏车灯就开始闪烁。这意味着麦昆的能源即将耗尽,需要赶紧去能源补给站充电。 到了补给站,麦昆发现要充电还不是那么容易的一件事。充电站的显示屏上显示着一串神秘的波形,边上还有一个黄色的按钮。 麦昆仔细想了一下,这个按钮肯定就是充电站的电源开关。只要接通后应该就可以充电了。但是按了一下却没有任何反应。那该怎么办呢?大家能帮忙解决这个问题吗? 【准备事项】 材料清单
【制作过程】 步骤1 充电站编程 进入好好搭搭在线编程平台(http://haohaodada.com/new/adminmoban.php),选择顶部菜单的【创作】。 滚动到下面的【U盘下载模式编程】,选择【徽章板】,进入编程页面。(需要登录) 首先编写初始化代码。这里采用了与Microbit进行无线通信的方式,首先要初始化无线通信,并指定发送的频道。 主程序一直在监测数字端口D1是否为高电平。神经元模块会处理按钮的按键信息,如果匹配则会输出高电平。那么就显示“口令正确”,发送消息给麦昆小车:可以充电了。 连线方式如下:徽章板扩展板的D1接口连到神经元模块的输出。按钮接到神经元输入。 一开始的波形图是通过一个函数呈现的。实际上就是画点阵。 代码编写好下载到徽章板即可。 步骤2 麦昆编程 这里要用到无线通信与徽章板进行传输信息。首先需要下载一个补丁。下载地址:http://haohaodada.com/ueditor/php/upload/file/20190809/1565335632539384.zip 首先初始化麦昆。指定与徽章板相同的频道。因为没电的时候车灯闪烁,所以在主程序写一段代码,使得车灯每隔半秒闪烁。 当接收到无线消息后,先判断是否为充电的指令。如果是,则显示充电的动画。 步骤3 测试运行 按下神经元的黑色学习按钮,同时按照一定的节奏按黄色按钮(按照波形)。完成学习后松开所有按钮。测试一下是否能够按照指定接通神经元的电路。如果不行,则调节神经元模块上方蓝色的调节器,使得精度合适。 按照正确的按钮频率测试一下,看看是否能将充电信息传送给麦昆。 【效果演示】 【相关资源】 徽章板代码 [mw_shl_code=c,true]#include "Haoda.h" #include "Arduino.h" #include "Wire.h" #include "Servo.h" uint16_t hz_matrix[11]; /*描述该功能... */ void led(){ hz_matrix[0] = 0x000;hz_matrix[1] = 0x004; hz_matrix[2] = 0x004;hz_matrix[3] = 0x004; hz_matrix[4] = 0x004;hz_matrix[5] = 0x000; hz_matrix[6] = 0x004;hz_matrix[7] = 0x004; hz_matrix[8] = 0x004;hz_matrix[9] = 0x004; hz_matrix[10] = 0x000; BadgeDisplay_Write_Screen(hz_matrix,2,2+11); hz_matrix[0] = 0x1fc;hz_matrix[1] = 0x100; hz_matrix[2] = 0x100;hz_matrix[3] = 0x1fc; hz_matrix[4] = 0x000;hz_matrix[5] = 0x004; hz_matrix[6] = 0x004;hz_matrix[7] = 0x004; hz_matrix[8] = 0x004;hz_matrix[9] = 0x000; hz_matrix[10] = 0x1fc; BadgeDisplay_Write_Screen(hz_matrix,13,13+11); hz_matrix[0] = 0x100;hz_matrix[1] = 0x100; hz_matrix[2] = 0x100;hz_matrix[3] = 0x000; hz_matrix[4] = 0x100;hz_matrix[5] = 0x100; hz_matrix[6] = 0x100;hz_matrix[7] = 0x1fc; hz_matrix[8] = 0x000;hz_matrix[9] = 0x004; hz_matrix[10] = 0x004; BadgeDisplay_Write_Screen(hz_matrix,24,24+11); hz_matrix[0] = 0x004;hz_matrix[1] = 0x004; hz_matrix[2] = 0x000;hz_matrix[3] = 0x004; hz_matrix[4] = 0x004;hz_matrix[5] = 0x004; hz_matrix[6] = 0x004;hz_matrix[7] = 0x000; hz_matrix[8] = 0x000;hz_matrix[9] = 0x000; hz_matrix[10] = 0x000; BadgeDisplay_Write_Screen(hz_matrix,35,35+11); } void setup() { BadgeDisplay_Init(); BadgeDisplay_Clear_Screen(); RADIO_init(microbit); RADIO_TX_BitCH(7); RADIO_TX_SETUP(); pinMode(7,INPUT); BadgeDisplay_Init(); BadgeDisplay_Clear_Screen(); } void loop() { led(); while (digitalRead(7)) { BadgeDisplay_Clear_Screen(); BadgeDisplay_hzs("口令正确"); RADIO_TX("charge"); delay(2000); BadgeDisplay_Clear_Screen(); BadgeDisplay_hzs("开始充电……"); delay(60000); BadgeDisplay_Clear_Screen(); } }[/mw_shl_code] 麦昆代码 [mw_shl_code=c,true]#include <DFMicrobit_Radio.h> #include <Microbit_Matrix.h> const uint8_t bitmap_CtCw[5] = {B11111,B10001,B10001,B10001,B11111}; const uint8_t bitmap_pd0k[5] = {B11111,B10001,B10001,B11111,B11111}; const uint8_t bitmap_Lz99[5] = {B11111,B10001,B11111,B11111,B11111}; const uint8_t bitmap_aYWF[5] = {B11111,B11111,B11111,B11111,B11111}; void onRadioReceive(String message) { if ((message == "charge")) { while (1) { MMatrix.show(bitmap_CtCw); delay(500); MMatrix.show(bitmap_pd0k); delay(500); MMatrix.show(bitmap_Lz99); delay(500); MMatrix.show(bitmap_aYWF); delay(500); } } } void setup() { Radio.turnOn(); Radio.setGroup(7); Radio.setCallback(onRadioReceive); } void loop() { digitalWrite(8,HIGH); digitalWrite(12,HIGH); delay(500); digitalWrite(8,LOW); digitalWrite(12,LOW); delay(500); }[/mw_shl_code] 附件 徽章板程序 徽章板程序(编译文件) 【后记】 其实这个项目也可以改成真正的无线充电装置。鉴于手头没有相应器材,就改成了伪无线充电。其实用这个项目来教数字电路或者二进制也不错。通信部分代码也有改进空间。可以改成麦昆收到信号并判断正确后再传送信息给徽章板,徽章板再开始显示“充电中”。这样更保险一些。 总体来说项目有点简陋,各位见笑了。 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed