3813| 1
|
[项目教程] 【挑战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.舵机*2 5.瓦楞纸(本人使用纸盒,没有3D打印机的苦逼人生) 制作工具:(工具使用注意安全) 1.502 2.剪刀 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控制舵机转动到制定角度。 硬件图 测试程序如下 [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] 0——带功放喇叭模块 1——UART OBLOQ - IoT物联网模块 2——UART OBLOQ - IoT物联网模块 12——舵机1 16——舵机2 连接图如下: 3.结构设计 4.实践视频 附件上传 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed