2018.7.13 Raspberry Pi にセンサーを

ワールドカップの決勝も来週に迫ってきました。

どちらが勝つのでしょうか、いろいろ番狂わせみたいなことが起きているようなので、ここはクロアチアの初優勝とかもありそうですね。

決勝に来たという意味では番狂わせでもなく実力だと思います。

 

最近 Raspberry Pi WH (以降ラズパイ) でセンサーを扱うプログラムなんかを作ったりしています。(仕事ではないです)

GPIOにセンサーを接続してその反応を見ています。

ラズパイにはscratchというプログラミングを学習するようななんかGUIで制御できるのがあるんですが、ちょっと触ってみるとめんどくさい処理を考えずにシンプルに動作させられるので(ほぼマウスとかで組める)便利です。

センサーの状態を把握して動作させるとか言うものをプログラミングする前に、センサー等を実際の部品に実装してscratchでテストしてみると想定道理に動作しました。

ただ、これはセンサーが動作しているかの確認だけだったので本格的に利用しようとpythonでプログラムを書いたのですが・・・・うまくいきません。

 

やりたかったことは

センサーが反応したらカウントする

だけなのですが、scratchでは、センサーが反応すると状態が(GPIO)1になりまたセンサーが反応しなくなると0になるみたいに想定した通りの動作になりました。

ところがpythonで動作させると、センサーの状態が反応したにもかかわらず、1だったり0だったりと変化していました。

センサーが反応すると「一定間隔で0と1を繰り返す」反応しなくなると「ずっと0のまま」という状態です。

 

これは、センサーの実装(ソフトの方ではなくハードの方)が悪いのか?と思い装置を分解してあれこれとやっていました。

ブレッドボード上で試してみたところ、やはり同じ反応。

あああ、pythonで書くとそういう動作になってしまうのか・・・。どうしよう別の方式で実装しようかな。

とあれこれやっていたところ・・・・。

GPIOを使うときに setup というのがあって、そこでいろいろ設定を初期化できるということを知りました。

なにせラズパイとか初心者なのと「なんとかなる」程度でやっていたのでそこまで調べていませんでした。(WindowsとかMS-DOSでの組み込みはやったことあります)

GPIO.setup(PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)

こんな感じで初期化すると安定しました。

どういうことかというと、回路がつながっていない状態を初期化するための設定です。

つまりつながっているのに1になったり0になったりするのを防げます。

なんてこった!

回路をしっかり勉強している人だと抵抗を使ったりして回路上で対応が可能とのこと・・・。

ラズパイには抵抗とかそういうの使わないで実現するための機能が実装されていたということでした。

 

ラズパイもセンサーも触っていない人にはなんのこっちゃの話ですみません。

あと、今回はpythonでしたが、他の言語だとどうやるのか等は今回調べておりません。

この記事を書いた人

N.Sue
N.Sue東京開発チーム
提案から実装まで行うエンジニア
旗振りのバイトや飲食店、劇団などいろいろな仕事?を経験。
目指すものは、楽をしてたくさんの業務をこなすこと。
日常のおはようからお休みまで、何かあったら取り上げていく予定。