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

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

[复制链接]
本帖最后由 Topcraz 于 2018-9-4 07:48 编辑

【挑战3】万能DF盒子—学习神器番茄钟
前言】   
DFROBOT的microbit + OBLOQ的挑战赛,现在已经进入第三轮:非凡之旅。比赛的主题为:不限主题,放飞自我,利用micro:bit与OBLOQ物联网技术实现你的一个想法。经过几天的奋战,第n次尝试失败,起初打算做的是用OBLOQ物联网将麦昆变成可远程把玩的神器,奈何屡次的失败,眼看比赛截止时间将至,只好改变战略,集中突破!
【挑战3】万能DF盒子—学习神器番茄钟图14
【介绍】
        对于这次的放飞自我,本次设计《万能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盒子—学习神器番茄钟图13
基本步骤有5个:
决定要完成的任务
设定定时器为 n 分钟(通常为25)
持续工作,直至定时器提示,记一个x
休息3-5分钟
每四个x,休息15-30分钟
【挑战3】万能DF盒子—学习神器番茄钟图12
二.程序设计思路说明
      程序的功能是实现一个番茄钟(番茄工作法定时器),按a键启动25分钟倒计时,每过一分钟显示已经过的分钟数在显示屏上,到25分钟时启动蜂鸣器,按b键停止蜂鸣/停止定时器。需要时再按a键启动计时器。 按a+b键可以改变计时时间,默认25分钟,每按一次加一,最多加到30分钟,到30时后再按变为1。
程序:(按设计说明)
【挑战3】万能DF盒子—学习神器番茄钟图11

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

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

测试程序如下


[mw_shl_code=applescript,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盒子—学习神器番茄钟图7
3.结构设计

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


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


4.实践视频

附件上传
QQ截图20180903170254.png

gada888  版主

发表于 2018-9-4 17:31:14

猛一看,以为种番茄
回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail