プロが教える店舗&オフィスのセキュリティ対策術

再三こちらで投稿お世話になっております。

今回は趣味の電子工作でトイレ自動洗浄に取り組みました。
プログラム、ハードとも完成し、意図したとおり
トイレ使用後快適に洗浄動作していたと思いきや、
2日目になったり、1日目になったりで予期せぬところで
洗浄スイッチを押しても無反応で動作しない状態になります。

最初は電源回りの接触不良か何かと思い
その状態のままで、マイコン回りの電圧をチェックしましたが
正常電圧値でした。そこで、ハード的にリセットをかけるとまた
正常に動作します。そこで、ソフト側に問題ありではと考え
PICマイコンに書き込み時に行う環境設定(コンフィギュレーションビット)
(#fuses)のビット設定を改めて見直したところ、
(WDTE=ウオッチドックタイマーが有効設定)になっていたので、
これが働いていたのではと、原因究明出来た思いで、それを無効にした後
1夜明けたら早速動作しなくなりました。

トイレに使うものなので、四六時中マイコンには通電状態にあります。
リセットをかけると動作すると言うことは、ハードよりソフト側に問題
ありと思ってますが、そうなると当方の様な浅学の者ではお手上げ状態です。
と言うことで、ソースコードを添付致しましたので、PICマイコンの詳しい方に
ご検証頂き、問題解決のアドバイスを頂けたなら大変幸いに思います。

※仕様デバイス:PIC16F873A、 オシレータ:10MHz、
動作解説:ポートAより、スィッチ入力があると
     ポートBより決められた時間だけ出力する。
     単純なプログラムです。

#include <16f873a.h>
#fuses HS,NOWDT,NOPROTECT,PUT,BROWNOUT,NOLVP
#use delay(CLOCK=10000000)

void main()
{
int i;
int a;
set_tris_a(0b00000111);
set_tris_b(0b00000000);

while(1)
{
if(input(PIN_A1)==0){
delay_ms(10);
if(input(PIN_A1)==0){
output_b(0x01);
delay_ms(900);
output_b(0x00);
delay_ms(3000);
}
}
else if(input(PIN_A2)==0){
delay_ms(10);
if(input(PIN_A2)==0){
output_b(0x02);
delay_ms(900);
output_b(0x00);
delay_ms(3000);
}
}
else {
output_b(0);
}


}

}

質問者からの補足コメント

  • トイレ自動洗浄は、手動洗浄レバーで流すものをモーターと直結したユニットで機械式で流す仕組みのものです。以前、使用後はリモコンスイッチで自動に流していたのですが、便座交換したら、自動洗浄機能が付いてないので、リモートスイッチにして流す様に改良しようと今回考え、それの動作の為の、ソースコードになります。

    No.1の回答に寄せられた補足コメントです。 補足日時:2020/10/02 15:10

A 回答 (2件)

ありがとう。


>スィッチ入力があると
詰まり手動ですよね。
でスイッチを使うなら、ジェスチャースイッチにすると手を触れずに済みますね。

ハードウェアだけで簡単に作れるけど。しかも完全自動のを。
因みに、私のトイレは照明と換気扇は全自動。今までのスイッチは取り外しました。
私は、メカを作るのは苦手なので、自動洗浄はやってません。
    • good
    • 0

トイレ自動洗浄ってなに?

この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!