回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

【暖冬行动】暖手宝充电管家 简单

头像 汤果 2020.11.29 659 0

【项目介绍】

最近突如其来的降温让我们马上从夏天转到冬天。像我这样日常手脚冰冷的人通常要靠电热水袋续命。然而每年都会有电热水袋爆炸的新闻出现。有一些是因为质量问题,有一些是使用不当。比较常见的情况就是一直充电忘记拔掉电源。因此我设计了一款暖手宝充电管家,防止过度充电,时间到了自动断电,消除隐患。

project-image

【功能介绍】

基础功能:快速充电,按A键充电5分钟,时间到自动断电。按B键可以一键停止充电。

拓展功能:手机App远程控制充电/断电。定时充电,自定义设置充电时间。

【作品演示】

材料清单

  • 掌控板编程入门学习主控板 X1 链接
  • micro:bit掌控I/O扩展板 X1 链接
  • Gravity: 简易继电器模块 X1 链接

【制作过程】

步骤1 连接设备

设备连接很简单,将简易继电器接到扩展板 P0 引脚,将充电宝接到简易继电器 VIN 接口,VOUT 接口接暖手宝(图中用充电灯代替)。

注意:掌控板朝向 PYTHON 金手指方向。

project-image

步骤2 创建Blynk项目

打开 Blynk App,创建一个项目,名叫“暖手宝充电管家”。选择设备为“ESP32 Dev Board”,连接方式选择“Wi-Fi”。

project-image

点击项目空白处,在工具箱中选择“Styled Button”和“Timer”。调整为合适大小并放在适当的位置。

project-image

点击按钮,修改名称。选择虚拟引脚 V0 作为输出,并将按钮状态的文字修改为“关”和“开”。

project-image

点击计时器,修改名称。选择虚拟引脚 V1 作为输出。

project-image

完成后效果如下:

project-image

步骤3 加载扩展

打开 Mind+,切换为“上传模式”,选择“扩展”按钮,添加“掌控板”为主控板。

project-image

选择“用户库”,搜索“blynk”,加载“Blynk 物联网”用户库。

project-image

步骤4 编写代码

因为用到了Blynk,所以要先连接网络,输入Blynk的授权码。授权码会发送到你的Blynk账户绑定的邮箱,也可以在Blynk项目页面获取。为了提升用户体验,程序开始的时候在屏幕上显示使用说明。

project-image

接下来写基础部分代码。这个比较简单,就是按A键充电5分钟后断开。控制继电器开关即可。按B键直接断开继电器,设置低电平。

project-image

虚拟引脚V0对应的是App上的充电开关。当用户在App上点按开关后,我们需要判断应该打开继电器还是关闭继电器。

project-image

V1虚拟引脚对应的是计时器,也就是定时开关。定时开关会在开始时间打开开关,即由“0”变为“1”,结束时间将“1”变为“0”。这部分代码基本与虚拟引脚V0一致。不同的地方是,我们需要向开关引脚 V0 传送一次数据。如果不发送数据的话,那么充电时开关依旧显示关闭状态,无法与充电状态同步。

project-image

步骤5 测试运行

将代码上传到掌控板,测试程序是否和预期效果一致。

project-image

【总结】

项目基本功能均已实现。原本想控制手头的暖手宝的,但查阅继电器参数后发现最大支持30V,便只好放弃,改用充电灯代替。原理是一致的。

代码
/*!
 * MindPlus
 * mpython
 *
 */
#include <WiFi.h>
#include <MPython.h>
#include <WiFiClient.h>
#define BLYNK_PRINT Serial
#include <BlynkSimpleEsp32.h>
#include <WidgetRTC.h>
// 函数声明
void onButtonAPressed();
void onButtonBPressed();


// 主程序开始
void setup() {
	mPython.begin();
	Serial.begin(9600);
	Blynk.connectWiFi("你的无线名称", "你的无线密码");
	Blynk.config("你的授权码", IPAddress(116,62,49,166), 8080);
	buttonA.setPressedCallback(onButtonAPressed);
	buttonB.setPressedCallback(onButtonBPressed);
	display.setCursor(20, 0);
	display.print("暖手宝充电管家");
	display.setCursor(18, 34);
	display.print("按A键充电5分钟");
	display.setCursor(22, 48);
	display.print("按B键停止充电");
}
void loop() {
	Blynk.run();
}


// 事件回调函数
void onButtonAPressed() {
	display.setCursor(40, 18);
	display.print("正在充电");
	digitalWrite(P0, HIGH);
	delay(300000);
	display.setCursor(40, 18);
	display.print("充电结束");
	digitalWrite(P0, LOW);
}
void onButtonBPressed() {
	display.setCursor(40, 18);
	display.print("停止充电");
	digitalWrite(P0, LOW);
}
 BLYNK_WRITE(V0) {
	if ((param[0].asFloat()==1)) {
		display.setCursor(40, 18);
		display.print("正在充电");
		digitalWrite(P0, HIGH);
	}
	else if ((param[0].asFloat()==0)) {
		display.setCursor(40, 18);
		display.print("充电结束");
		digitalWrite(P0, LOW);
	}
}
 BLYNK_WRITE(V1) {
	if ((param[0].asFloat()==1)) {
		display.setCursor(40, 18);
		display.print("正在充电");
		Blynk.virtualWrite(V0, 1);
		digitalWrite(P0, HIGH);
	}
	else if ((param[0].asFloat()==0)) {
		display.setCursor(40, 18);
		display.print("充电结束");
		Blynk.virtualWrite(V0, 0);
		digitalWrite(P0, LOW);
	}
}

评论

user-avatar