YFROBOT创客社区

标题: arduino 语音报时时钟制作!DS1302时钟模块使用,IIC LCD1602显示! [打印本页]

作者: AllBlue    时间: 2015-8-13 10:28
标题: arduino 语音报时时钟制作!DS1302时钟模块使用,IIC LCD1602显示!
本帖最后由 AllBlue 于 2017-1-6 19:29 编辑

arduino 语音报时时钟制作!

arduino UNO+DS1302+lcd1602+OTP语音芯片+8欧0.5W喇叭 制作整点报时时钟!!
准备物品:
       控制板:arduino UNO
       液晶显示:IIC LCD1602
       语音芯片:OTP定制语音芯片 - NY3P系列
       喇叭:8Ω0.5W小喇叭
       时钟模块:DS1302时钟芯片

IIC LCD1602之前的帖子介绍过用法:点击回看

这里我们介绍下DS1302时钟芯片和 NY3P定制语言芯片的基本用法!

1、DS1302时钟芯片
简介:DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。百度百科详细介绍

典型应用及引脚图:
[attach]1074[/attach]

这里要说一下的是:
* DS1302具有双电源,芯片引脚Vcc2为主电源,Vcc1为后备电源;在主电源断电的情况下,有后背电源的支持,芯片继续工作!如何选择电源呢?DS1302会由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。

* 晶振使用的是32.768kHz,它的好坏直接关系到时间的准确度,都说1302准确度不高,找个时间,买个1307跑一次长的,对比看看时间都有多少误差!

手册下载:[attach]1075[/attach]
库文件下载:[attach]1076[/attach]
库文件中有两个例程,很好的展示了库的使用,使用前可以先研究下!

2、NY3P 定制语言芯片
该芯片为OTP(One Time Programmable) 语音芯片      OTP(One Time Programable)是指一次性可编程语音芯片,语音只能烧写一次,适合应用在不需要修改语音、语音长度短的场合,从放音的长度上可以分为10秒、21秒、42秒、85秒、170秒、340秒。
语音芯片引脚图:
[attach]1077[/attach]

语音芯片与UNO电路连接:
[attach]1078[/attach]

语音芯片的具体语音内容看下图:
[attach]1079[/attach]

控制方式也很简单,I/O口直接发送脉冲,即可调用相应地址的语音!当然只适合短语音且不需要经常更改的场合!
下面是arduino驱动例程中的主要函数:
[C] 纯文本查看 复制代码
void Broadcast(uint8_t band) {
  digitalWrite(rst, HIGH);
  delayMicroseconds(200);
  digitalWrite(rst, LOW);
  delayMicroseconds(200);
  int playBand = band;
  while (band > 0) {
    digitalWrite(data, HIGH);
    delayMicroseconds(100);
    digitalWrite(data, LOW);
    delayMicroseconds(100);
    band--;
  }
  delay(interval * VoiceNum[playBand - 1]);
}


其中 interval 和VoiceNum[]为常量,之前定义好的:
[C] 纯文本查看 复制代码
//经过测试: 400ms*xx为最佳间隔时间
//例如: 0 + delay(400*1);  现在时刻北京时间 + delay(400*4.5); 具体值见数组:VoiceNum
#define interval 400
const float VoiceNum[32] = {
  1, 1, 1, 1, 1, 1, 1, 1,
  1, 1, 1, 1, 1, 1, 1, 1,
  1, 1, 1.5, 4.5, 1, 1.5, 1, 1.5,
  2, 2, 2, 3, 2, 3, 4.5, 4.5
};


卖家给的用户手册:[attach]1080[/attach]
arduino驱动语音芯片例程:[attach]1081[/attach]

---------------------------------------------------------------------分隔线--------------------------------------------------------------

下面进入正题!元件模块单独都会使用了,下面就要将他们整合起来!让时间“飞起来”!!!
arduino程序下载:[attach]1082[/attach]
根据程序引脚定义连接电路,引脚不固定,你可以根据实际情况定义引脚连接电路:
[C++] 纯文本查看 复制代码
const int kCePin   = 5;     // D5  - DS1302 Chip Enable
const int kIoPin   = 6;     // D6  - DS1302 Input/Output
const int kSclkPin = 7;     // D7  - DS1302 Serial Clock
const int busy = A0;        // A0  - 语音芯片 busy引脚
const int data = A1;        // A1  - 语音芯片 data引脚
const int rst = A2;         // A2  - 语音芯片 reset引脚

程序实现以下功能:
1、串口调整时间,串口直接发送数据,校准时间,数据格式 -  "year,month,date, hour,minutes,seconds,day"
例如:"2015,8,13,10,50,50,5" 最后的5表示星期四  ,day对应关系:
     Sunday = 1,   Monday = 2, Tuesday = 3, Wednesday = 4,  Thursday = 5,  Friday = 6, Saturday  = 7
2、语音整点报时

程序只简答实现时钟功能,你还可以增加,白天报时,晚间不报时!定时闹钟等等!!
赶紧动手制作自己的小钟吧!

马上补拍个简单的视频,整点给大家报个时~~

视频见一楼~~~




作者: AllBlue    时间: 2015-8-14 08:05
视频地址:http://v.youku.com/v_show/id_XMTMwODczNDkyMA==.html
[vedio=375,500]https://player.youku.com/embed/XMTMwODczNDkyMA==[/vedio]

作者: hero_sun    时间: 2016-4-9 15:40
厉害!厉害!
作者: 林雨天心    时间: 2019-1-10 16:04
下载一下,试试能不能用
作者: 林雨天心    时间: 2019-1-26 09:38
您好,我编译了您下载包里的程序,但是有多处显示未定义,请问有稍成熟一些的例程吗
作者: AllBlue    时间: 2019-1-26 13:08
林雨天心 发表于 2019-1-26 09:38
您好,我编译了您下载包里的程序,但是有多处显示未定义,请问有稍成熟一些的例程吗

例程我都运行过没问题的,你下载了程序多出显示未定义可能是库没添加。如果库添加了还出现可以私信我或加我qq2912630748。

作者: 大鱼    时间: 2019-10-30 12:53
学习学习,想改成每日报特价菜名
作者: beryl    时间: 2019-11-16 23:14
AllBlue 发表于 2015-8-14 08:05

视频好像看不了

作者: AllBlue    时间: 2019-11-25 13:34
beryl 发表于 2019-11-16 23:14
视频好像看不了

是的,给了地址了
作者: weixiaoyunryl    时间: 2020-4-23 23:07
很详细的DS1302教程及资料,目前正在实验中




欢迎光临 YFROBOT创客社区 (http://yfrobot.com.cn/) Powered by Discuz! X3.1