masayasan が 2021年10月09日16時48分51秒 に編集
コメント無し
本文の変更
1. 概要 ガチャポンケースで何か電子工作が出来ないか考えた結果、MP3プレイヤーを制作することにしました。 私が子供の頃は100円タイプのガチャポンしかなかったが、今は300~500円のガチャポンもあり、ケースも結構大きいものがあります。 単4乾電池3本ケースくらいなら余裕でカプセル内に入れることが可能です。 1. 主な部品 ・PICマイコンPIC16F18323 特にマイコンの種類は何でも良いのですがMCCで設定出来るものが楽です。 ・DFplayer mini 秋月やアマゾン等で購入可能、aliexpress が最安かも。 ・RGB LED 動作確認用に。 ・タクトスイッチ 音楽停止用 ・スライドスイッチ 電源入切り用 ・スピーカー 50φ 40φのが秋月にあったのでそちらを使った方が収まりやすいでしょう。 1. 回路図  1. MCC設定         1. プログラムソース ```ガチャポンMP3プレイヤー #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; if (Val > 10) { CNTTIM1 = TMR0_ReadTimer(); Val1 = Val / 100; Val2 = Val % 100; Val2 = Val2 / 10; Val3 = Val % 10; if (Val3 == 0) { Val3 = 1; } volume(0x15); __delay_ms(2); play(Val3); __delay_ms(100); } // printf("Val,%d\n", Val); // printf("Val1,%d\n", Val1); // printf("Val2,%d\n", Val2); // printf("Val3,%d\n", Val3); Val1 = Val1 * 10; Val2 = Val2 * 10; Val3 = Val3 * 10; PWM1_LoadDutyValue(Val1); PWM2_LoadDutyValue(Val2); PWM3_LoadDutyValue(Val3); if (RA3 == 0) { Pause(); } if (CNTTIM2 > 500 && RA2 == 1) { RA5 = 0; PWM1_LoadDutyValue(0); PWM2_LoadDutyValue(0); PWM3_LoadDutyValue(0); Standby(); SLEEP(); //電源入切りで復帰 } } } ``` 6. 写真動画 スライドスイッチは電源入切り用。タクトスイッチは音楽停止。 ビスネジに触れると皮膚抵抗値に合わせた音楽が流れます。 音楽停止状態で数秒放置しておくとスリープモードになります。 復帰はスライドスイッチで電源再起動。    
<iframe width="560" height="315" src="https://www.youtube.com/embed/4jwrDzmVv5o" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
@[youtube](https://youtu.be/4jwrDzmVv5o)
6. まとめ 出来るだけ部品点数を少なくしたかったが、DFplayerのStandby modeからの復帰方法が電源リセットでしか復帰出来なかったのでスライドスイッチを追加しました。 PICのMCLRに使用していたタクトスイッチは音楽停止ボタンに機能変更。 折角LEDがあるので音楽に合わせて点灯させても良かったかも。