masayasanのアイコン画像
masayasan 2021年10月09日作成 (2021年10月23日更新)
製作品 製作品 閲覧数 1179
masayasan 2021年10月09日作成 (2021年10月23日更新) 製作品 製作品 閲覧数 1179

ガチャポンMP3プレイヤー

ガチャポンMP3プレイヤー

概要

ガチャポンケースで何か電子工作が出来ないか考えた結果、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
ログインしてコメントを投稿する