電子工作初心者向け!PICマイコンで鉄道模型ジオラマの走行音が出ない問題を解決!
電子工作初心者向け!PICマイコンで鉄道模型ジオラマの走行音が出ない問題を解決!
この記事では、電子工作初心者の方がPICマイコンを使って鉄道模型ジオラマのギミックを自作する際に直面する可能性のある問題とその解決策について、具体的なコード例を交えながら解説します。特に、走行音が出ないという問題に焦点を当て、原因の特定方法やプログラムの修正方法を詳細に説明します。電子工作の基礎知識から、実際のコーディング、そしてトラブルシューティングまで、実践的なノウハウを提供します。鉄道模型ジオラマ制作における電子工作の楽しさを最大限に引き出し、あなたの作品をより魅力的にするためのヒントが満載です。
電子工作は今回初めてです。鉄道模型のジオラマのギミックとして、明るい時に(車両が乗ってるとき)走行音が鳴り、暗くなったら走行音がOFFになりLEDが点灯(LEDは」11個使用)というパターンでプログラムを組みましたが、走行音が鳴りません。詳細を述べるとSWを2個使用、CDSも2個使用しております。使用してるデバイスはPIC16F690で走行音再生用にマイコンドットコム製のキット(乾電池駆動)の電源とタクトスイッチ部分をカットし接続。
プログラムとしては単純にSW,センサーによってピンをON/OFFするだけなんですが・・・。
以下、ソースコードです。
#include <htc.h>
#define LED1 RB4
#define LED2 RB5
#define LED3 RB6
#define LED4 RB7
#define LED5 RC0
#define LED6 RC1
#define LED7 RC2
#define LED8 RC3
#define LED9 RC4
#define LED10 RC6
#define LED11 RC7
#define CDS1 RA2
#define CDS2 RA3
#define SW1 RA4
#define SW2 RA5
#define _XTAL_FREQ 1000000
//コンフィギュレーションの設定//
__CONFIG(INTIO & WDTDIS & PWRTEN & BORDIS & MCLRDIS & UNPROTECT & IESODIS & FCMDIS);
//関数プロトタイピング//
void main (void){
OSCCON = 0x40;
TRISA = 0b00111100;
TRISB = 0b00000000;
TRISC = 0b00000000;
PORTA = 0b00000001;
PORTB = 0b00000000;
PORTC = 0b00000000;
ANSEL = 0b00000000;
while(1) {
if((SW1 == 0)&&(CDS1 ==1)&&(CDS2 == 1)){
LED1 = 1;LED2 = 1;LED3 = 1;LED4 = 1;LED5 = 1;LED6 = 1; LED7 = 1;LED8 = 1;LED9 = 1;LED10 = 1;LED11 = 1;
PR2 = 61; //4μsec*62=0.25msec
TMR2 = 0;
T2CON = 0x04; //TMR2スタート
CCP1CON = 0x0C; //pwmモード
CCPR1L = 31; //DUTY50%
} else if((SW1 == 0)&&(SW2 == 0)&&(CDS1 == 0)&&(CDS2 == 1)){
LED1 = 0;LED2 = 0;LED3 = 0;LED4 = 0;LED5 = 0;LED6 = 0; LED7 = 0;LED8 = 0;LED9 = 0;LED10 = 0;LED11 = 0;
T2CON = 0;
CCP1CON = 0;
while(1){
RA1 = 1;
_delay(1);
RA1 = 0;
_delay(1500);
if((SW2 == 1)||(SW1 == 1)||(CDS2 ==0))
break;
}
}else{
LED1 = 0;LED2 = 0;LED3 = 0;LED4 = 0;LED5 = 0;LED6 = 0;LED7 = 0;LED8 = 0;LED9 = 0;LED10 = 0;LED11 = 0;
T2CON = 0;
CCP1CON = 0;
}
}
}
走行音再生部分のソースコードはelse if~{}部分で、この部分が実行されません。さらに 詳細をいいますと、SW1がメインでSW2が走行音再生用、CDS2がホーム前に設置してあり車両を置くと反応。CDS2は離れたところに設置。CDS両方が反応すると暗くなったと判断しLEDが点灯という流れです。
ちなみに 、以下の記述は
PR2 = 61; //4μsec*62=0.25msec
TMR2 = 0;
T2CON = 0x04; //TMR2スタート
CCP1CON = 0x0C; //pwmモード
CCPR1L = 31; //DUTY50%
はレール上に乗ってる車両に搭載された室内用LEDを点灯させるもの。そして以下の記述ですが
while(1){
RA1 = 1;
_delay(1);
RA1 = 0;
_delay(1500);
if((SW2 == 1)||(SW1 == 1)||(CDS2 ==0))
break;
走行音再生用です。RA1はマイコンドットコムの再生用タクトスイッチに接続。(RA0は電源用に充ててるため、初期設定でHに設定)
現在、このプログラムでLEDは点灯しております。そしてSW・CDSともにテスターでON,OFFは正常に動いてると確認済み。配線等の不良も見られません。問題はプログラムしか考えられないんで、どなたかアドバイス宜しくお願いします。
ご質問ありがとうございます。電子工作初心者の方がPICマイコンを使って鉄道模型のジオラマを制作する際、特に走行音が出ないという問題に直面することはよくあります。この問題は、ハードウェアの接続ミス、プログラムの論理的な誤り、またはデバイスの初期設定など、様々な要因が考えられます。以下に、問題解決のためのステップと、具体的なアドバイスを提示します。
1. 問題の切り分けと原因の特定
まず、問題がプログラムにあるのか、ハードウェアにあるのかを切り分けることが重要です。ハードウェアに問題がないと確認済みとのことですが、念のため、以下の点を再確認しましょう。
- 配線の再確認: マイコンと走行音再生キット、SW、CDS、LEDの配線が正しく接続されているか、テスターを使って導通を確認します。特に、電源とGNDの接続は重要です。
- SWとCDSの動作確認: SWとCDSが正しくHIGH/LOWを出力しているか、テスターで確認します。CDSは光の変化に正しく反応しているか、SWは押されたときに正しく反応しているかを確認します。
- 走行音再生キットの動作確認: 走行音再生キット単体で正常に動作するかを確認します。タクトスイッチを押すと音が鳴るか、電源は正しく供給されているかを確認します。
ハードウェアに問題がないと確信できれば、次にプログラムの問題を特定します。
2. プログラムの解析と修正
ご提示いただいたプログラムコードを詳しく見ていきましょう。問題の箇所は、else if文の中にある走行音再生部分です。この部分が実行されない原因を特定するために、以下の点に注目します。
2.1 条件式の確認
else if((SW1 == 0)&&(SW2 == 0)&&(CDS1 == 0)&&(CDS2 == 1))という条件式が、走行音再生のトリガーとなっています。この条件が成立しない場合、走行音再生部分は実行されません。この条件が意図した通りになっているか、以下の点を確認しましょう。
- SW1とSW2の状態: SW1とSW2が両方とも0(LOW)になっている必要があります。これは、SW1とSW2が押されていない状態を意味します。もし、SW1またはSW2が押されていると、この条件は成立しません。
- CDS1とCDS2の状態: CDS1が0(LOW)で、CDS2が1(HIGH)になっている必要があります。これは、CDS1が光を感知していない状態で、CDS2が光を感知している状態を意味します。
これらの条件が、ジオラマの動作と一致しているか確認してください。例えば、車両がホームにいない状態で、CDS2が光を感知し、SW1とSW2が押されていない場合に、走行音を再生したいのであれば、この条件は正しいはずです。
2.2 デバッグ用の出力の追加
プログラムのどこが実行されているのか、どの条件が成立しているのかを確認するために、デバッグ用の出力を追加します。例えば、以下のように、LEDの点灯と同時に、特定のピンの状態を出力するコードを追加します。
if((SW1 == 0)&&(CDS1 ==1)&&(CDS2 == 1)){
LED1 = 1;LED2 = 1;LED3 = 1;LED4 = 1;LED5 = 1;LED6 = 1; LED7 = 1;LED8 = 1;LED9 = 1;LED10 = 1;LED11 = 1;
// デバッグ用出力
PORTB = 0b11110000; // 例:RB4-RB7をHIGHに
PR2 = 61; //4μsec*62=0.25msec
TMR2 = 0;
T2CON = 0x04; //TMR2スタート
CCP1CON = 0x0C; //pwmモード
CCPR1L = 31; //DUTY50%
} else if((SW1 == 0)&&(SW2 == 0)&&(CDS1 == 0)&&(CDS2 == 1)){
LED1 = 0;LED2 = 0;LED3 = 0;LED4 = 0;LED5 = 0;LED6 = 0; LED7 = 0;LED8 = 0;LED9 = 0;LED10 = 0;LED11 = 0;
// デバッグ用出力
PORTB = 0b00001111; // 例:RB0-RB3をHIGHに
T2CON = 0;
CCP1CON = 0;
while(1){
RA1 = 1;
_delay(1);
RA1 = 0;
_delay(1500);
if((SW2 == 1)||(SW1 == 1)||(CDS2 ==0))
break;
}
}else{
LED1 = 0;LED2 = 0;LED3 = 0;LED4 = 0;LED5 = 0;LED6 = 0;LED7 = 0;LED8 = 0;LED9 = 0;LED10 = 0;LED11 = 0;
// デバッグ用出力
PORTB = 0b00000000; // 例:RB0-RB7をLOWに
T2CON = 0;
CCP1CON = 0;
}
このコードを追加することで、どの条件が成立しているのか、どの部分が実行されているのかを、LEDの点灯状態やPORTBの状態から確認できます。例えば、PORTBの特定のビットがHIGHになることで、どの条件が成立したかを知ることができます。これにより、プログラムの動作を詳細に把握し、問題点を特定できます。
2.3 走行音再生部分の修正
走行音再生部分のコードを再度確認し、以下の点を修正または調整します。
- RA1の制御:
RA1 = 1;とRA1 = 0;の間隔(_delay(1);と_delay(1500);)が、走行音再生キットのタクトスイッチの仕様と合っているか確認します。タクトスイッチをONにする時間と、OFFにする時間を調整する必要があるかもしれません。 - whileループの条件:
if((SW2 == 1)||(SW1 == 1)||(CDS2 ==0)) break;という条件は、SW2またはSW1が押された場合、またはCDS2が光を感知しなくなった場合に、ループを抜けることを意味します。この条件が、ジオラマの動作と一致しているか確認します。例えば、走行音を再生中に、SW1またはSW2が押されたら、走行音を停止したいのであれば、この条件は正しいはずです。 - その他のピンの制御: 走行音再生キットのタクトスイッチ以外の制御ピンがある場合は、それらのピンの状態も確認し、必要に応じて制御コードを追加します。
3. プログラムの最適化と更なる機能追加
問題が解決したら、プログラムを最適化し、さらに機能を追加することができます。以下に、いくつかの提案をします。
- チャタリング対策: SWやCDSは、物理的な接点を持つため、チャタリング(スイッチのON/OFFが不安定になる現象)が発生することがあります。チャタリングを抑制するために、ソフトウェア的な対策(ディレイの追加など)を行う必要があります。
- 省電力化: 電池駆動の場合、省電力化は重要です。LEDの点灯時間を短くしたり、マイコンをスリープモードにしたりすることで、消費電力を抑えることができます。
- 音量調整: 走行音再生キットに音量調整機能がない場合は、マイコンでPWM制御を使って音量を調整することを検討できます。
- 複数の走行音: 複数の走行音を再生できるように、プログラムを拡張することも可能です。例えば、車両の種類によって走行音を変えたり、汽笛の音を追加したりすることができます。
4. 実践的なアドバイスとヒント
電子工作は、試行錯誤の連続です。うまくいかない場合でも、諦めずに問題点を一つずつ解決していくことが重要です。以下に、実践的なアドバイスとヒントをまとめます。
- 情報収集: インターネットや書籍で、PICマイコンや電子工作に関する情報を収集しましょう。参考になるサンプルコードや、トラブルシューティングの情報が見つかるかもしれません。
- コミュニティの活用: 電子工作に関するフォーラムやSNSで、他のユーザーと交流しましょう。質問したり、自分の作品を公開したりすることで、様々な情報を得ることができます。
- ブレッドボードの活用: ブレッドボードを使って、回路を簡単に試作できます。回路の変更や修正が容易になり、実験が効率的に行えます。
- テスターの活用: テスターは、電圧、電流、抵抗を測定できる便利なツールです。回路の動作確認や、部品の故障診断に役立ちます。
- ドキュメントの確認: PICマイコンや周辺部品のデータシート(仕様書)を必ず確認しましょう。各ピンの機能や、デバイスの動作に関する詳細な情報が記載されています。
これらのアドバイスを参考に、ぜひ鉄道模型ジオラマの制作を楽しんでください。あなたの作品が完成し、素晴らしいジオラマが実現することを願っています。
もっとパーソナルなアドバイスが必要なあなたへ
この記事では一般的な解決策を提示しましたが、あなたの悩みは唯一無二です。
AIキャリアパートナー「あかりちゃん」が、LINEであなたの悩みをリアルタイムに聞き、具体的な求人探しまでサポートします。
無理な勧誘は一切ありません。まずは話を聞いてもらうだけでも、心が軽くなるはずです。
5. まとめ
この記事では、PICマイコンを使った鉄道模型ジオラマの走行音が出ない問題について、原因の特定方法、プログラムの修正方法、そして実践的なアドバイスを解説しました。ハードウェアの確認、プログラムの解析、デバッグ用の出力の追加、そして走行音再生部分の修正というステップを踏むことで、問題解決への道が開けます。また、プログラムの最適化や機能追加を通じて、さらに魅力的なジオラマを制作することができます。電子工作は、試行錯誤の連続ですが、諦めずに挑戦することで、必ず目標を達成できます。この記事が、あなたの鉄道模型ジオラマ制作の一助となれば幸いです。
“`
最近のコラム
>> 札幌から宮城への最安ルート徹底解説!2月旅行の賢い予算計画
>> 転職活動で行き詰まった時、どうすればいい?~転職コンサルタントが教える突破口~
>> スズキワゴンRのホイール交換:13インチ4.00B PCD100 +43への変更は可能?安全に冬道を走れるか徹底解説!