4463浏览
查看: 4463|回复: 1

[项目教程] 【挑战3】万能DF盒子—学习神器番茄钟

[复制链接]
【挑战3】万能DF盒子—学习神器番茄钟
前言】   
DFROBOT的microbit + OBLOQ的挑战赛,现在已经进入第三轮:非凡之旅。比赛的主题为:不限主题,放飞自我,利用micro:bit与OBLOQ物联网技术实现你的一个想法。经过几天的奋战,第n次尝试失败,起初打算做的是用OBLOQ物联网将麦昆变成可远程把玩的神器,奈何屡次的失败,眼看比赛截止时间将至,只好改变战略,集中突破!
【挑战3】万能DF盒子—学习神器番茄钟图6
【介绍】
        对于这次的放飞自我,本次设计《万能DF盒子—学习神器番茄钟》作为一名即将开学的准大学生,学习自然是必不可少的,但是像我这样的懒癌和严重拖延症患者,必须要让一只狼在自己的背后追赶才能超越自己,于是小狼横空出世!
具体功能如下:
1.提供番茄计时功能;
2.通过手机端或网页端监控学习状态(和同桌一起使用效果更佳,除非你想要你的父母[表情],女友也可以哟[表情]);
3.通过盒子搭载其他传感器或摄像头,满足更多需求;
4.**神器,可以互发学习记录截图,让他羡慕你!

【准备事项】
制作材料:
1.micro:bit 编程入门开发板
2.Micro:Mate—最小的micro:bit多功能I/O扩展板
3.Gravity: UART OBLOQ - IoT物联网模块
4.带功放喇叭模块
5.迷你2自由度云台
6.舵机*2
5.瓦楞纸(本人使用纸盒,没有3D打印机的苦逼人生)
制作工具:(工具使用注意安全)
1.502  2.剪刀  3.双面胶和胶带  4.螺丝刀
前期准备:
1.调试好的Easy loT物联网平台(工作间已创建好设备)
2.你家的路由器(提前将无线的名字及密码准备好)
3.Make Code平台(添加OBLOQ - IoT物联网模块)
【制作过程】
一.番茄钟知识储备
<生物学法—番茄钟>
       番茄钟,是根据一个瑞典人所写的番茄工作法理论进行开发的一款方便、实用的日程管理软件。番茄工作法是一个时间管理方法,在上世纪八十年代创立,使用一个定时器来分割出25分钟的工作时间和5分钟的休息时间,这些时间段被称为pomodori,意大利语单词 pomodoro(番茄)的复数。
【挑战3】万能DF盒子—学习神器番茄钟图1
基本步骤有5个:
决定要完成的任务
设定定时器为 n 分钟(通常为25)
持续工作,直至定时器提示,记一个x
休息3-5分钟
每四个x,休息15-30分钟
【挑战3】万能DF盒子—学习神器番茄钟图2
二.程序设计思路说明
      程序的功能是实现一个番茄钟(番茄工作法定时器),按a键启动25分钟倒计时,每过一分钟显示已经过的分钟数在显示屏上,到25分钟时启动蜂鸣器,按b键停止蜂鸣/停止定时器。需要时再按a键启动计时器。 按a+b键可以改变计时时间,默认25分钟,每按一次加一,最多加到30分钟,到30时后再按变为1。
程序:(按设计说明)
【挑战3】万能DF盒子—学习神器番茄钟图3

程序(+舵机云台)
【挑战3】万能DF盒子—学习神器番茄钟图4

三.硬件连接与调试
1.舵机测试仪
对于我这种啃老族的学生党来说,舵机测试仪,好吧,没闲钱去买,那就自己DIY一个便可以!我使用Arduino来DIY,基本原理是使用串口输入舵机转动角度发送给arduino,arduino控制舵机转动到制定角度。
【挑战3】万能DF盒子—学习神器番茄钟图7
硬件图
【挑战3】万能DF盒子—学习神器番茄钟图5

测试程序如下
[mw_shl_code=c,true]int i,val;

char a[3];

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[i++] = 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[0] == 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[0] == 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[2]){ //如果输入数据为两位数(最后一位空)

if (!a[1]){ //如果输入数据为一位数(最后两位空)

a[2] = a[0];

a[1] = 48;

a[0] = 48;

}

else {

a[2] = a[1];

a[1] = a[0];

a[0] = 48;

}

}

//==============转换变量类型后输出给舵机且通过串口返回结果值==============

for (i=0;i<=3;i++){ //变量类型:char to int (48为0的ASCII)

a -= 48;

}

val = 100*a[0] + 10*a[1] + a[2];

// 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;

}

}[/mw_shl_code]


2.硬件连接
0——带功放喇叭模块
1——UART OBLOQ - IoT物联网模块
2——UART OBLOQ - IoT物联网模块
12——舵机1
16——舵机2
连接图如下:
【挑战3】万能DF盒子—学习神器番茄钟图8


【挑战3】万能DF盒子—学习神器番茄钟图9
3.结构设计

【挑战3】万能DF盒子—学习神器番茄钟图10

【挑战3】万能DF盒子—学习神器番茄钟图11
【挑战3】万能DF盒子—学习神器番茄钟图12
【挑战3】万能DF盒子—学习神器番茄钟图13
4.实践视频





附件上传
下载附件挑战3.zip



gada888  版主

发表于 2018-9-27 15:13:04

我看成了钟番茄
回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail