极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 53038|回复: 24

基于OCROBOT Easy的arduino桌面时钟小作品

[复制链接]
发表于 2013-10-20 17:47:38 | 显示全部楼层 |阅读模式
本帖最后由 迷你强 于 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下载程序,如果看过我之前帖子的朋友可能会记得下载电路,非常的简单,看下图:


下载需要使用mangoII作为ISP下载器使用所以我们需要将IDE中“文件-示例-arduinoISP”程序下载进mangoII板里,然后再将板卡选项选择到“OCROBOT Easy ARDUINO (8M,3.3V) ATMEGA328p”,确认COM口号无误,将编程器选项选择到“arduino as ISP” 然后将下面的程序复制进去,点击“文件-使用编程器下载”就能够完成将程序下载到Easy

  1. //=======调用U8GLIB液晶屏驱动库=====
  2. #include "U8glib.h"
  3. U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);
  4. //=======调用DS3231时钟驱动库======
  5. #include <DS3231.h>
  6. #include <Wire.h>


  7. //========定义时钟需要的各种变量========
  8. DS3231 Clock;
  9. bool Century=false;
  10. bool h12;
  11. bool PM;
  12. byte ADay, AHour, AMinute, ASecond, ABits;
  13. bool ADy, A12h, Apm;
  14. int second,minute,hour,date,month,year,temperature;


  15. void setup(void) {


  16.   Clock.setClockMode(true);

  17. }

  18. void loop(void) {

  19. //=======读取时钟的各种中值,存入对应变量========
  20.   
  21.   second=Clock.getSecond();              //秒
  22.   minute=Clock.getMinute();              //分
  23.   hour=Clock.getHour(h12, PM);           //小时 (分上午和下午模式)   
  24.   date=Clock.getDate();                   //日
  25.   month=Clock.getMonth(Century);          //月
  26.   year=Clock.getYear();                      //年(仅2位)
  27.   temperature=Clock.getTemperature();         //温度  (正负2-3摄氏度误差,温度仅供参考)


  28. //======开始显示==========
  29.   u8g.firstPage();                             
  30.   do {
  31.     draw();
  32.   } while( u8g.nextPage() );
  33.   

  34. }


  35. //======定义的显示模式======
  36. void draw(void) {
  37.   u8g.setPrintPos(0, 45);      //定义显示位置 横向起始位置0 纵向45
  38.   if(PM==0)                     //判断变量PM返回值 0就显示AM  1就显示PM
  39.   {
  40.   u8g.print("AM");
  41.   }else
  42. {u8g.print("PM");}
  43.   u8g.setFont(u8g_font_freedoomr25n); //设定字体(具体请参看 U8GLIB google code页面,大量字体可选)
  44.   u8g.print(hour);                    //输出小时的值
  45.   u8g.print(":");                        //显示一个冒号
  46.   u8g.print(minute);                //显示分钟的值
  47.   u8g.setFont(u8g_font_freedoomr10r);  //调整显示字体
  48.   u8g.print(":");                         //再显示冒号
  49.   u8g.print(second);                       //显示秒

  50. }
复制代码




然后我们拆掉上面的电路,单独取出mangoII板子,并且拿出时钟模块,我们要给时钟模块进行初始化,配置其时间,请先检查是否已经将IDE中的板卡选择回ARDUINO UNO!,请将下面的程序根据自己的时间进行调整后下载到arduino。先来看电路连接图



模块暂时没有绘制,找个差不多的图替代, 大家看看好了, 将电源和GND接好,将SDA接到A4 SCL接到A5,即可,然后我们将程序下载进去

  1. //调用DS3231库与i2c驱动库
  2. #include <DS3231.h>
  3. #include <Wire.h>
  4. //初始化ds3231以及所需要的变量
  5. DS3231 Clock;
  6. bool Century=false;
  7. bool h12;
  8. bool PM;
  9. byte ADay, AHour, AMinute, ASecond, ABits;
  10. bool ADy, A12h, Apm;

  11. byte year, month, date, DoW, hour, minute, second;

  12. void setup() {
  13.         // 初始化i2c库
  14.         Wire.begin();
  15.         Clock.setSecond(50);//配置秒
  16.         Clock.setMinute(46);//配置分钟
  17.         Clock.setHour(14);  //配置小时(24小时制)
  18.         Clock.setDoW(7);    //配置星期
  19.         Clock.setDate(20);  //配置日
  20.         Clock.setMonth(10);  //配置月
  21.         Clock.setYear(13);  //配置年 (仅最后两位)
  22.         /*
  23.         将时间按照要求填好将程序下载到arduino板子中即可完成时间配置,误差个几秒就装作不知道好了。
  24.         */
  25. }
  26. void loop() {
  27. }
复制代码


下载完成后时间即校准完毕,我们拆掉电路来搭建最后的完成品(时钟模块断电后依旧会利用所配的电池运行,所以断电无妨)。


依照下面的图进行搭建最终电路



图有点丑,不过意思到了,就是将所有模块的SCL接到A5  SDA接到A4 ,其中需要注意的是Easy的供电数字端是由VCC供电,模拟端是由AVCC供电,我们的IO口使用A4 A5,所以我们要对AVCC进行供电

实物组装图如下


好了,大家的时钟应该走动了

目前2032供电系统依旧在做稳定性测试,目前的数据是一颗可以给系统提供1个小时的能量,之后就会电力不足,需要重新充电。如果配合可靠的能量节约技术,应该能提高系统待机时间~~~

本实验略显复杂,大家需仔细研究才能弄清楚步骤,有任何问题,回帖提问即可,我会逐步完善内容。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2013-10-20 19:54:39 | 显示全部楼层
贩子好久没发教程了,呵呵。
布线感觉有些影响可爱的模块啦
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-20 20:16:25 | 显示全部楼层
幻生幻灭 发表于 2013-10-20 19:54
贩子好久没发教程了,呵呵。
布线感觉有些影响可爱的模块啦

布线要思考。。。。。可行的方案不多
回复 支持 反对

使用道具 举报

发表于 2013-10-20 22:39:58 | 显示全部楼层
迷你强 发表于 2013-10-20 20:16
布线要思考。。。。。可行的方案不多

杜邦线 公对公,仅供参考。
回复 支持 反对

使用道具 举报

发表于 2013-10-21 00:14:30 | 显示全部楼层
可充电的2032?好像电压比普通2032要高一点哦?

这怎么充电呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-21 08:31:15 | 显示全部楼层
isilcala 发表于 2013-10-21 00:14
可充电的2032?好像电压比普通2032要高一点哦?

这怎么充电呢?

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

使用道具 举报

发表于 2013-10-21 12:41:25 | 显示全部楼层
迷你强 发表于 2013-10-21 08:31
充电系统还在测试中,我的想法是,通过计算好的电阻,从arduino 5V口分压出4.1V 20MA的电流进行充电,估计 ...

这个……充电时间也得自己计算和手动控制咯
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-24 10:00:34 | 显示全部楼层
isilcala 发表于 2013-10-21 12:41
这个……充电时间也得自己计算和手动控制咯

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

使用道具 举报

发表于 2013-10-24 13:36:03 | 显示全部楼层
迷你强 发表于 2013-10-24 10:00
最新是选择使用一个充电管理芯片,不过我准备些一个arduino用的电阻充电管理系统,程序+IO口实现精确充电 ...

期待教程贴……
回复 支持 反对

使用道具 举报

发表于 2014-1-13 00:10:39 | 显示全部楼层
为什么这个程序我跑了十秒左右,就死掉了,串口和屏幕都不动了
回复 支持 反对

使用道具 举报

发表于 2014-1-13 17:03:18 | 显示全部楼层
ds3231 初始化部分的bool  Century=false;是啥意思
回复 支持 反对

使用道具 举报

发表于 2014-3-15 21:47:37 | 显示全部楼层
屏会闪吗?
回复 支持 反对

使用道具 举报

发表于 2014-4-24 15:50:13 | 显示全部楼层
改成24小时模式是把Clock.setClockMode(true)改成Clock.setClockMode(false)吗?我怎么返回值差5个小时呢?
回复 支持 反对

使用道具 举报

发表于 2014-4-24 16:26:40 | 显示全部楼层
还有一个,ds3231 初始化部分的bool  Century=false;应该是true吧:我查了一下,ms 2000年以后应该是true才是。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-26 12:17:03 | 显示全部楼层
默默飘过
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 21:29 , Processed in 0.046426 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表