【挑战3】万能DF盒子—学习神器番茄钟
本帖最后由 Topcraz 于 2018-9-4 07:48 编辑【挑战3】万能DF盒子—学习神器番茄钟【前言】 DFROBOT的microbit + OBLOQ的挑战赛,现在已经进入第三轮:非凡之旅。比赛的主题为:不限主题,放飞自我,利用micro:bit与OBLOQ物联网技术实现你的一个想法。经过几天的奋战,第n次尝试失败,起初打算做的是用OBLOQ物联网将麦昆变成可远程把玩的神器,奈何屡次的失败,眼看比赛截止时间将至,只好改变战略,集中突破!【介绍】 对于这次的放飞自我,本次设计《万能DF盒子—学习神器番茄钟》作为一名即将开学的准大学生,学习自然是必不可少的,但是像我这样的懒癌和严重拖延症患者,必须要让一只狼在自己的背后追赶才能超越自己,于是小狼横空出世!具体功能如下:1.提供番茄计时功能;2.通过手机端或网页端监控学习状态(和同桌一起使用效果更佳,除非你想要你的父母[表情],女友也可以哟[表情]);3.通过盒子搭载其他传感器或摄像头,满足更多需求;4.**神器,可以互发学习记录截图,让他羡慕你!
【准备事项】
制作材料:1.micro:bit 编程入门开发板2.Micro:Mate—最小的micro:bit多功能I/O扩展板3.Gravity: UART OBLOQ - IoT物联网模块4.带功放喇叭模块5.迷你2自由度云台6.舵机*25.瓦楞纸(本人使用纸盒,没有3D打印机的苦逼人生)制作工具:(工具使用注意安全)1.5022.剪刀3.双面胶和胶带4.螺丝刀前期准备:1.调试好的Easy loT物联网平台(工作间已创建好设备)2.你家的路由器(提前将无线的名字及密码准备好)3.Make Code平台(添加OBLOQ - IoT物联网模块)【制作过程】
一.番茄钟知识储备
<生物学法—番茄钟>
番茄钟,是根据一个瑞典人所写的番茄工作法理论进行开发的一款方便、实用的日程管理软件。番茄工作法是一个时间管理方法,在上世纪八十年代创立,使用一个定时器来分割出25分钟的工作时间和5分钟的休息时间,这些时间段被称为pomodori,意大利语单词 pomodoro(番茄)的复数。
基本步骤有5个:决定要完成的任务设定定时器为 n 分钟(通常为25)持续工作,直至定时器提示,记一个x休息3-5分钟每四个x,休息15-30分钟二.程序设计思路说明
程序的功能是实现一个番茄钟(番茄工作法定时器),按a键启动25分钟倒计时,每过一分钟显示已经过的分钟数在显示屏上,到25分钟时启动蜂鸣器,按b键停止蜂鸣/停止定时器。需要时再按a键启动计时器。 按a+b键可以改变计时时间,默认25分钟,每按一次加一,最多加到30分钟,到30时后再按变为1。
程序:(按设计说明)
程序(+舵机云台)
三.硬件连接与调试
1.舵机测试仪
对于我这种啃老族的学生党来说,舵机测试仪,好吧,没闲钱去买,那就自己DIY一个便可以!我使用Arduino来DIY,基本原理是使用串口输入舵机转动角度发送给arduino,arduino控制舵机转动到制定角度。
硬件图https://mc.dfrobot.com.cn/data/attachment/forum/201809/03/172433bgzktak2zwrkgfex.png
测试程序如下
int i,val;
char a;
boolean display;
#include <Servo.h>
Servo servo1;
void setup()
{
Serial.begin(9600);
servo1.attach(4);//舵機一接pin4
}
void loop()
{
if (Serial.available()){ //如果有数据输入.....
delay(30); //等待30毫秒让所有输入数据从串口传输完毕.....
if (Serial.available() <= 3){ //如果输入数据位数'<=3'.....
while (Serial.available()){ //开始读取数据直到[串口输入缓存被清空]
a = Serial.read(); //读取数据到[数组"a"]
}
display = 1; //数据读取完毕以后'打开'显示输出开关
}
else { //如果输入数据位数'>3'.....
Serial.flush(); //刷新串口输入缓存
}
}
/*======================直接通过串口返回输入数值模块======================
if (display) //如果[显示输出开关]被'打开'则显示[数组"a"]的数据
{
for (i = 0; i <= sizeof(a); i++)
{
Serial.print("a[");
Serial.print(i);
Serial.print("]= ");
Serial.print(a);
Serial.print(" | ");
}
Serial.println();
display = 0; //显示完毕'关闭'显示输出开关
Serial.flush(); //刷新串口输入缓存
for (i = 0; i <= 3; i++) //重置[数组"a"]
{
a = 0;
}
i = 0; //重置"计数变量"
}
//=======================通过加减符号控制舵机增减一度转动=================*/
if (a == 43 && display){
val++;
servo1.write(val);
Serial.println(val);
display = 0; //显示完毕'关闭'显示输出开关
Serial.flush(); //刷新串口输入缓存
for (i = 0; i <= 3; i++) //重置[数组"a"]
{
a = 0;
}
i = 0; //重置"计数变量"
}
if (a == 45 && display){
val--;
servo1.write(val);
Serial.println(val);
display = 0; //显示完毕'关闭'显示输出开关
Serial.flush(); //刷新串口输入缓存
for (i = 0; i <= 3; i++) //重置[数组"a"]
{
a = 0;
}
i = 0; //重置"计数变量"
}
//========================判断及修正输入数据位数模块======================
if (display) //如果[显示输出开关]被'打开'则显示[数组"a"]的数据
{
if (!a){ //如果输入数据为两位数(最后一位空)
if (!a){ //如果输入数据为一位数(最后两位空)
a = a;
a = 48;
a = 48;
}
else {
a = a;
a = a;
a = 48;
}
}
//==============转换变量类型后输出给舵机且通过串口返回结果值==============
for (i=0;i<=3;i++){ //变量类型:char to int (48为0的ASCII)
a -= 48;
}
val = 100*a + 10*a + a;
// Serial.print("val: ");
servo1.write(val);
Serial.println(val);
/* int val2 = random(50); //int型变量加法测试
val += val2;
Serial.print("+");
Serial.print(val2);
Serial.print("=");
Serial.println(val);
*/
display = 0; //显示完毕'关闭'显示输出开关
Serial.flush(); //刷新串口输入缓存
for (i = 0; i <= 3; i++) //重置[数组"a"]
{
a = 0;
}
i = 0; //重置"计数变量"
// val = 0;
}
}2.硬件连接
0——带功放喇叭模块
1——UART OBLOQ - IoT物联网模块
2——UART OBLOQ - IoT物联网模块
12——舵机1
16——舵机2
连接图如下:
3.结构设计
4.实践视频
http://player.youku.com/player.php/sid/XMzgwOTUzMzIyNA==/v.swf
附件上传 猛一看,以为种番茄
页:
[1]