基于OCROBOT Easy的arduino桌面时钟小作品
本帖最后由 迷你强 于 2015-12-20 16:59 编辑为了体现以下OCROBOT Easy的用途,我们今天来展示以下我自己用各种现成模块搭建的一个时钟小作品。本作品目前还很不完善,可以增加各种扩展,比如闹钟,网络提醒等,需要大家自己去探索,去玩,仅仅是举例子,嘿嘿。
我们需要用到的材料:
芯片忘记放进去拍了{:soso_e149:}
清单如下
名称 数量
组合面包板套装 1套
ocrobot Easy arduino1个
微型面包板 1个
软跳线1捆
时钟模块1个
ocrobot 12864 OLED 显示屏(I2C) 一块
2032简易电池供电系统1套
本教程需要用到的库文件 U8GLIB请提前将库文件下载好,安装好
我们已经看到了上面的零件列表,都是很常见的东西,另外,你的mangoII板子也是必须品(或者arduinoUNO),因为我们会利用arduino板做ISP下载器,来给Easy控制器下载程序(毕竟它省掉了USB部分不是么?),电池系统如果觉得不好可以选择2节AAA电池的电池盒供电,也是提供的3V电源。
首先我们要对Easy下载程序,如果看过我之前帖子的朋友可能会记得下载电路,非常的简单,看下图:
http://image.geek-workshop.com/forum/201310/17/115315s4v93vezv9495e34.png
下载需要使用mangoII作为ISP下载器使用所以我们需要将IDE中“文件-示例-arduinoISP”程序下载进mangoII板里,然后再将板卡选项选择到“OCROBOT Easy ARDUINO (8M,3.3V) ATMEGA328p”,确认COM口号无误,将编程器选项选择到“arduino as ISP” 然后将下面的程序复制进去,点击“文件-使用编程器下载”就能够完成将程序下载到Easy
//=======调用U8GLIB液晶屏驱动库=====
#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);
//=======调用DS3231时钟驱动库======
#include <DS3231.h>
#include <Wire.h>
//========定义时钟需要的各种变量========
DS3231 Clock;
bool Century=false;
bool h12;
bool PM;
byte ADay, AHour, AMinute, ASecond, ABits;
bool ADy, A12h, Apm;
int second,minute,hour,date,month,year,temperature;
void setup(void) {
Clock.setClockMode(true);
}
void loop(void) {
//=======读取时钟的各种中值,存入对应变量========
second=Clock.getSecond(); //秒
minute=Clock.getMinute(); //分
hour=Clock.getHour(h12, PM); //小时 (分上午和下午模式)
date=Clock.getDate(); //日
month=Clock.getMonth(Century); //月
year=Clock.getYear(); //年(仅2位)
temperature=Clock.getTemperature(); //温度(正负2-3摄氏度误差,温度仅供参考)
//======开始显示==========
u8g.firstPage();
do {
draw();
} while( u8g.nextPage() );
}
//======定义的显示模式======
void draw(void) {
u8g.setPrintPos(0, 45); //定义显示位置 横向起始位置0 纵向45
if(PM==0) //判断变量PM返回值 0就显示AM1就显示PM
{
u8g.print("AM");
}else
{u8g.print("PM");}
u8g.setFont(u8g_font_freedoomr25n); //设定字体(具体请参看 U8GLIB google code页面,大量字体可选)
u8g.print(hour); //输出小时的值
u8g.print(":"); //显示一个冒号
u8g.print(minute); //显示分钟的值
u8g.setFont(u8g_font_freedoomr10r);//调整显示字体
u8g.print(":"); //再显示冒号
u8g.print(second); //显示秒
}
然后我们拆掉上面的电路,单独取出mangoII板子,并且拿出时钟模块,我们要给时钟模块进行初始化,配置其时间,请先检查是否已经将IDE中的板卡选择回ARDUINO UNO!,请将下面的程序根据自己的时间进行调整后下载到arduino。先来看电路连接图
模块暂时没有绘制,找个差不多的图替代, 大家看看好了, 将电源和GND接好,将SDA接到A4 SCL接到A5,即可,然后我们将程序下载进去
//调用DS3231库与i2c驱动库
#include <DS3231.h>
#include <Wire.h>
//初始化ds3231以及所需要的变量
DS3231 Clock;
bool Century=false;
bool h12;
bool PM;
byte ADay, AHour, AMinute, ASecond, ABits;
bool ADy, A12h, Apm;
byte year, month, date, DoW, hour, minute, second;
void setup() {
// 初始化i2c库
Wire.begin();
Clock.setSecond(50);//配置秒
Clock.setMinute(46);//配置分钟
Clock.setHour(14);//配置小时(24小时制)
Clock.setDoW(7); //配置星期
Clock.setDate(20);//配置日
Clock.setMonth(10);//配置月
Clock.setYear(13);//配置年 (仅最后两位)
/*
将时间按照要求填好将程序下载到arduino板子中即可完成时间配置,误差个几秒就装作不知道好了。
*/
}
void loop() {
}
下载完成后时间即校准完毕,我们拆掉电路来搭建最后的完成品(时钟模块断电后依旧会利用所配的电池运行,所以断电无妨)。
依照下面的图进行搭建最终电路
图有点丑,不过意思到了,就是将所有模块的SCL接到A5SDA接到A4 ,其中需要注意的是Easy的供电数字端是由VCC供电,模拟端是由AVCC供电,我们的IO口使用A4 A5,所以我们要对AVCC进行供电
实物组装图如下
好了,大家的时钟应该走动了
目前2032供电系统依旧在做稳定性测试,目前的数据是一颗可以给系统提供1个小时的能量,之后就会电力不足,需要重新充电。如果配合可靠的能量节约技术,应该能提高系统待机时间~~~
本实验略显复杂,大家需仔细研究才能弄清楚步骤,有任何问题,回帖提问即可,我会逐步完善内容。 贩子好久没发教程了,呵呵。
布线感觉有些影响可爱的模块啦 幻生幻灭 发表于 2013-10-20 19:54 static/image/common/back.gif
贩子好久没发教程了,呵呵。
布线感觉有些影响可爱的模块啦
布线要思考。。。。。可行的方案不多 迷你强 发表于 2013-10-20 20:16 static/image/common/back.gif
布线要思考。。。。。可行的方案不多
杜邦线 公对公,仅供参考。:lol 可充电的2032?好像电压比普通2032要高一点哦?
这怎么充电呢? isilcala 发表于 2013-10-21 00:14 static/image/common/back.gif
可充电的2032?好像电压比普通2032要高一点哦?
这怎么充电呢?
充电系统还在测试中,我的想法是,通过计算好的电阻,从arduino 5V口分压出4.1V 20MA的电流进行充电,估计就OK了、、、、 迷你强 发表于 2013-10-21 08:31 static/image/common/back.gif
充电系统还在测试中,我的想法是,通过计算好的电阻,从arduino 5V口分压出4.1V 20MA的电流进行充电,估计 ...
这个……充电时间也得自己计算和手动控制咯 isilcala 发表于 2013-10-21 12:41 static/image/common/back.gif
这个……充电时间也得自己计算和手动控制咯
最新是选择使用一个充电管理芯片,不过我准备些一个arduino用的电阻充电管理系统,程序+IO口实现精确充电测量 迷你强 发表于 2013-10-24 10:00 static/image/common/back.gif
最新是选择使用一个充电管理芯片,不过我准备些一个arduino用的电阻充电管理系统,程序+IO口实现精确充电 ...
期待教程贴…… 为什么这个程序我跑了十秒左右,就死掉了,串口和屏幕都不动了 ds3231 初始化部分的boolCentury=false;是啥意思 屏会闪吗? 改成24小时模式是把Clock.setClockMode(true)改成Clock.setClockMode(false)吗?我怎么返回值差5个小时呢? 还有一个,ds3231 初始化部分的boolCentury=false;应该是true吧:我查了一下,ms 2000年以后应该是true才是。 :L默默飘过
页:
[1]
2