概要
ガチャポンケースで何か電子工作が出来ないか考えた結果、MP3プレイヤーを制作することにしました。
私が子供の頃は100円タイプのガチャポンしかなかったが、今は300~500円のガチャポンもあり、ケースも結構大きいものがあります。
単4乾電池3本ケースくらいなら余裕でカプセル内に入れることが可能です。
主な部品
・PICマイコンPIC16F18323
特にマイコンの種類は何でも良いのですがMCCで設定出来るものが楽です。
・DFplayer mini
秋月やアマゾン等で購入可能、aliexpress が最安かも。
・RGB LED
動作確認用に。
・タクトスイッチ
音楽停止用
・スライドスイッチ
電源入切り用
・スピーカー 50φ
40φのが秋月にあったのでそちらを使った方が収まりやすいでしょう。
回路図
MCC設定
プログラムソース
#include "mcc_generated_files/mcc.h"
#include "stdio.h"
void play(uint8_t num) {
EUSART_Write(0x7E); //$S
EUSART_Write(0xFF); //VER
EUSART_Write(0x06); //Len
EUSART_Write(0x0F); //CMD
EUSART_Write(0x00); //Feedback
EUSART_Write(0x01); // para1
EUSART_Write(num); //para2z
EUSART_Write(0xEF); //end
}
void volume(uint8_t num) {
EUSART_Write(0x7E); //$S
EUSART_Write(0xFF); //VER
EUSART_Write(0x06); //Len
EUSART_Write(0x06); //CMD
EUSART_Write(0x00); //Feedback
EUSART_Write(0x00); //para1
EUSART_Write(num); //para2
EUSART_Write(0xEF); //end
}
void Pause() {
EUSART_Write(0x7E); //$S
EUSART_Write(0xFF); //VER
EUSART_Write(0x06); //Len
EUSART_Write(0x0E); //CMD
EUSART_Write(0x00); //Feedback
EUSART_Write(0x00); // para1
EUSART_Write(0x00); //para2
EUSART_Write(0xEF); //end
}
void Standby() {
EUSART_Write(0x7E); //$S
EUSART_Write(0xFF); //VER
EUSART_Write(0x06); //Len
EUSART_Write(0x0A); //CMD
EUSART_Write(0x00); //Feedback
EUSART_Write(0x00); // para1
EUSART_Write(0x00); //para2
EUSART_Write(0xEF); //end
}
void Reset() {
EUSART_Write(0x7E); //$S
EUSART_Write(0xFF); //VER
EUSART_Write(0x06); //Len
EUSART_Write(0x0B); //CMD
EUSART_Write(0x00); //Feedback
EUSART_Write(0x00); // para1
EUSART_Write(0x00); //para2
EUSART_Write(0xEF); //end
}
void main(void) {
SYSTEM_Initialize();
PWM1_LoadDutyValue(10);
PWM2_LoadDutyValue(10);
PWM3_LoadDutyValue(10);
__delay_ms(200);
int CNTTIM1 = TMR0_ReadTimer();
Pause();
while (1) {
int CNTTIM2 = TMR0_ReadTimer() - CNTTIM1;
int Val = ADC_GetConversion(channel_ANA4);
int Val1;
int Val2;
int Val3;
int playmusic;
if (Val <= 30) {
Val = 0;
}
Val1 = Val / 100;
Val2 = Val % 100;
Val2 = Val2 / 10;
Val3 = Val % 10;
playmusic = Val % 100;
if(playmusic==0){
playmusic=1;
}else if(playmusic>77){
if(Val3==0){
Val3=1;
}
playmusic=Val3;
}
if (Val > 30) {
if (Val3 == 0) {
Val3 = 1;
}
volume(0x1A);
__delay_ms(2);
play(playmusic);
__delay_ms(100);
}
if (RA2 == 0) {
CNTTIM1 = TMR0_ReadTimer();
}
// printf("Val,%d\n", Val);
// printf("Val1,%d\n", Val1);
// printf("Val2,%d\n", Val2);
// printf("Val3,%d\n", Val3);
Val1 = Val1 * 1;
Val2 = Val2 * 1;
Val3 = Val3 * 1;
PWM1_LoadDutyValue(Val1);
PWM2_LoadDutyValue(Val2);
PWM3_LoadDutyValue(Val3);
if (RA3 == 0) {
Pause();
}
if (CNTTIM2 > 100 && RA2 == 1) {
PWM1_LoadDutyValue(0);
PWM2_LoadDutyValue(0);
PWM3_LoadDutyValue(0);
Standby();
SLEEP();
}
}
}
写真・動画
スライドスイッチは電源入切り用。タクトスイッチは音楽停止。
ビスネジに触れると皮膚抵抗値に合わせた音楽が流れます。
音楽停止状態で数秒放置しておくとスリープモードになります。
復帰はスライドスイッチで電源再起動。
まとめ
出来るだけ部品点数を少なくしたかったが、DFplayerのStandby modeからの復帰方法が電源リセットでしか復帰出来なかったのでスライドスイッチを追加しました。
PICのMCLRに使用していたタクトスイッチは音楽停止ボタンに機能変更。
折角LEDがあるので音楽に合わせて点灯させても良かったかも。
2
投稿者の人気記事
-
masayasan
さんが
2021/10/09
に
編集
をしました。
(メッセージ: 初版)
-
masayasan
さんが
2021/10/09
に
編集
をしました。
-
masayasan
さんが
2021/10/09
に
編集
をしました。
-
masayasan
さんが
2021/10/11
に
編集
をしました。
-
masayasan
さんが
2021/10/12
に
編集
をしました。
-
masayasan
さんが
2021/10/12
に
編集
をしました。
-
masayasan
さんが
2021/10/23
に
編集
をしました。
ログインしてコメントを投稿する