DIY留声机
https://v.qq.com/x/page/l0793cy03f8.html
【制作背景】 美国科学家托马斯•爱迪生发明了第一台留声机,由于留声机唱片能较简易地大量复制,放音时间也比大多数筒形录音介质长,因此,留声机被称为爱迪生最伟大的发明之一。小时候老爸买过好几台留声机,也做过一些唱片机的外壳及音箱,全村的老老少少经常来我家听,现在也时常想起小时候的情景,不过那些机器现在都再也找不到了,于是就萌发了做一台模拟的留声机。
【功能描述】 我们把唱头放在模拟唱片的不同位置就会播放不同的歌曲,这里主要通过角度传感器和避障传感器检测到不同的值传送给主控板,让主控板指挥MP3模块播放不同的歌曲,如果把唱头移开唱片,音乐就会停止播放。我们还可以通过旋转功放模块上的旋钮来改变声音的大小。
【硬件清单】
序号名称数量
1DFRduino UNO R31
2DF IO传感器扩展板 V7.11
3步进电机1
4步进电机驱动板1
5角度传感器模块1
6功放模块1
7DFPlayer Mini 播放器模块1
83 W4欧喇叭2
9杜邦线若干
10电源线若干
11激光切割结构件1
12电池盒及电池1
【结构及电子元件的安装】 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库文件,所以事先我们要把这个库文件导入。详细程序如下图所示: #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;
}
}
作者其它帖子
◆ 小尚,别跟丢了!——自动跟随的麦克纳姆轮小车 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-280471-1-1.html◆ 钥匙忘带提醒器https://mc.dfrobot.com.cn/thread-280445-1-1.html◆ 麦昆智能晾衣架https://mc.dfrobot.com.cn/thread-280329-1-1.html◆ 炫彩电子钢琴的设计与制作 https://mc.dfrobot.com.cn/thread-280116-1-1.html◆ 萌宠机器人的设计与制作 https://mc.dfrobot.com.cn/thread-275978-1-1.html◆ DIY留声机 https://mc.dfrobot.com.cn/thread-272320-1-1.html◆ 智能马桶https://mc.dfrobot.com.cn/thread-271881-1-1.html◆ 坐姿矫正仪 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◆ 变色龙https://mc.dfrobot.com.cn/thread-267573-1-1.html◆ 龙舟https://mc.dfrobot.com.cn/thread-90232-1-1.html◆ 多脚怪https://mc.dfrobot.com.cn/thread-37031-1-1.html
虽然不是真的留声机,但是能做到留声机做不到的事情,叫留声机2.0MAX吧(滑稽){:5_153:} 很有年代感,棒棒 这个很有意思,楼主花了不少时间啊。佩服 创意好赞
这个漂亮 章老师的制图功力深厚:victory: 有创意的作品,学习了 不vVB是否会回家就看 您好请问完整的代码可以分享一份吗?而且我没有买到同款的mp3 player播放器 买的是功能一样名称不一样的 是不是这个代码中的名称都是需要修改的呢?因为是新手第一次接触arduino很多地方都不太懂!如果您能回复的话真的万分感谢!!我的微信是chaos-98 希望您能看到留言!!! 很漂亮 choco 发表于 2018-12-20 00:02
您好请问完整的代码可以分享一份吗?而且我没有买到同款的mp3 player播放器 买的是功能一样名称不一样的 是 ...
代码上面不是有了吗,关于mp3模块我不知道你买的是哪一款的,我不知道能不能使用,还是买同一款的吧。 想问下的就是电机会不会转的很快呀? bobobobo 发表于 2018-12-31 18:28
想问下的就是电机会不会转的很快呀?
用步进电机
请问有没图纸 章 发表于 2018-11-19 14:13
【制作背景】 美国科学家托马斯•爱迪生发明了第一台留声机,由于留声机唱片能较简易地大量复制, ...
请问一下能不能加微信 想了解一下详细的程序 我们用这个程序出了点问题 想要学习这个! 想要图纸{:5_165:} 您用的是什么MP3模块 佩服的五体投地,向您学习
页:
[1]