迷你强 发表于 2013-10-20 17:47:38

基于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:39

贩子好久没发教程了,呵呵。
布线感觉有些影响可爱的模块啦

迷你强 发表于 2013-10-20 20:16:25

幻生幻灭 发表于 2013-10-20 19:54 static/image/common/back.gif
贩子好久没发教程了,呵呵。
布线感觉有些影响可爱的模块啦

布线要思考。。。。。可行的方案不多

幻生幻灭 发表于 2013-10-20 22:39:58

迷你强 发表于 2013-10-20 20:16 static/image/common/back.gif
布线要思考。。。。。可行的方案不多

杜邦线 公对公,仅供参考。:lol

isilcala 发表于 2013-10-21 00:14:30

可充电的2032?好像电压比普通2032要高一点哦?

这怎么充电呢?

迷你强 发表于 2013-10-21 08:31:15

isilcala 发表于 2013-10-21 00:14 static/image/common/back.gif
可充电的2032?好像电压比普通2032要高一点哦?

这怎么充电呢?

充电系统还在测试中,我的想法是,通过计算好的电阻,从arduino 5V口分压出4.1V 20MA的电流进行充电,估计就OK了、、、、

isilcala 发表于 2013-10-21 12:41:25

迷你强 发表于 2013-10-21 08:31 static/image/common/back.gif
充电系统还在测试中,我的想法是,通过计算好的电阻,从arduino 5V口分压出4.1V 20MA的电流进行充电,估计 ...

这个……充电时间也得自己计算和手动控制咯

迷你强 发表于 2013-10-24 10:00:34

isilcala 发表于 2013-10-21 12:41 static/image/common/back.gif
这个……充电时间也得自己计算和手动控制咯

最新是选择使用一个充电管理芯片,不过我准备些一个arduino用的电阻充电管理系统,程序+IO口实现精确充电测量

isilcala 发表于 2013-10-24 13:36:03

迷你强 发表于 2013-10-24 10:00 static/image/common/back.gif
最新是选择使用一个充电管理芯片,不过我准备些一个arduino用的电阻充电管理系统,程序+IO口实现精确充电 ...

期待教程贴……

williamwt 发表于 2014-1-13 00:10:39

为什么这个程序我跑了十秒左右,就死掉了,串口和屏幕都不动了

m33spiral 发表于 2014-1-13 17:03:18

ds3231 初始化部分的boolCentury=false;是啥意思

水镜 发表于 2014-3-15 21:47:37

屏会闪吗?

czkala 发表于 2014-4-24 15:50:13

改成24小时模式是把Clock.setClockMode(true)改成Clock.setClockMode(false)吗?我怎么返回值差5个小时呢?

czkala 发表于 2014-4-24 16:26:40

还有一个,ds3231 初始化部分的boolCentury=false;应该是true吧:我查了一下,ms 2000年以后应该是true才是。

迷你强 发表于 2014-4-26 12:17:03

:L默默飘过
页: [1] 2
查看完整版本: 基于OCROBOT Easy的arduino桌面时钟小作品