23908| 19
|
[项目] DIY留声机 |
【制作背景】 美国科学家托马斯•爱迪生发明了第一台留声机,由于留声机唱片能较简易地大量复制,放音时间也比大多数筒形录音介质长,因此,留声机被称为爱迪生最伟大的发明之一。小时候老爸买过好几台留声机,也做过一些唱片机的外壳及音箱,全村的老老少少经常来我家听,现在也时常想起小时候的情景,不过那些机器现在都再也找不到了,于是就萌发了做一台模拟的留声机。 【功能描述】 我们把唱头放在模拟唱片的不同位置就会播放不同的歌曲,这里主要通过角度传感器和避障传感器检测到不同的值传送给主控板,让主控板指挥MP3模块播放不同的歌曲,如果把唱头移开唱片,音乐就会停止播放。我们还可以通过旋转功放模块上的旋钮来改变声音的大小。 【硬件清单】
【结构及电子元件的安装】 1、设计外观结构件并进行激光切割 为了使外观更加好看,我采用椴木板来制作,先在电脑上设计图纸并用激光切割机进行切割。 2、把两张底座用热熔胶固定起来,如图所示。 3、把底座与四周的面板用热熔胶固定好,并安装上两只喇叭。如下图: 4、把功放模块、步进电机、步时电机驱动板及角度传感器安装在最上面面板上 5、根据下图的步骤,组装唱头部分结构,最后把避障传感器安装上唱头上。 6、把模拟唱片的两个圆盘安装在步进电机上,安装时要注意距离及水平位置,使他们旋转起来不会与面板相接触,位置固定好后可以用热熔胶或502胶水加以固定。 7、把唱头部分与角度传感器进行连接,用用热熔胶或502胶水加以固定,使转动唱头时,角度传感器也会跟着转动,这里唱头带动角度传感器转动的角度与下面编程时播放的歌曲有关。固定时要注意初始角度,使唱头可以在唱片两侧都留有一定的转动余地。 8、把电池盒、主控板及MP播放模块等固定好,并线路图所示连接好所有模块。 9、复制相关的音乐到SD卡中。先在SD卡根目录下命名一个mp3的文件夹,然后再把相关的音乐复制到mp3文件夹中,而mp3文件命名需要是4位数字,例如"0001.mp3",如需中英文命名,可以添加在数字后,例如"0001ZAYN.mp3"或者"0001体面.mp3" 10、最后盖上面板并固定好,这样整个留声机的结构及元器件与连接全部完成,效果图如下: 【程序编写】 编程编写在用到DF的DFRobotDFPlayerMini库文件,所以事先我们要把这个库文件导入。详细程序如下图所示: [mw_shl_code=applescript,true]#include "Arduino.h" #include "SoftwareSerial.h"#include "DFRobotDFPlayerMini.h" #include <Stepper.h> Stepper mystepper(100,4,5,6,7); SoftwareSerial mySoftwareSerial(10, 11); // RX, TX DFRobotDFPlayerMini myDFPlayer; void printDetail(uint8_t type, int value); volatile int a; void setup() { mySoftwareSerial.begin(9600); Serial.begin(115200); Serial.println(); Serial.println(F("DFRobot DFPlayer Mini Demo")); Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)")); if (!myDFPlayer.begin(mySoftwareSerial)) { //Use softwareSerial to communicate with mp3. Serial.println(F("Unable to begin:")); Serial.println(F("1.Please recheck the connection!")); Serial.println(F("2.Please insert the SD card!")); while(true); } Serial.println(F("DFPlayer Mini online.")); myDFPlayer.volume(20); //Set volume value. From 0 to 30 myDFPlayer.play(1); //Play the first mp3 mystepper.setSpeed(100); pinMode(8, INPUT); a = 0; } void loop() { if (digitalRead(8) && (analogRead(A0) > 425 && analogRead(A0) < 440)) { mystepper.step(10); if (a != 1) { myDFPlayer.play(1); //Play next mp3 every 3 second. } a = 1; } else if (digitalRead(8) && (analogRead(A0) > 442 && analogRead(A0) < 460)) { mystepper.step(10); if (a != 2) { myDFPlayer.play(2); //Play next mp3 every 3 second. } a = 2; } else if (digitalRead(8) && (analogRead(A0) > 462 && analogRead(A0) < 480)) { mystepper.step(10); if (a != 3) { myDFPlayer.play(3); //Play next mp3 every 3 second. } a = 3; } else if (digitalRead(8) && (analogRead(A0) > 482 && analogRead(A0) < 500)) { mystepper.step(10); if (a != 4) { myDFPlayer.play(4); //Play next mp3 every 3 second. } a = 4; } else if (digitalRead(8) && (analogRead(A0) > 502 && analogRead(A0) < 522)) { mystepper.step(10); if (a != 5) { myDFPlayer.play(5); //Play next mp3 every 3 second. } a = 5; } else { a = 0; myDFPlayer.stop(); //Play next mp3 every 3 second. } } void printDetail(uint8_t type, int value){ switch (type) { case TimeOut: Serial.println(F("Time Out!")); break; case WrongStack: Serial.println(F("Stack Wrong!")); break; case DFPlayerCardInserted: Serial.println(F("Card Inserted!")); break; case DFPlayerCardRemoved: Serial.println(F("Card Removed!")); break; case DFPlayerCardOnline: Serial.println(F("Card Online!")); break; case DFPlayerPlayFinished: Serial.print(F("Number:")); Serial.print(value); Serial.println(F(" Play Finished!")); break; case DFPlayerError: Serial.print(F("DFPlayerError:")); switch (value) { case Busy: Serial.println(F("Card not found")); break; case Sleeping: Serial.println(F("Sleeping")); break; case SerialWrongStack: Serial.println(F("Get Wrong Stack")); break; case CheckSumNotMatch: Serial.println(F("Check Sum Not Match")); break; case FileIndexOut: Serial.println(F("File Index Out of Bound")); break; case FileMismatch: Serial.println(F("Cannot Find File")); break; case Advertise: Serial.println(F("In Advertise")); break; default: break; } break; default: break; } }[/mw_shl_code] 作者其它帖子 ◆ 小尚,别跟丢了!——自动跟随的麦克纳姆轮小车 https://mc.dfrobot.com.cn/thread-296803-1-1.html ◆ 来吧!一起动手制作一台架子鼓 https://mc.dfrobot.com.cn/thread-289948-1-1.html ◆ 炫彩电子钢琴的设计与制作 https://mc.dfrobot.com.cn/thread-280116-1-1.html ◆ [micro:bit×OBLOQ物联网挑战赛第三轮] 坐姿矫正仪 https://mc.dfrobot.com.cn/thread-269139-1-1.html ◆ 【挑战2】基于物联网的智能闸道、人数统计与安全预警系统 https://mc.dfrobot.com.cn/thread-268643-1-1.html ◆ 物联网比赛第一关:远程监测温度和亮度 https://mc.dfrobot.com.cn/thread-268162-1-1.html ◆ 来来来,让我们一起来打地鼠! https://mc.dfrobot.com.cn/thread-268413-1-1.html |
章 发表于 2018-11-19 14:13 请问一下能不能加微信 想了解一下详细的程序 我们用这个程序出了点问题 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed