【ラズパイPico】リードスイッチでドアの開閉を監視・検知してみた【リクエスト】

Поділитися
Вставка
  • Опубліковано 18 бер 2021
  • 前の動画→ • 【ラズパイPico】マウス・キーボードを自動...
    リクエストにお応えしてRaspberry Pi Picoとリードスイッチでドアの開閉検知デバイスを作ってみました。
    今回は冷蔵庫のドアに取り付けましたが、窓や玄関に取り付ければセキュリティ用途や人の出入りの監視にも活用できると思います。ぜひこの動画を参考に試してみてください!
    ----以下、今回の動画で使用したコードです---
    ※概要欄の制約上、「>」を全角に置き換えています
    必要なモジュールをインポート
    import machine
    import time
    警告を出す秒数
    alart_secs = 30
    Pico内蔵LEDのPinを定義
    pled = machine.Pin(25, machine.Pin.OUT)
    電子ブザーのPinを定義
    buzzer = machine.Pin(19, machine.Pin.OUT)
    リードスイッチ1のPinを定義
    door1 = machine.Pin(1, machine.Pin.IN, machine.Pin.PULL_UP)
    リードスイッチ2のPinを定義
    door2 = machine.Pin(5, machine.Pin.IN, machine.Pin.PULL_UP)
    初期化
    pled.off()
    buzzer.off()
    ドアが開いた時間(0ならドアは閉まっていたことになる)
    door1_time = 0
    door2_time = 0
    引数:[ドア開時刻, リードスイッチの状態]
    戻値:[LED状態, ブザー状態, ドア開時刻]
    def GetLswStatus(door_time,value):
    1秒前にドアは閉まっていた
    if(door_time == 0):
    今も閉まっている
    if(value == 0):
    return [False,False,0]
    今は開いている
    else:
    return [True,False,time.ticks_ms()]
    else:
    1秒前にドアは開いていた
    if(value == 0):
    今は閉まってる
    return [False,False,0]
    else:
    今も開いてる: 開いた時からの差分を取得
    door_diff = time.ticks_diff(time.ticks_ms(), door_time)
    所定時間以上ドアが開いている場合
    if ((door_diff/1000) > alart_secs):
    LEDを点滅
    if(pled.value() == 0):
    return [True,True,door_time]
    else:
    return [False,True,door_time]
    else:
    ドアは開いてるけどまだ所定時間に達していない
    return [True,False,door_time]
    while True:
    res1 = GetLswStatus(door1_time,door1.value())
    door1_time = res1[2]
    res2 = GetLswStatus(door2_time,door2.value())
    door2_time = res2[2]
    LED制御
    if(res1[0] or res2[0]):
    pled.on()
    else:
    pled.off()
    ブザー制御
    if(res1[1] or res2[1]):
    buzzer.on()
    else:
    buzzer.off()
    time.sleep(0.5)
  • Наука та технологія

КОМЕНТАРІ • 53

  • @_lite8945
    @_lite8945 3 роки тому +2

    リクエストが実現して嬉しいです!

    • @Shartick
      @Shartick  3 роки тому +1

      遅くなりましたが動画化できました!リクエスト有難うございます!
      …こんな感じでよかったですかね?😂

  • @Inuyama_unagi
    @Inuyama_unagi 3 роки тому +1

    これは良いですね!

    • @Shartick
      @Shartick  3 роки тому +1

      ありがとうございます!
      リードスイッチの勉強がてら作ってみましたが実用的なものができてよかったです。
      ほかの用途にも転用できそうですし色々な使い道がありそうです。

  • @MichaelKingsfordGray
    @MichaelKingsfordGray 2 роки тому

    Arigato Gozaimashita Sensei, from Australia.

    • @Shartick
      @Shartick  2 роки тому

      Douitashimashite! Kochirakoso Komento Arigatou Gozaimasu.

  • @eggplant2095
    @eggplant2095 3 роки тому

    # 所定時間以上ドアが開いている場合
      if ((door_diff/1000) > alart_secs): の 1000とは何のことなのでしょうか?
    全然プログラミングのことがわからないので、教えていだだけたら嬉しいです。

    • @Shartick
      @Shartick  3 роки тому +1

      ticks_ms()はミリ秒(1/1000秒)の数値を返してくれる関数なので、これを1000で割ってやると単位が秒になります。
      冒頭でalart_secsを30秒と定義したので、大小比較をする時に単位を秒に合わせる為に/1000しています。

  • @ichio461
    @ichio461 2 роки тому

    リードスイッチの思い出として、ガラス管部分よりも、足の部分に磁石を向けた方が、反応距離が長くなる。というのを思い出しました。
    コア部分が弱点に見えたが、実は目立たない地味な部分が弱点だった、見たいな感覚でしたw

    • @Shartick
      @Shartick  2 роки тому +1

      今回初めてリードスイッチを触って私も同じことを思いました!
      どう見てもガラス管が本体っぽいんですけどね…w

  • @fugaku1480
    @fugaku1480 3 роки тому

    かなり前(8ビットCPUの時代)に使っていた富士通のキーボードを押すとリードスイッチの音がしていました。
    リードスイッチの工作をしたことは無いのですが、磁気を使ったスイッチと考えています。

    • @Shartick
      @Shartick  3 роки тому

      リードスイッチを使ったキーボードがあったんですね!それは存じ上げませんでした。ぜひ一度触ってみたいものです。

  • @user-wo7hp9wn9r
    @user-wo7hp9wn9r 3 місяці тому

    OpenPLCでプログラムを作成する方が簡単ですね。

  • @user-ew8zu5ob2o
    @user-ew8zu5ob2o 6 місяців тому

    学校でPython習ってるけど、
    難しすぎて身の回りで応用できる気がしないw

  • @kaoruh5658
    @kaoruh5658 2 роки тому +2

    MicroPythonの初学者なので、このような解説はためになります。ありがとうございます。
    もっとも自分で作る時には、6ピンか8ピンのPICマイコンのアセンブラで組むかなぁ。(*^_^*)

    • @Shartick
      @Shartick  2 роки тому +2

      動画をご覧くださいありがとうございます。マイコン初心者なりに四苦八苦した末の動画ですが、少しでもご参考になれば幸いです。
      アセンブラとは相当な熟練者とお見受けします。私はまだまだ不勉強でC言語とPythonぐらいしかわかりません。
      マイコンは奥が深く、噛めば噛むほど面白いですね。またコメントでご教示いただければ幸いです。

    • @resistancesk5028
      @resistancesk5028 2 місяці тому

      PICだったら
      リードスイッチの入力ピンが変化したら割り込みが入るように設定して
      リードスイッチが変化した際の割り込みで
      リードスイッチが導通していない場合は
      ハードウェアタイマーを3秒でオーバーフローするようにスタートさせて
      タイマーオーバーフロー割り込みでハードウェアPWMのブザーを鳴らす。
      リードスイッチが変化した時の割り込みで
      リードスイッチが導通していたらタイマーを無効化および初期化とブザーの停止処理
      みたいな感じにすればループなしで作れますよね。
      ラズパイPicoでも似たような感じの設計にした方がいいかもしれません。

  • @ledblack2474
    @ledblack2474 2 роки тому +1

    物つくりは楽しいですよね
    リードスイッチでは扉の開閉隙間の調整が、難しくないですか
    圧力センサーなら扉が閉まったことを感知できるので、今回の目的に合っているかも

    • @Shartick
      @Shartick  2 роки тому

      コメントありがとうございます。
      今回はリードスイッチありきで自分用に作ったのであまり困ってませんが、市販の冷蔵庫のようなドアスイッチにした方が利便性は高そうですね。
      次回は圧力センサーを試してみたいと思います!ありがとうございます。

  • @Dont_run_away_from_change.
    @Dont_run_away_from_change. 2 роки тому

    電源の供給はどの様に行われておりますか?
    コンセント→ACアダプター→ラズパイ
    でしょうか?

    • @Shartick
      @Shartick  2 роки тому

      はい、そのとおりでACアダプタを使っています。検証中はPCのUSBを使うこともあります。

  • @user-ts4ef7ns3q
    @user-ts4ef7ns3q 3 роки тому

    自転車のホイールに磁石を、フロントフォークにリードスイッチをつければ、オンになる間隔からホイールの回転数を測定して、自転車の速度計なんか作れたりしますかね...?

    • @user-ts4ef7ns3q
      @user-ts4ef7ns3q 3 роки тому +1

      サイクルコンピュータの仕組みを調べたところ、全くそのままでした...笑
      コメント欄で勝手に盛り上がってしまい、すみませんでした...

    • @Shartick
      @Shartick  3 роки тому

      お見事です👏
      私も動画作る際に調べたのですが、まさにこのリードスイッチで実現しています。
      部品サイズの関係上、スポークの方に小さな磁石、フレーム側にリードスイッチや電池などを内蔵した「本体」を取り付けることが多いようです(改めて確認したら私が持ってるサイクルコンピュータもそうでした)

  • @moritashigeru
    @moritashigeru 2 роки тому

    リードスイッチを直列に繋げばいいんじゃない?  ウチは6ドア冷蔵庫なのでスイッチを6個直列で繋いでやってます。

    • @Shartick
      @Shartick  2 роки тому +1

      今回は2ドアで数が少なかったのと、それぞれのドアで違う制御を入れる可能性を考えて別々の回路にしましたが、6ドアとなると直列に繋いだ方が良さそうですね。
      とても参考になるご意見ありがとうございます!

  • @asa_212
    @asa_212 3 роки тому

    リクエスト
    ラズベリーパイで7セグメントLEDを光らせる方法が知りたいです

    • @Shartick
      @Shartick  3 роки тому

      リクエストありがとうございます!!
      デスマーチ社畜生活から抜け出したら必ず動画作ります!

  • @Hemyu
    @Hemyu 3 роки тому +4

    うちはポストになにか投函(リードスイッチで検知)されたら、ポストの中を撮影してLINEで送ってもらうようにしてます。 再配達って17時までが多いので、仕事終わって家に帰る前に依頼出せるから便利('ω')
    プログラムは誰かの作ったものの流用だけど。

    • @Shartick
      @Shartick  3 роки тому

      ポストにセンサー、めっちゃ便利そうですね!
      私もほんと再配達が煩わしいので何とかしようと光センサーを買っていたのですが、リードスイッチの方が確実に検出できそうですね。
      電源が遠いのでどうするかだけがネックになっています…。

    • @Hemyu
      @Hemyu 3 роки тому

      @@Shartick うちの電源は20Wくらいのソーラーパネル+バイクのバッテリーです。1年ほど使ってますが、問題なく動いてますよ。

    • @Shartick
      @Shartick  3 роки тому

      ソーラー+バッテリーはとてもいいアイデアですね!ぜひ参考にさせていただきます😆

  • @19591122
    @19591122 2 роки тому

    # 1秒前にドアは閉まっていた
    if(door_time == 0):
    # 今も閉まっている
    if(value == 0):
    return [False,False,0]
    # 今は開いている
    else:
    return [True,False,time.ticks_ms()]
    else:
    # 1秒前にドアは開いていた
    if(value == 0):
    # 今は閉まってる
    return [False,False,0]
    1秒前がどうでも、今、閉まっていれば
    return [False,False,0]
    するから、
    if(door_time == 0):
    より先に
    if(value == 0):
    を判断した方が単純なプログラムになると思います。
    いかがでしょう?

    • @Shartick
      @Shartick  2 роки тому +1

      はい、その通りです👏
      サンプルコードではステップが分かりやすいようにif elseをかなり冗長に書いています。
      丸々コピペというのも面白くないでしょうから、ぜひお好みに合わせて最適化するなど手を加えてみてください😆

  • @user-ts3vi7tj1o
    @user-ts3vi7tj1o 2 роки тому

    ラズパイ4でもこのプログラムは
    動くでしょうか?

    • @Shartick
      @Shartick  2 роки тому

      冒頭のimportとそれに伴うPin制御の記述はラズパイ4向けに書き換える必要がありますが、それ以外は通常のPythonでも動作すると思います!

    • @user-ts3vi7tj1o
      @user-ts3vi7tj1o 2 роки тому

      @@Shartick 分かりました。ありがとうございます

  • @koneko_chan_w
    @koneko_chan_w 2 роки тому

    我が家の冷蔵庫は一定時間でアラームなります。

    • @Shartick
      @Shartick  2 роки тому +1

      コメントありがとうございます!
      最近の冷蔵庫にはアラームがあるみたいですね。我が家のは古いので羨ましいです。

  • @ken6261
    @ken6261 3 роки тому

    なかなかオーバースペックですね!
    タイマーIC 555とかでいいのでは

    • @Shartick
      @Shartick  3 роки тому +1

      コメントありがとうございます。
      この動画は「ラズパイPicoとリードスイッチで簡単なものを作ってみる」が主目的なので😅 最終目的が「ドア開閉検出器を作ること」であればご指摘のとおりもっと適した方法があると思います。555はタイマーICの王道ですから、いつか「電子工作」を主眼に置いた動画も作ってみたいですね!

    • @ken6261
      @ken6261 3 роки тому

      @@Shartick
      それは失礼しました、自分もラズパイとM5stackの勉強中なので参考にさせて頂きます。

  • @zutuku
    @zutuku 3 роки тому

    磁石は、seria製?

    • @Shartick
      @Shartick  3 роки тому

      この磁石はキャンドゥで買ったものです。
      だいたい何処の100円ショップでもこの手の磁石を取り扱っているみたいで助かります。

  • @waisneos7082
    @waisneos7082 3 роки тому

    はえー そんな簡単な仕組みなんか

    • @Shartick
      @Shartick  3 роки тому

      そうなんですよ。調べてみてびっくりしました。
      いかつい基板でも入ってるのかと思ったらぽつんとガラス管が入ってるみたいです。

  • @seatron6135
    @seatron6135 3 роки тому

    思った以上に小さかった

    • @Shartick
      @Shartick  3 роки тому +1

      そうなんですよ、小さいですよね!
      磁石が反応する範囲も小さくてドア側に設置する磁石の位置調整が大変でした。