【脑洞大赛】麦昆无线充电
本帖最后由 汤果 于 2019-8-20 15:28 编辑【介绍】
利用徽章板、神经元模块和麦昆制作一个模拟无线充电的装置。主要用到了 Microbit 的无线通信功能。
为了保证趣味性,特地创设了一个火星历险记的情境。
背景
随着地球资源逐渐枯竭,人们逐渐开始探索宇宙,寻找更合适的栖息地。有一天,麦昆乘着飞船来到了火星。开始了资源探索之旅。
https://makelogimg.dfrobot.com.cn/Fhoqqd5dc8XYTJW3m-bPb1x3-fuV?imageView2/2/w/1600
经过一段时间的探查,麦昆发现火星上到处都是环形坑,十分难走。于是没过多久,麦昆的两盏车灯就开始闪烁。这意味着麦昆的能源即将耗尽,需要赶紧去能源补给站充电。
到了补给站,麦昆发现要充电还不是那么容易的一件事。充电站的显示屏上显示着一串神秘的波形,边上还有一个黄色的按钮。
https://makelogimg.dfrobot.com.cn/FhJPw-FHPyYI12Vz1hca9XI_M3A1?imageView2/2/w/1600
麦昆仔细想了一下,这个按钮肯定就是充电站的电源开关。只要接通后应该就可以充电了。但是按了一下却没有任何反应。那该怎么办呢?大家能帮忙解决这个问题吗?
【准备事项】
材料清单
1x 麦昆: micro:bit教育机器人(麦昆+锂电池板) 链接
1x micro:bit 编程入门开发板 链接
1x 徽章板 链接
1x 数字大按钮模块 黄色 链接
1x BOSON神经元模块
2x 3Pin PH2.0连接线
https://makelogimg.dfrobot.com.cn/Fsh4I1vRZimySTIWBqjlKXg9TY-o?imageView2/2/w/1600
【制作过程】
步骤1 充电站编程
进入好好搭搭在线编程平台(http://haohaodada.com/new/adminmoban.php),选择顶部菜单的【创作】。
https://makelogimg.dfrobot.com.cn/FsCjV9X6MsfzlMqHR2wxwTwK2aBM?imageView2/2/w/1600滚动到下面的【U盘下载模式编程】,选择【徽章板】,进入编程页面。(需要登录)
https://makelogimg.dfrobot.com.cn/FsDyDeuQkD80LRN-uLOQKE-iYIUD?imageView2/2/w/1600
首先编写初始化代码。这里采用了与Microbit进行无线通信的方式,首先要初始化无线通信,并指定发送的频道。
https://makelogimg.dfrobot.com.cn/FreHjUGIW5gXuAS8pB7oZVRUVMLn?imageView2/2/w/1600
主程序一直在监测数字端口D1是否为高电平。神经元模块会处理按钮的按键信息,如果匹配则会输出高电平。那么就显示“口令正确”,发送消息给麦昆小车:可以充电了。
连线方式如下:徽章板扩展板的D1接口连到神经元模块的输出。按钮接到神经元输入。
https://makelogimg.dfrobot.com.cn/FvMfiXkS66fvOAzOu9ae2-z9-pPT?imageView2/2/w/1600
一开始的波形图是通过一个函数呈现的。实际上就是画点阵。
https://makelogimg.dfrobot.com.cn/FtZw-7MgTvRIfvjgQDFbs78gviiv?imageView2/2/w/1600
代码编写好下载到徽章板即可。
步骤2 麦昆编程
这里要用到无线通信与徽章板进行传输信息。首先需要下载一个补丁。下载地址:http://haohaodada.com/ueditor/php/upload/file/20190809/1565335632539384.zip
https://makelogimg.dfrobot.com.cn/Fv8zb6UUOKdbXgqE2B_l1Gto-i3A?imageView2/2/w/1600首先初始化麦昆。指定与徽章板相同的频道。因为没电的时候车灯闪烁,所以在主程序写一段代码,使得车灯每隔半秒闪烁。
https://makelogimg.dfrobot.com.cn/FqWLCYR_uUvdsqO1x9X9AFCbdWme?imageView2/2/w/1600当接收到无线消息后,先判断是否为充电的指令。如果是,则显示充电的动画。
https://makelogimg.dfrobot.com.cn/FsybzF6d-Tkl8qqxQdHwzXOWGH43?imageView2/2/w/1600
步骤3 测试运行
按下神经元的黑色学习按钮,同时按照一定的节奏按黄色按钮(按照波形)。完成学习后松开所有按钮。测试一下是否能够按照指定接通神经元的电路。如果不行,则调节神经元模块上方蓝色的调节器,使得精度合适。
按照正确的按钮频率测试一下,看看是否能将充电信息传送给麦昆。
【效果演示】
https://v.qq.com/x/page/f0915giywsa.html
【相关资源】
徽章板代码
#include "Haoda.h"
#include "Arduino.h"
#include "Wire.h"
#include "Servo.h"
uint16_t hz_matrix;
/*描述该功能...
*/
void led(){
hz_matrix = 0x000;hz_matrix = 0x004;
hz_matrix = 0x004;hz_matrix = 0x004;
hz_matrix = 0x004;hz_matrix = 0x000;
hz_matrix = 0x004;hz_matrix = 0x004;
hz_matrix = 0x004;hz_matrix = 0x004;
hz_matrix = 0x000;
BadgeDisplay_Write_Screen(hz_matrix,2,2+11);
hz_matrix = 0x1fc;hz_matrix = 0x100;
hz_matrix = 0x100;hz_matrix = 0x1fc;
hz_matrix = 0x000;hz_matrix = 0x004;
hz_matrix = 0x004;hz_matrix = 0x004;
hz_matrix = 0x004;hz_matrix = 0x000;
hz_matrix = 0x1fc;
BadgeDisplay_Write_Screen(hz_matrix,13,13+11);
hz_matrix = 0x100;hz_matrix = 0x100;
hz_matrix = 0x100;hz_matrix = 0x000;
hz_matrix = 0x100;hz_matrix = 0x100;
hz_matrix = 0x100;hz_matrix = 0x1fc;
hz_matrix = 0x000;hz_matrix = 0x004;
hz_matrix = 0x004;
BadgeDisplay_Write_Screen(hz_matrix,24,24+11);
hz_matrix = 0x004;hz_matrix = 0x004;
hz_matrix = 0x000;hz_matrix = 0x004;
hz_matrix = 0x004;hz_matrix = 0x004;
hz_matrix = 0x004;hz_matrix = 0x000;
hz_matrix = 0x000;hz_matrix = 0x000;
hz_matrix = 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();
}
}
麦昆代码
#include <DFMicrobit_Radio.h>
#include <Microbit_Matrix.h>
const uint8_t bitmap_CtCw = {B11111,B10001,B10001,B10001,B11111};
const uint8_t bitmap_pd0k = {B11111,B10001,B10001,B11111,B11111};
const uint8_t bitmap_Lz99 = {B11111,B10001,B11111,B11111,B11111};
const uint8_t bitmap_aYWF = {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);
}
附件
无线充电.sb3
徽章板程序
徽章板程序(编译文件)
【后记】
其实这个项目也可以改成真正的无线充电装置。鉴于手头没有相应器材,就改成了伪无线充电。其实用这个项目来教数字电路或者二进制也不错。通信部分代码也有改进空间。可以改成麦昆收到信号并判断正确后再传送信息给徽章板,徽章板再开始显示“充电中”。这样更保险一些。
总体来说项目有点简陋,各位见笑了。
页:
[1]