Raspberry Pi Picoを100V電源のオフタイマーにする

RaspberryPi Picoで100vオフタイマー Raspberry Pi Picoを100V電源で動く装置のオフタイマーにする話。

Raspberry Piの使い方でいろいろなワードで検索するもなかなか応用したものに当たらない。もっぱらLチカといってLEDをチカチカさせましたみたいなのばかり。

俺の知りたい情報はそんな子供だましじゃねえ!

知りたいのは起動時タイマーカウントスタートとともにオン状態だったAC電源がタイマー終了とともにオフになるという至極単純なものだ。(ある意味子供だまし)

そのものずばりの情報はなかったのでこれはネット上で一番乗りかなと勝手に期待して情報を晒す。

そんなに高度なもんじゃなくかなり初歩的なものだからRaspberry Pi初心者にはもってこいの課題だと思う。

では解説する。

スポンサーリンク

用意するもの

必ず要るもの

Raspberry Pi Pico

今回は一応Raspberry Pi Picoを用意する。

Amazonでもよく品切れしているからほしいならしばしば見に行ってみたほうがいい。もっとも確実に入手するなら送料かかるが秋月電子が確実だ。

Raspberry Pi Pico ラズベリーパイピコ: マイコン関連 秋月電子通商-電子部品・ネット通販

Amazonで買ってもよし。秋月電子で買ってもよし。はたまたスイッチサイエンスで買ってもよしだ。

Raspberry Pi Picoは基本Wi-Fi機能とかの無線機能がなく、OSも入らない本当にシンプルなマイクロコントローラーだから余計な機能はいらないっていう今回の俺みたいな人にぴったりなマイコンボードなんだ。

なぜならっていう理由を後述する。

RaspberryPi Picoで100vオフタイマー

AC-DCコンバータ

これは外付けにすれば一般的なUSBアダプターがあれば事足りるが装置に組み込みデバイスとしていれる場合には必要になる。

Amazonだとさすがに適当なものが見つからずAliExpressで買うことにする。

AC DC 3.3 v/5v/12 高精度降圧コンバータ ac 220 に 5v dc ステップダウントランス電源モジュール 1A 12 ワット|Switching Power Supply| – AliExpress

Raspberry Piは5Vの直流で動く。だから普通のAC100Vから変換してやるかモバイルバッテリーみたいなのが必要だ。

だがモバイルバッテリーだとそっちが切れたら使い物にならなくなるから今回はAC-DCコンバータを使う。

かつてiPhoneやらAndroidスマホを新品で買うとほとんど付属していたACアダプターと同じ機能のものだ。

ただし今回使うのは表がきれいな箱で覆われていない基板むき出しのやつだ。それなら100円足らずで手に入るから。

逆に業務で使うんだったらむき出しのほうがプロっぽいwww。

ソリッドステートリレー(SSR)

これは適当なので安いのが秋月電子でしか見つからなかった。

ソリッド・ステート・リレー(SSR)キット 25A(20A)タイプ: 組立キット(モジュール) 秋月電子通商-電子部品・ネット通販

▼これの右の小さい基板がSSR

RaspberryPi Picoで100vオフタイマー

どうしてリレーの枕にソリッドステートというタイトルがついているのか知らん。

がしかしコンパクトでリレー特有のカチっという電磁石がついているでもなし、安いしこれは良いものかもしれない。

入力電圧は3V〜8Vで100Vの出力をON/OFFしてくれる。ちなみにリンク貼ってある秋月電子のSSRはキットになっていて自分ではんだ付けが必要なので注意。

上記の数点は必要な機材で、以下はなくてもできるもの。

分解して再利用する可能性あるなら要るもの

ブレッドボード

電子工作のあたりまえ、あるある、最近電子工作にハマり始めた俺はまだこのブレッドボードを素直にブレッドボードと呼ぶのにいささか恥じらいがある。

ど、ど、ど素人だから。

でもすべてはんだ付けで固めてしまうと分解してまたなにかに作り直したいときに面倒だから完全量産でないかぎり使うことをおすすめする。

ジャンパーワイヤー

ブレッドボードとともにこれも完全量産でないかぎりあったほうがいい。っていうかブレッドボード使ったらこれが必要になる。

すきなところに電線を繋げられるリード線ということ。

ジャンパーワイヤーには3種類あるので少々注意が必要だ。

  • オスーオスタイプ
  • メスーメスタイプ
  • オスーメスタイプ

今回はオス-オスタイプを使う。

ヘッダーピン

ブレッドボード、ジャンパーワイヤーとともに電子工作の基本三種の神器とでもいってしまってよいかもしれないのが最後のヘッダーピンだ。

ヘッダーピンにもオスタイプとメスタイプがある(メスはヘッダーピンと呼ばないか)が今回はオスタイプを使おう。Raspberry Pi Picoのボードに穴が空いているのでそこに通してはんだ付けするため。

作成の動機

ここで今回こういうものを作った動機について少し話を盛らせてほしい。

なにしろ業務上必要だったのだ。

ずぶの文系なのに装置物の研究開発に配属されいるが、電気を使うのでAC電源を使う。

AC電源を使うといえどもずーっと電源入れっぱなしだと危ないよねということで、じゃあ装置にタイマーつけようぜということになった。

当初はできあいですぐ使えるオフタイマーをネットで隈なくさがしていたがオフタイマーというのはまず見当たらないか見当たっても結構高い。数千円平気でする。

じゃあ、Iot機器でコンセントのオンオフをクラウド管理でやってくれるスマートプラグなるものがあるからそれ使っちゃえばいいじゃんって思ったのだがちょっとそれはそれで間抜け感が拭いきれない。

まるで開発を諦めましたって感じだ。

諦めるなら諦めるで一応やるだけやってみるかということで調べた結果、今回のようなものが形になったのだ。

ソフトウェア

ではハードが揃ったらセッティングしていこう。

プログラムコードをRaspberry Pi Picoに入れる方法について

いまさらRaspberry Pi Picoの初期設定なんてネット上に溢れかえっているのでここで説明するのは無駄だから省く。

以下リンクのいずれかまだ辿れるものがあったら参照すればわかると思う。

ただ詳細は置いておいても概要だけは述べておく。どのサイトもなかなか大枠について教えてくれないから素人からしたらこれをやるとどうなるのっていうのがわかりにくかったのだ。

  1. PC(MACでもよい)にてRaspberry Pi Picoのファームウェアをダウンロードする
    これをRaspberry Pi Picoに入れないと開発するよう応えてもらえないから必要なのだ。ただしそれはPythonでやる場合で違う言語で開発する場合はまた違ってくると思う。
  2. Raspberry Pi Picoをパソコンとつなげる(最初につなげるときはボタン押しながらUSB接続)
  3. ストレージモードでRaspberry Pi Picoがつながるのでそのルートフォルダに1でダウンロードしたファイルをコピーする
  4. そうするとRaspberry Pi Picoがファイルを消化していったん接続が途切れたような状態になりストレージとして見えなくなるが問題ない。ただしい動き。
  5. パソコンでの開発環境Thonnyをダウンロードしてインストールする。これを使ってユーザーがPython言語でプログラムを書き、Raspberry Pi Picoへの書き込みまでやってくれるソフトである。
    参考↓
    ラズベリー・パイPicoマイコン スタートアップ・マニュアル
  6. 何度かデバッグをやって出来上がったらパソコンからUSBケーブルを外して他のバッテリーやらACDCコンバータと接続しても同様の動きをすれば完了

参考リンク

Thonny開発環境で最初にやること

Thonny開発環境でやることは

  1. メニュー→ツール→オプション→インタプリタタブ→デバイス選択でMicroPython(Raspberry Pi Pico)
  2. 同じウィンドウでPort選択はTry to detect port automaticallyのままで大丈夫だったが、Raspberry Pi Picoが繋がっているポートが選べれば選んでおいたほうがよいらしい

プログラムコード

当初はタイマー割り込みとか使わなアカンの?って寒々としていたが作り上がったものを見たらなんのことはないスリープいれればいいだけじゃんみたいな。

では1行ずつ解説しておく。

import machine
import utime

from machine import Pin

#ディップスイッチ1桁目秒数定義以下同様
Dig_0_Sec = 5 #30分なら800
Dig_1_Sec = 10 #1時間=3600
Dig_2_Sec = 20 #2時間=7200
Dig_3_Sec = 40 #4時間=14400
led = Pin(25, Pin.OUT)
sw_AC = Pin(15, Pin.OUT)

led.value(1)
num = 1 #ループ状態スイッチ
sw_0 = Pin(0, Pin.IN) #1桁目用ピン設定
sw_1 = Pin(1, Pin.IN) #2桁目用ピン設定
sw_2 = Pin(2, Pin.IN) #3桁目用ピン設定
sw_3 = Pin(3, Pin.IN) #4桁目用ピン設定
r0 = sw_0.value()
r1 = sw_1.value()
r2 = sw_2.value()
r3 = sw_3.value()
OffTimerSec = r0 * Dig_0_Sec + r1 * Dig_1_Sec + r2 * Dig_2_Sec + r3 * Dig_3_Sec  

while num > 0:
    sw_AC.value(1)
    utime.sleep(OffTimerSec)
    led.value(0)
    sw_AC.value(0)
    num = 0

import machine #・・・マシンクラスをインポートするっていったらただの直訳だけど、いろいろmachineには詰まってるだろうから重要。あまり気にしないでおく。

import utime #・・・時間の管理をしたいときにはこれをインポートしておくとスリープ操作ができるんだろうなって解釈している。

from machine import Pin #・・・マシンクラスからPinというオブジェクトをハンドリングして操作できるようにする

#▼ここは便宜上本番数値にしないで短時間で試験できるように5秒とか10秒とか短い時間を定義している#4桁ディップスイッチを使う前提で2進数で設定時間を累積するつもり
Dig_0_Sec = 5 #単位ディップスイッチ1桁目秒数定義以下同様 30分なら800
Dig_1_Sec = 10 #1時間=3600
Dig_2_Sec = 20 #2時間=7200
Dig_3_Sec = 40 #4時間=14400

led = Pin(25, Pin.OUT) #・・・LEDがつくところは一応ランプもついでに光らせているだけ

sw_AC = Pin(15, Pin.OUT) #・・・GP15ポートをAC電源リレー出力にする

led.value(1) #・・・稼働中はLED光らせるということ

num = 1 #・・・ループ状態スイッチ

sw_0 = Pin(0, Pin.IN) #・・・1桁目用ピンとしてGP0設定
sw_1 = Pin(1, Pin.IN) #・・・同じく2桁目用ピン設定
sw_2 = Pin(2, Pin.IN) #・・・同じく3桁目用ピン設定
sw_3 = Pin(3, Pin.IN) #・・・同じく4桁目用ピン設定

r0 = sw_0.value() #・・・ディップスイッチ0番を読む(1か0が入る)
r1 = sw_1.value() #・・・同じくディップスイッチ1
r2 = sw_2.value() #・・・同じくディップスイッチ2
r3 = sw_3.value() #・・・同じくディップスイッチ3

OffTimerSec = r0 * Dig_0_Sec + r1 * Dig_1_Sec + r2 * Dig_2_Sec + r3 * Dig_3_Sec #・・・ディップスイッチの立ってるものだけ秒数として加算する→OffTimerSecがスリープ時間となる

while num > 0: #・・・numが0より大きい間以下を繰り返す
sw_AC.value(1) #・・・ACリレーにONを出力
utime.sleep(OffTimerSec) #・・・指定時間だけスリープする(ACはONのまま)
led.value(0) #・・・スリープ終了後LED消す
sw_AC.value(0) #・・・同じくスリープ終了後ACリレーをオフにする
num = 0 #・・・ループを終わらせることで再びACがONにならないようにする

4桁のディップスイッチのすべてのビットを使って時間設定をしているが、これをさらに応用して全ビットがオフだったら無制限にACをONにするとか、3ビットは時間設定に使って1ビットは繰り返しON/OFFの設定にするとかってやってもよいだろう。

もっと安くしたい

Raspberry Pi Picoも安いことは安いがそれでも今回のようにタイマーとして使うだけならオーバースペックだ。

ただいま別のボードを探して取寄中なので入手したらコスト改善として治す。ただし使用する言語がPythonではなくなるはずなのでまた文法の勉強が必要になるがアルゴリズムはできているので大した話ではない。

できたらここに追記するか新しい記事にしてリンクを追記したいと思う。

タイトルとURLをコピーしました