ラズパイ Zeroでリレーモジュールを使ってみる のPico 版です。
OSで動くコンピュータを使っていましたが、今回はOSなしのマイコンです。
こういうセットです。
赤外線障害物検知センサーの反応で100均のLEDライトをON/OFFします。
Raspberry Pi Pico
Relay Module
赤外線障害物検知センサー
100均 モバイルバッテリー
100均 USB 2LED ライト (USBでなくても可)
モバイルバッテリーには注意が必要です。
Pico は比較的低電流で動作しているのでライトがOFFの場合、バッテリーによってはオートパワーオフがかかってしまうことがあります。勝手に電源供給が停止してしまわないものを使います(100均の製品は問題ありませんでした)。
2LEDライトの電源もPico から取っています。
(オレンジとグレイの線です)
結線図
2LEDライトの改造などについて
ラズパイ Zeroでリレーモジュールを使ってみる を参照ください
Pico ではMicroPython とArduino IDE の両方を使ってみます。
MicroPython のファームウェアの設定などについては
Pi PicoにMicroPythonをセットアップして実行してみる(メモ)を参照ください。
MicroPython
Python でライトのON/OFFは赤外線障害物検知センサーを使ってみます。
赤外線障害物検知 センサモジュール(メモ)を参照ください。
OUT はGP21と結線
VCC は3V3 (OUT)と結線
Pico + MicroPython でリレーモジュールを使ってみます。
元ネタ IoT Controlled Relay using Raspberry Pi Pico W WiFi
ラズパイを母艦にして、Thonny を起動してコーディングします。
センサーに手をかざしたり外したりしてライトをON/OFFするコードは以下のとおり。
main.pyという名称でPico のフラッシュメモリーに保存します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
from machine import Pin import utime #初期設定 ir=Pin(21,Pin.IN) relay=Pin(17,Pin.OUT) #赤外線センサーの反応で1回のみ実行するためのフラグ A = 0 B = 0 while True: try: if ir.value()==1: if A == 0: print("Released!") #消灯 relay.value(0) A = 1 B = 0 elif ir.value()==0: if B == 0: print("Detected!") #点灯 relay.value(1) B = 1 A = 0 utime.sleep(0.5) except KeyboardInterrupt: break |
Pico をモバイルバッテリに接続して給電が開始されれば、自動的にmain.pyが起動します。
Arduino IDE
Arduino IDEで赤外線障害物検知センサー
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
const int irPin = 21; int irState = 0;//default 1 , responce 0 void setup() { // put your setup code here, to run once: Serial.begin(115200); pinMode(irPin, INPUT); } void loop() { // put your main code here, to run repeatedly: irState = digitalRead(irPin); Serial.println(irState); } |
リレーモジュールでLチカしてみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
const int relayPin = 17; void L_chica(){ digitalWrite(relayPin , HIGH); delay(1000); digitalWrite(relayPin ,LOW); delay(1000); } void setup() { // put your setup code here, to run once: pinMode(relayPin ,OUTPUT); } void loop() { // put your main code here, to run repeatedly: L_chica(); } |
まとめてみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
const int relayPin = 17; const int irPin = 21; int irState = 0;//default 1 , responce 0 void setup() { // put your setup code here, to run once: pinMode(relayPin,OUTPUT); pinMode(irPin, INPUT); } void loop() { // put your main code here, to run repeatedly: irState = digitalRead(irPin); if (irState == 0){ digitalWrite(relayPin, HIGH); }else if (irState == 1){ digitalWrite(relayPin, LOW); } } |
上記のPython版と同様にセンサーに手をかざしたり外したりしてLEDをON・OFFします。
Leave a Reply