見出し画像

Raspberry pi×Pythonで電子工作に挑戦

今回は、プログラミング関連についてアウトプットします。

1~3項は本ブログの背景です。本題のRaspberry pi×Pythonでの電子工作は4項からです。


1.プログラミングを学んだきっかけ

2020年春、ちょうどコロナ禍の真っただ中のとき、会社が2か月休業となりました。2か月の休み…今ではとても信じられないですが、確かに2か月休みました。強制休暇です。

2か月の休業が決まったとき、不安な気持ちとともに「この時間を使って、今までやろうやろう…と思って手つかずでいた何かに取り組めるはず。何をやろうか?」と思い、いくつかチャレンジしました。そのうちの1つが、VBAでのエクセルマクロ作成です。

当時の私の職場環境は、エクセル帳票が溢れており、大量のエクセル帳票を毎日のように更新する必要がありました。そのために、エクセルマクロを自由自在に操れる人が重宝されていました。

「自分も自由自在に操れるようになりたい…でも、参考書とか買ったけれど、全くマスターできない。そもそも時間が足りない…」と壁に当たり、モヤモヤとともに放置していました。

そんなとき、2か月の休業があり、「このチャンスを逃すわけにはいかない。ここでエクセルマクロをマスターしよう!」と思い立ちました。

以下の参考書を使い、ほぼ毎日「1日の半分はマクロの時間」と決めて取り組みました。その結果、基本的な自動化(繰り返し処理、データの抜き出し、コピペ、ファイル操作、Sheet操作など)はできるようになりました。

基本動作をマスターしたことで、社内のエクセル帳票の自動化もある程度できるようになってきました。

2.表面的な知識を使える知識にするために

しかし、今度はPythonの時代がやってきました。例えば、Pythonで、とある生産管理システムをコントロールし、生産計画の自動更新やマスタ管理などをやり始める同僚が出てきました。私がマクロで苦戦している間に、マクロはもちろん、Pythonも使いこなしていたのです。

他システムと連携するには、マクロよりも拡張性のあるPythonの方が良く、マクロしか知らない自分にはできない技でした。

正直、悔しく、ついていけず、「なんとかしなければいけない」と思いつつも、コロナ禍明けは、2か月の休業などなく、Pythonをマスターする時間はありませんでした。

そうこうしている内に時は流れ、部署異動を経験しました。それが現在の職場ですが、AIを活用した検査の自動化などに取り組んでいます。

メイン業務は製品の品質保証のため、検査自動化などの品質保証技術の研究開発はほぼ外注任せとなり、プロジェクトマネジメントが主となっていますが、自分はコアな知識を身につけたいと強く思っています。

なぜなら、表面的な知識よりも、具体的な(コアな)知識があれば、専門家である外注先(IT企業など)により入り込め、開発の面白さを実感できるし、より深く理解できると思ったからです。

そのため、手始めに、ITパスポート、次に、G検定を受験・合格し、デジタル、AIに関する基本的な知識を身に着けました。

しかし、これは表面的な知識であり、結局Pythonも使えず、異動前と何も変わりませんでした。具体的に「使う」ためには、手を動かす必要がありました。

3.IoTシステムの自作に挑戦するが…

そうこうしている内に、手を動かすための良い機会がやってきました。

プライベートですが、妻の希望で犬を飼い始めました。現時点で、生まれて4か月の子犬で、元気いっぱい。しつけも苦戦しながら行っています。

そんな日々のお世話の中で、なんとかしたい問題があります。

それは、ウンチの処理です。ペットの犬は、元気いっぱいな割に神経質な性格です。ケージ内のトイレエリアでウンチをした後「クーン、クーン」と鳴き、騒ぎ始めます。おそらく、「早くウンチを処理してほしい」と訴えているのだと思います。

それだけならいいのですが、私と妻がウンチに気づかず、処理が遅れると、彼は寝床エリアとトイレエリアを徘徊し始め、ウンチを踏んだり舐めたり…しまいには、踏んだウンチを寝床にまで塗りたくってしまいます…

このように、処理が遅れると、ケージ内が悲惨なことになっています…泣(彼の足にもウンチがこびりついており、それでフローリングを走り回らないで欲しい!)

こうなると、臭いはきついし、掃除は面倒だしで、心の底から「なんとかならないか…?」と思いました。妻もだいぶストレスを感じているようです。

そこで、ネット検索をしていると、犬のウンチを画像認識で検知するシステムを自作できることを知りました。

ネットの例では、ケージの上に赤外線カメラ(夜間でも撮影できるように)を設置し、犬がウンチをすると、ウンチの形状を認識し、LINEにウンチの通知が来る仕組みです。LINEへの通知は、LINE Notifyというサービスを使うそうです。

そこで使われていたのが、Raspberry piです。画像処理ライブラリのOpenCVを使い、Pythonで動作させます。

Raspberry piの存在は前から知っていましたが、IoTシステムの自作ができる程度の知識でした。

「自分も犬のウンチ検出システムを作り、ウンチにいち早く気づき、早急に処理できるようにしたい」「IoTシステムを実装したい!」と思い、早速、テキストを読み始めました。

しかし、Pythonの基本さえ分かっていない自分にはハードルが高すぎました…

大きな流れでやっていることはわかりましたが、自身の環境への落とし込みができません。「そもそもRaspberry piをどうやって動かすのか?」「OpenCVのインストールってどうやるのか?」など疑問だらけ…

「早くシステムを作って、ウンチの苦悩から解放されたい…」

そんな焦りはありましたが、思い切ってハードルを下げ、基本から学ぶことにしました。

4.ハードルを下げて初歩の初歩からスタート

そこで、Udemy講座を活用し、Raspberry pi×Pythonで電子工作に挑戦しました。(昨年のセール時に購入して以来、眠っていた講義です…)

IoTシステムを作るためには、電子回路も学ぶ必要があると思います。また、Pythonサンプルコードをただ打ち込み、画面上でアウトプットを見るよりも、実際に、自分の書いたコードでモノの動きをコントロールできる方が楽しいし、継続できると思ったからです。

この講座は、非常に丁寧な解説があり、モノさえ準備できれば、だれでも電子工作を体験でき、「自分で動かせた!」という実感が湧くと思います。

ちなみに、Pythonのテキストは2冊もっていますが、残念ながら、ホコリが被った状態でした…(最初の数ページはめくって、勉強した形跡はありますが…

今回は、こんなことにならないように、電子工作をプラスして、学ぶことにしました。

5.受講前に揃えておくと良いもの

このUdemy講座を有意義にするために、以下の準備をオススメします。あくまで例になります。もっとお安く手に入るかもしれません…(モニタ、キーボード、マウス等はPCのものを流用すれば良いです)

①Raspberry pi 4 or 5

Raspberry piは最新バージョンの5を購入しました。大きさは手のひらサイズ、OSはLinuxですが、普通のPCとほぼ変わらない動作ができ、驚きました。

現時点では、この講義は、Raspberry pi 4と5の両方に対応しています。購入の際は「技適マーク」付きを選択してください。このマークがないものを使用すると、最悪、電波法違反となり、罰せられますので注意してください。(上記商品には、箱に技適マークが書かれています。箱も保管しておきましょう。)

②Raspberry piへの電源供給アダプタ

Raspberry piへの電源供給は、TypeCケーブルです。

③Raspberry piとモニタ(HDMI)を接続するためのケーブル

Raspberry pi起動後、モニタ上で操作するために必要です。Raspberry pi側はマイクロHDMI端子タイプDです。

④MicroSD(32GB)

MicroSDにRaspberry pi OSをインストールし、そのMicroSDをRaspberry piに挿入して使います。

OSは以下からダウンロードできます。

https://www.raspberrypi.com/software/

⑤電子部品キット一式

電子部品として、LEDや抵抗、スイッチなどが必要になります。講義の各回ごとに必要なものを揃えても良いと思いますが、以下のようなキットを購入すれば、どの回にも対応できると思います。

さらに、自分で応用したい場合にも使えるので、将来の電子工作、IoTシステム開発を見据えて、以下のようなキットで購入するのもありだと思います。

以下ADコンバータは、講義と同じ型番ではなかったので、別途準備すると良いです。

以上、すべてを揃えると25,000円ほどになります…結構な値段がしますが、私は超初心者であること、また、自身への投資だと思って、すべて揃えました。

6.講義からの学び・アウトプット

講義では、LEDを光らせたり、人感センサで検知したり、モータを回したりなど、様々な体験ができます。(現時点では、LEDとスイッチの講座まで修了しました。)

例えば、講義「スイッチの状態を読む」では、スイッチを押している間、LEDが点灯するプログラムを実行し、実際にスイッチを押すことで、プログラムの成立性を確認します。

コードは以下のようになります。スイッチを押している間だけ点灯するため、一瞬だけ光ります。

from gpiozero import DigitalInputDevice, DigitalOutputDevice
import time

btn = DigitalInputDevice(23, pull_up = True)

myled = DigitalOutputDevice(17)

while True:
    if btn.is_active:
        myled.on()
    else:
        myled.off()

    time.sleep(0.01)
図1 スイッチONの間のみ点灯

この講義を受ける前の自分では、このコードを見ても、何をしたいのかさっぱりわからないと思いますが、順番に講義を受けることで理解できました。

ここで、自分なりに一工夫してみました。スイッチと言ったら、通常、押したらONの状態が続き、再度押すとOFFになるものだと思います。部屋の電灯のようなイメージです。

そのため、そうなるように工夫をしてみました。私はPython初心者なので、自力では作れません…そこで、ChatGPT(GPT-4o)を活用しました。

以下がChatGPTの生成結果です。所望の動きをしています。

from gpiozero import DigitalInputDevice, DigitalOutputDevice
import time

btn = DigitalInputDevice(23, pull_up=True)
myled = DigitalOutputDevice(17)

led_state = False

while True:
    if btn.is_active:
        led_state = not led_state  # LEDの状態をトグル
        if led_state:
            myled.on()
        else:
            myled.off()
        while btn.is_active:  # ボタンが離されるまで待機
            time.sleep(0.01)
    
    time.sleep(0.01)
図2 スイッチONしたら点灯持続、再度押したらOFF

このように、講義で得られた知識を応用すれば、やり方次第で、様々な動きが実現できます。

今回は、ChatGPTが生成した結果をそのまま使いましたが、今後デバッグが必要な場合や予期せぬ動きをする場合もあるかと思います。

エクセルマクロ作成の際もChatGPTを利用しますが、基礎がわかっているため、生成されたコードの実行後のデバッグや不適切なコードを自分で修正することもできます。Pythonもそのレベルに到達したいです。

今回のように、LEDの点灯であれば、ランダム点灯でクリスマスツリーの装飾が自作できそうですし、冬のイルミネーションがどんな仕組みで点灯・消灯し、様々な色を出せているのか、理解ができます。

まだまだ未熟者ですが、やればやるほど、上達しそうな気がします。

犬のウンチ検知システム実装までの道のりは長そうですが、なるべく早めに、プロトタイプでも良いので仕上げたいところです。

この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?