我们都至少认识一位老人。也许是家人或朋友。随着年龄的增长,他们中的一些人认为我们不在乎他们,而我们真的很爱他们。一个真正的大问题是,数以百万计的人开始忘记一些事情,比如吃药。我们可以整天告诉他们做一些事情,但相反,我们可以委派和自动化这项任务。介绍Remind-Ino!它的目的是提醒人们在您无法完成的特定时间完成任务。它还可以讲故事、阅读书籍、教授烹饪食谱,甚至可以再现歌曲。它有一种复古的收音机风格,可以记住过去的美好时光。它有一个简单的界面,1个扬声器作为输出,1个按钮作为输入告诉它停止。如果用户没有听到,Remindino会重复,直到他按下按钮或5分钟过去。您只需要记录警报、保存警报、对arduino进行编程、连接电缆、制作一个案例,您就可以开始了!视频展示补给品准备-1xArduinoNano-1xRTC模块-1xMP3模块(DFrobot或TF-16P)-1x按钮-1x8[ohm]0.5[W]扬声器或类似设备-4x1[Kohm]电阻-1x迷你面包板-各种公母跳线-1xSD卡(32GB,取决于大小)-烙铁-FoamBoard和工具或3D打印机和灯丝或任何你想制作外壳的东西。第1步:设置警报对于警报,我们只有2个限制:SD卡存储容量,它们必须是mp3文件。该mp3文件将随着警报的编程而复制。它们可以是您自己、家人、朋友、音乐、书籍、播客或您希望闹钟响起的任何内容的录音。需要注意的一件事是必须为整个月设置警报。接下来要考虑的是:每天在指定的时间会有相同数量的闹钟,但根据日期的不同,闹钟的mp3文件可能相同或不同。例如:我们定义将有4个警报:9:00的警报1、10:30的警报2、14:00的警报3和17:25的警报4。但是我们可以根据一天播放不同的音频:本月1日:警报1是芝士蛋糕食谱(例如:解释如何制作芝士蛋糕的mp3文件)警报2是服用药物(例如:告诉他们必须服用什么药物的mp3文件)本月2:警报1是占星术之书(例如:mp3文件,该文件为初学者阅读占星术第1章)警报2是服用药物(例如:告诉他们必须服用什么药物的mp3文件)上面的例子您懂了吗?因此,完成警报的步骤如下:定义整个月需要的时间和警报记录并拥有所有mp3文件在SD卡的目录中创建所有日期的文件夹(01,02,...,30,31)根据日期将mp3文件保存在每个文件夹中,如下所示:对于文件夹01Cheesecakealarm必须保存为001.mp3,TakeMedicinesalarm必须保存为002.mp3。对于文件夹02Astrologyalarm必须保存为001.mp3,TakeMedicinesalarm必须保存为002.mp3等等。第2步:电路电路就是这么简单。连接的时候要小心。我在寻找有关如何使用MP3模块的好教程时遇到了麻烦,如果某些东西不起作用,则可能是您颠倒了它的顺序。我也在努力寻找如何将mp3文件保存在SD卡中,但我已经在警报步骤中解释了如何做到这一点。MP3模块也不支持5V的通信,这就是为什么我使用带有电阻的分压器并且它工作得很好。第3步:Arduino代码代码在Arduino平台上实现:首先,我们需要安装库以使用不同的模块。您可以从arduino管理面板安装它们。点击查看如何操作。下面是可以详细代码#include"Arduino.h"#include"SoftwareSerial.h"#include"DFRobotDFPlayerMini.h"#include#include然后我们需要声明将需要的通用变量。RTC_DS3231rtc;SoftwareSerialmySoftwareSerial(10,11);//RX,TXDFRobotDFPlayerMinimyDFPlayer;对于报警变量,我们稍微解释一下://Hereyouneedtoputatwhattimethealarmswillstarttoplay.WARNING:Putmore>=10minutesinbetweenalarms!//Forexample://9:00Alarm1//11:25Alarm2//15:00Alarm3//19:30Alarm4//Hours[]={9,11,15,19};//Minutes[]={0,25,0,30};//Sono[4];//hour_reset=5;Earlierthanthefirstalarm(9:00)intHours[]={21,21,21,21,21,21};//HereyouneedtoputthehoursofthealarmsinconsecutiveorderintMinutes[]={4,5,6,8,10,11};//HereyouneedtoputtheminutesofthealarmsinconsecutiveorderintSono[6];//Hereyouneedtoputhowmanyalarmsyouchoseinthour_reset=4;//Itsthetimewhereallthealarmswillresetandstartanewday.Itmustbeearlierthanyourfirstalarm.以及其他一些变量。booleansonando=false;booleanpresionado=false;intnumero_alarma=0;intDay=1;然后我们有一些函数,比如一个在按下按钮时处理中断的函数,另一个使mp3模块播放音频。voidtocar_alarma(intnumero_alarma,intDay){myDFPlayer.playFolder(Day,(numero_alarma+1));}voidButton_Pressed(){if(sonando=true){presionado=true;}}然后我们进行了设置,我们设置了mp3模块、外部中断和RTC模块。这个很重要。首先,您需要将RTC模块设置为实时。您可以按照本教程进行操作。在设置中,我们还根据时间告诉arduino下一个警报。voidsetup(){mySoftwareSerial.begin(9600);Serial.begin(9600);pinMode(3,INPUT);attachInterrupt(1,Button_Pressed,RISING);Serial.println();Serial.println(F("DFRobotDFPlayerMiniDemo"));if(!myDFPlayer.begin(mySoftwareSerial)){Serial.println(F("Unabletobegin:"));Serial.println(F("1.Pleaserechecktheconnection!"));Serial.println(F("2.PleaseinserttheSDcard!"));while(true);}Serial.println(F("DFPlayerMinionline."));myDFPlayer.setTimeOut(500);myDFPlayer.volume(15);//Hereyoucansetthevolumofthespeaker!(0-30)myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);delay(3000);if(!rtc.begin()){Serial.println("NohayunmóduloRTC");while(1);}//***********CheckWhenWeAre?DateTimenow=rtc.now();intc=0;while(Hours[c]!=0){if(Hours[c]c++;}elseif(Hours[c]==now.hour()){if(Minutes[c]c++;}elseif(Minutes[c]==now.minute()){c++;}else{numero_alarma=c;break;}}else{numero_alarma=c;break;}}}接下来,我们有一个循环,其中进行时间检查和播放警报:voidloop(){//GetrealtimefromRTCDateTimenow=rtc.now();delay(1000);Day=now.day();Serial.println(now.minute());Serial.println(now.second());Serial.println(numero_alarma);//Resetbeforethefirstalarmif(now.hour()==hour_reset&&now.minute()==0){numero_alarma=0;sonando=false;presionado=false;intSono[5];}//Ifitstimeofalarm,playthealarmif(now.hour()==Hours[numero_alarma]&&now.minute()==Minutes[numero_alarma]&&Sono[numero_alarma]==0){tocar_alarma(numero_alarma,Day);Sono[numero_alarma]=1;sonando=true;}//Checkifin5minutesnobodypressedthebuttonintmin_test=0;inttime_reset=5;//Timethatbuttonisn'tpressedif(Minutes[numero_alarma]>=(60-time_reset)){min_test=time_reset-(60-Minutes[numero_alarma]);}else{min_test=Minutes[numero_alarma]+time_reset;}if(sonando==true&&min_testSerial.println("ENTRO!");Serial.println(Minutes[numero_alarma]+5);presionado=true;//***********CheckWhenWeAre?DateTimenow=rtc.now();intc=0;while(Hours[c]!=0){if(Hours[c]c++;}elseif(Hours[c]==now.hour()){if(Minutes[c]c++;}elseif(Minutes[c]==now.minute()){c++;}else{numero_alarma=c;break;}}else{numero_alarma=c;break;}}}就是这样。检查文档很棒,您可以访问模块制造商的页面。完整代码://**********************//***********Libraries***********//**********************#include"Arduino.h"#include"SoftwareSerial.h"#include"DFRobotDFPlayerMini.h"#include#include//**********************//***********Variables***********//**********************RTC_DS3231rtc;SoftwareSerialmySoftwareSerial(10,11);//RX,TXDFRobotDFPlayerMinimyDFPlayer;//********************//**********Alarms**********//********************//Hereyouneedtoputatwhattimethealarmswillstarttoplay.WARNING:Putmore>=10minutesinbetweenalarms!//Forexample://9:00Alarm1//11:25Alarm2//15:00Alarm3//19:30Alarm4//Hours[]={9,11,15,19};//Minutes[]={0,25,0,30};//Sono[4];//hour_reset=5;Earlierthanthefirstalarm(9:00)intHours[]={21,21,21,21,21,21};//HereyouneedtoputthehoursofthealarmsinconsecutiveorderintMinutes[]={4,5,6,8,10,11};//HereyouneedtoputtheminutesofthealarmsinconsecutiveorderintSono[6];//Hereyouneedtoputhowmanyalarmsyouchoseinthour_reset=4;//Itsthetimewhereallthealarmswillresetandstartanewday.Itmustbeearlierthanyourfirstalarm.booleansonando=false;booleanpresionado=false;intnumero_alarma=0;intDay=1;//**********************//***********Functions***********//**********************voidtocar_alarma(intnumero_alarma,intDay){myDFPlayer.playFolder(Day,(numero_alarma+1));}voidButton_Pressed(){if(sonando=true){presionado=true;}}//**********************//***********VoidSetup***********//**********************voidsetup(){mySoftwareSerial.begin(9600);Serial.begin(9600);pinMode(3,INPUT);attachInterrupt(1,Button_Pressed,RISING);Serial.println();Serial.println(F("DFRobotDFPlayerMiniDemo"));if(!myDFPlayer.begin(mySoftwareSerial)){Serial.println(F("Unabletobegin:"));Serial.println(F("1.Pleaserechecktheconnection!"));Serial.println(F("2.PleaseinserttheSDcard!"));while(true);}Serial.println(F("DFPlayerMinionline."));myDFPlayer.setTimeOut(500);myDFPlayer.volume(15);//Hereyoucansetthevolumofthespeaker!(0-30)myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);第4步:制作案例(老式收音机)该案例考虑了最终用户的体验。在这种情况下,最终用户将是老年人,在您的情况下可能有所不同。这部分非常有创意!正如我们之前所说,我们的最终用户是一位老人,这就是为什么决定外壳必须具有VintageRadio风格的原因。因为他们喜欢那样。1.先做了一点研究!2.然后使用最好的3DCAD建模软件设计模型:AutodeskFusion360!!!在这里,您必须根据组件的大小来设计模型。您必须测量您的按钮和扬声器直径才能打出完美的孔。这部分真的取决于你。您可以根据您的测量使用模型并固定尺寸。您可以3D打印您的模型,也可以将其设计为在泡沫板上制作,就像我的情况一样。3.模型完成后,可以进行3D打印,也可以打印零件的图纸作为模板切割成泡沫板。关于如何切割泡沫板的教程。4.然后你需要给所有的部分上色,这样你就可以给它你想要的风格。就我而言,我看到了这个人造木头绘画教程,让它看起来复古而古老。5.你可以给它额外的装饰,比如贴花、网眼织物和一些额外的东西,让它更有吸引力!复古收音机.f3d点击下载第5步:组装和测试在这部分中,您应该将每个组件放入机箱并测试它的声音。如果用户感觉舒适,您可以检查警报。您还需要检查代码的无效设置中的音量。检查所有连接,因为如果连接不正确,电子设备可能会损坏和烧毁,并且无法工作。此时,如果一切都按计划进行,恭喜您已完成Remind-Ino的制作!