DIY-制造一个随机提问的闹钟

简介

您平时起床有困难吗?早上设置十多个闹钟,但仍然无法唤醒并发呆时将其关闭。当您醒来并发现自己迟到时,便怪闹钟没有发出任何声音。为了帮助我更好地完成996个工作日,特制了一个简单的小型闹钟-随机问问题的闹钟。令人不愉快的哭声使您无法入睡。另外,在回答过程中,您必须专心听问题,否则,您将无法判断是在问“一加一是多少”还是“多少个单词中有多少个单词”是一个加一个。”它是家庭必备产品,是将您逼入人生巅峰的最好助手。

材料清单:(原文中有链接)

Arduino UNO×1

IO扩展板×1

语音识别×1

语音合成模块×1

DS3231M MEMS精密RTC×1

7.4V Lipo 2500mAh电池×1

数字按钮(白色)×1

8位LED分段显示模块×1

I2C集线器x 1

立体声封闭扬声器-3W8Ω


 

步骤1:设计思路


 


 

我从DFRobot获得了两个非常有趣的小模块,一个是语音合成模块,另一个是语音识别模块。

因此,我想到了制作一个闹钟。我觉得每个人早上都很难起床,普通的闹钟里塞满了大炮草。然后出现了制作“真实”闹钟的想法。实际上,我发现当人们醒来后头脑变得清晰起来时,他们就不想再睡觉了。因此,无论是带轮运转的闹钟还是拍打人的闹钟,都是要让被动选择起床。在这里做一个温和的,带有随机问题的闹钟。如果答案正确,它将停止发出噪音;如果答案不正确,它将使您烦恼。

步骤2:开始制作封面


 


 


 


 

找一个合适的纸箱,我这里没有合适的纸箱。所以我用两个小个子,然后将它们粘在一起,做成一个大个子。

步骤3:如下连接每个模块


 

时钟模块→Uno IIC

时钟模块INT引脚→uno D2

扬声器红线→Uno D3

扬声器黑线→Uno GND

IIC扩充板→UNO IIC

白色按钮→Uno D4

语音识别,合成,LED段代码→IIC扩展板

步骤4:重新安装盖子和组件


 


 


 

1.在LED分段屏幕上开一个孔,在机箱背面开一个用于扬声器和电池的孔。

2.使用热熔胶将所有模块粘合在一起,最后将所有设备放入包装盒中。

步骤5:编程

安装每个模块的库功能,调整您要询问的问题和警报设置的时间,然后将程序刻录到其中。

/ *!
* @file
setAlarmInterrupt.ino * @简要设置警报,并使用输入引脚触发
* * n实验现象:将闹钟设置为在指定时间触发
* @n将SQW引脚与DIGITALPIN2连接
* @n在串口上打印信息闹钟触发后的端口。
* @copyright版权所有(c)2010 DFRobot Co.Ltd(http://www.dfrobot.com)
* @licence MIT许可证(MIT)
* @author [LuoYufeng](yufeng.luo@dfrobot.com)
* @version V0.1
* @date 2019年8月19日
* @url https://github.com/DFRobot/DFRobot_DS3231M
* /
#include “DFRobot_DS3231M.h”
#include “ DFRobot_SpeechSynthesis.h” #include“ DFRobot_ASR.h”
#include “ DFRobot_LedDisplayModule.h


DFRobot_LedDisplayModule LED(Wire,0xE0);
DFRobot_SpeechSynthesis_I2C ss;
DFRobot_ASR asr;
volatile int8_t alarmFlag = 0;
unsigned long delay= 3000;
unsigned long timelast = 0;
unsigned long timenow = 0;
unsigned char hourval = 0;
unsigned char hourhigh = 0;
unsigned char hourlow = 0;
unsigned char minutesval = 0;
unsigned char minuteshigh = 0;
unsigned char minuteslow = 0;
unsigned char secondval = 0;
unsigned char secondhigh = 0;
unsigned char secondlow = 0;
char str1 [2];
char str2 [2];
char str3 [2];
char str4 [2];
char str5 [2];
char str6 [2];
char str7 [2];
char str8 [2];
DFRobot_DS3231M rtc;

void setup(void)
{
Serial.begin(9600);
while(LED.begin8()!= 0)
{
Serial.println(“芯片初始化失败,请确认芯片连接正确!”);
延迟(1000);
}

ss.begin();
/ *等待芯片完全初始化,然后退出* /
while(rtc.begin()!= true){
Serial.println(“无法初始化芯片,请检查芯片连接是否正确。”);
延迟(1000);
}
/ *!
* @简短设置引脚sqw的值
* @ param模式eDS3231M_OFF = 0x01 //不输出方波,进入中断模式
* @ n eDS3231M_SquareWave_1Hz = 0x00 // 1Hz方波
* @ n eDS3231M_SquareWave_1kHz = 0x08 // 1kHz方波
* @ n eDS3231M_SquareWave_4kHz = 0x10 // 4kHz方波
* @ n eDS3231M_SquareWave_8kHz = 0x18 // 8kHz方波
* /
rtc.writeSqwPinMode(eDS3231M_OFF);

/ *!
* @简短启用Alarm1中断
* /
rtc.enAbleAlarm1Int();

/ *!
* @简短禁用Alarm1中断
* /
//rtc.disAbleAlarm1Int();

/ *!
* @简短启用Alarm2中断
* /
//rtc.enAbleAlarm2Int();

/ *!
* @简短禁用Alarm2中断
* /
//rtc.disAbleAlarm2Int();
// Alarm1
rtc.setAlarm(eMinutesHoursDayMatch,/ *日期,0-30 * / 30,/ *小时,12小时内1-12,24小时内0-23 * / 15,e24小时,
/ *分钟,0-59 * / 13,/ *秒,0-59,此参数在Alarm2 * / 42中不起作用);
//报警2
//rtc.setAlarm(eMinutesHoursDayMatch,/*日期,0-30 * / 30,
/ *小时,12小时内1-12,24小时内0-23 * / 15,e24小时,// / *分钟,0-59 * / 13,/ * second,0-59,此参数在Alarm2 * / 42中不起作用);
如果(rtc.lostPower()){
Serial.println(“ RTC掉电,请设置时间!”);
rtc.setYear(21); //设置年份,默认为21世纪。
rtc.setMonth(3);
rtc.setDate(10);
rtc.setHour(15,e24hours);
rtc.setMinute(12);
rtc.setSecond(45);
rtc.adjust();
}
attachInterrupt(0,interrupt,FALLING);
pinMode(3,输出);
pinMode(4,输入);
asr.begin(LOOP);
asr.addCommand(“ san”,3);

}

void loop(){
/ *!
* @简短判断闹钟是否被触发
* @返回true,被触发;false,未触发
* /
rtc.getNowTime();
Serial.print(rtc.year(),DEC);
Serial.print('/');
Serial.print(rtc.month(),DEC);
Serial.print('/');
Serial.print(rtc.day(),DEC);
Serial.print(“(”);
Serial.print(rtc.getDayOfTheWeek());
Serial.print(“)”);
Serial.print(rtc.hour(),DEC);
Serial.print(':');
Serial.print(rtc.minute(),DEC);
Serial.print(':');
Serial.print(rtc.second(),DEC);
Serial.print('');
/ *如果rtc在24小时模式下工作,则此功能不会打印任何内容* /
Serial.print(rtc.getAMorPM());
Serial.println();
hourval = rtc.hour();
hourhigh = hourval / 10;
hourlow = hourval%10;
minutesval = rtc.minute();
minuteshigh = minutesval / 10;
minuteslow = minutesval%10;
secondval = rtc.second();
secondhigh = secondval / 10;
secondlow = secondval%10;
sprintf(str1,“%d”,hourhigh);
sprintf(str2,“%d”,hourlow);
sprintf(str4,“%d”,分钟高);
sprintf(str5,“%d”,minuteslow);
sprintf(str7,“%d”,第二高);
sprintf(str8,“%d”,第二低);
LED.setDisplayArea8(1,2,3,4,5,6,7,8);
LED.print8(str1,str2,“-”,str4,str5,“-”,str7,str8);
延迟(500);
if(alarmFlag == 1){

Serial.println(“闹钟已触发。”);
延迟(100);
do {
tone(3,400,2000);
} while(!digitalRead(4));
noTone(3);
ss.speak(“”);

ss.speak(“一加一是多少”);
asr.start();
timelast = millis();
while(1)
{
if(asr.read()== 3){
Serial.println(“ received'san',command flag'0'”“);
rtc.clearAlarm();
alarmFlag = 0;
break;
}
timenow = millis();
if((timenow-timelast)> = timeout){
Serial.println(“ received'x',command flag'x'”);
break;
}
}

}
else
delay(100);
如果(rtc.lostPower()){
Serial.println(“ RTC掉电,请重设时间!”);
}
}

void interrupt(){
alarmFlag = 1;
}

 

步骤 6:然后完成


 


 


 


 

谢谢阅读!欢迎对此项目有任何意见。

 


FAQ:

版权说明

本文遵循CC BY-SA版权协议,转载请附上原文出处链接及本声明。
链接:https://chandianzi.cn/making-a-alarm-clock-that-asks-questions-randomly.html
作者:Jaychouu
版权协议:CC BY-NC-SA
分类名称:arduino-10
资源标识:Making-a-Alarm-Clock-That-Asks-Questions-Randomly

生成海报
点赞 0

Jaychouu

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

自制一辆arduino主控的小型铲车

简介:JCB机器JCB机械非常受欢迎,因为它是民用工业中的重型建筑设备。JCB也被称为反铲装载机。它可用于非常快速地装卸卡车。它用于道路建设,卡车装卸以及更多其他用途。每个建筑公司都使用它,因为它足够快并且可以举起沉重的重量。步骤1:视频步骤2:使用的材料1,ArduinoNano-1个2.游戏杆模块-2个3.伺服电机(180度)-4号4.公对母跳线-根据要求5.公对公跳线-根据要求6.直流轴电机-2个7.按钮-2个8.迷你面包板9.电源-5V1Amps步骤3:3D零件这些是JCB的3D装配零件。步骤4:从物理建筑开始-伺服电机1首先使用Fevikwik将带有附接部件的臂固定在相应的插槽中。然