查看: 506|回复: 0

[2019参赛作品] 【脑洞大赛】麦昆无线充电

[复制链接]
本帖最后由 汤果 于 2019-8-20 15:28 编辑

【介绍】
利用徽章板、神经元模块和麦昆制作一个模拟无线充电的装置。主要用到了 Microbit 的无线通信功能。

为了保证趣味性,特地创设了一个火星历险记的情境。

背景

随着地球资源逐渐枯竭,人们逐渐开始探索宇宙,寻找更合适的栖息地。有一天,麦昆乘着飞船来到了火星。开始了资源探索之旅。


经过一段时间的探查,麦昆发现火星上到处都是环形坑,十分难走。于是没过多久,麦昆的两盏车灯就开始闪烁。这意味着麦昆的能源即将耗尽,需要赶紧去能源补给站充电。

到了补给站,麦昆发现要充电还不是那么容易的一件事。充电站的显示屏上显示着一串神秘的波形,边上还有一个黄色的按钮。


麦昆仔细想了一下,这个按钮肯定就是充电站的电源开关。只要接通后应该就可以充电了。但是按了一下却没有任何反应。那该怎么办呢?大家能帮忙解决这个问题吗?


【准备事项】
材料清单


1x
麦昆: micro:bit教育机器人(麦昆+锂电池板) 链接
1x micro:bit 编程入门开发板 链接
1x 徽章板 链接
1x 数字大按钮模块 黄色 链接
1x BOSON神经元模块
2x 3Pin PH2.0连接线



【制作过程】

步骤1 充电站编程

进入好好搭搭在线编程平台(http://haohaodada.com/new/adminmoban.php),选择顶部菜单的【创作】。
滚动到下面的【U盘下载模式编程】,选择【徽章板】,进入编程页面。(需要登录)


首先编写初始化代码。这里采用了与Microbit进行无线通信的方式,首先要初始化无线通信,并指定发送的频道。

主程序一直在监测数字端口D1是否为高电平。神经元模块会处理按钮的按键信息,如果匹配则会输出高电平。那么就显示“口令正确”,发送消息给麦昆小车:可以充电了。

连线方式如下:徽章板扩展板的D1接口连到神经元模块的输出。按钮接到神经元输入。


一开始的波形图是通过一个函数呈现的。实际上就是画点阵。

代码编写好下载到徽章板即可。

步骤2 麦昆编程
这里要用到无线通信与徽章板进行传输信息。首先需要下载一个补丁。下载地址:http://haohaodada.com/ueditor/php/upload/file/20190809/1565335632539384.zip

首先初始化麦昆。指定与徽章板相同的频道。因为没电的时候车灯闪烁,所以在主程序写一段代码,使得车灯每隔半秒闪烁。
当接收到无线消息后,先判断是否为充电的指令。如果是,则显示充电的动画。

步骤3 测试运行
按下神经元的黑色学习按钮,同时按照一定的节奏按黄色按钮(按照波形)。完成学习后松开所有按钮。测试一下是否能够按照指定接通神经元的电路。如果不行,则调节神经元模块上方蓝色的调节器,使得精度合适。

按照正确的按钮频率测试一下,看看是否能将充电信息传送给麦昆。

【效果演示】



【相关资源】

徽章板代码
[C] 纯文本查看 复制代码
#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();
    }

}


麦昆代码

[C] 纯文本查看 复制代码
#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);
}

附件



徽章板程序
徽章板程序(编译文件)

【后记】
其实这个项目也可以改成真正的无线充电装置。鉴于手头没有相应器材,就改成了伪无线充电。其实用这个项目来教数字电路或者二进制也不错。通信部分代码也有改进空间。可以改成麦昆收到信号并判断正确后再传送信息给徽章板,徽章板再开始显示“充电中”。这样更保险一些。

总体来说项目有点简陋,各位见笑了。

高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2020 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail