サーボモーターをRaspberryPiで動かす-スイッチボットの自作(1)

これまで、Iot(モノのインターネット化)を農業に活用する為、色々な事にチャレンジしてきました。

温度・湿度のロガーを作ったり、自動水やりシステム構築したり・・

ラズパイで温湿度を測定しGoogleスプレッドシートに送る-農家のIoT入門(6)
DS18B20の測定温度をGoogleスプレッドシートに送る-農家のIoT入門(9)
RaspberryPiで自動水やりシステムの構築ー農家のiot入門(11)

さて今回は、「スイッチを自動もしくは遠隔でON-OFFする」に挑戦です。

これは、Iotを始める際にどうしてもやりたかったことのひとつでもあります。

スイッチを押さないと動かない機械、結構ありますので。

もしくは、スイッチを押さないと運転モードが変わらない機械とかもそうですね。

そのあたりの自動化を、ずっとやりたかったのです。

それから、最終的には「温度や湿度の変化に合わせてスイッチのON-OFF」「時間に合わせてON-OFF」「複数のスイッチの切り替え」なども挑戦するつもりです。

スイッチのIot化にはスイッチボットがある

・・と目標を立てましたが、スイッチのON-OFFを遠隔で行うだけなら、すでに商品化されている物があります。

中でも有名なのが、スイッチボット(SwitchBot)

あらゆる家電の自動化を目指している商品で、スマホとの連動など色々な事が出来るようです。

世界中で、かなり売れているみたいです。

ただ、割といいお値段するんですよねぇ・・・

スイッチ1個で4000円ほど。

それにリモコン(ハブ)が7000円ほど。

気軽に使うにはちょっとお高い。

スイッチ自体はリモコンを使わずにRaspberryPiで動かす事も出来るようですけど、だったらわざわざスイッチボットを使う必要もあまり無いかな・・?といった感じです。

サーボモーターをRaspberryPiで動かす

という事で、スイッチボットを自作する事にしました。

これまでの農家のIotシリーズ同様、なんでも出来ちゃうRaspberryPiを使います。

スイッチを押すのは、サーボモーターで行います。

電子工作でよく使われるサーボモーターがあるようなので、それを購入しました。

1個500円ほどと、安い!

なお、ほぼ同等品のSG90Rと比べて、こちらのSG92Rの方が少しトルクが高くなっています。

スイッチを押すなら、トルクが高い方が良さそうでしたので。

そしてサーボモーターをRaspberryPiで動かす方法は、調べるとかなりたくさんありました。

そのいくつかを試してみたのですが、思った以上にうまく動かないケースが多くて・・・

  • サーボの動きが不安定(カクカクする)
  • 指定角度に動かない
  • 動きに再現性が無い

何が要因なのか調べるのも大変なので、うまく動いたプログラムを使うことにします。

  1. import pigpio
  2. import time
  3. SERVO_PIN = 23
  4. pi = pigpio.pi()
  5. pi.set_servo_pulsewidth(SERVO_PIN, 1620)
  6. time.sleep(1.0)
  7. pi.set_servo_pulsewidth(SERVO_PIN, 2000)
  8. time.sleep(1.0)
  9. exit()

1行目:サーボを動かす機能満載のpigpioライブラリを入れる(ラズパイにはインストール済み)
4行目:GPIO23ピンをサーボの制御信号用に指定。
6行目・8行目:サーボを指定角度で動かす。SG92Rなら500~2500の間で180度だが、500付近・2500付近は動作が不安定になりがち。
7行目・9行目:サーボを動かした後は、一瞬でもsleepでインターバルを取らないと、うまく動かない様子

スイッチを押す為に、サーボモーターが回って戻る。それだけの実にシンプルなプログラム。

配線は、SG92Rの茶色がGND・中央の赤?が電源・橙?が制御信号です。

動作電圧は4.8Vなので、RaspberryPiの5Vピンに刺しましたが、安定した動作をさせるのであれば外部電源から取った方が良いそうです。

今回はサーボモーター1個ですし、RaspberryPiのACアダプターも3Aと高出力ですので、そのままRaspberryPiのピンから取っています。

制御信号線は、GPIO4を使うコードを良く見るのですが、それだとなぜかうまく動かないのです。

どこかのブログで、サーボを動かすには特定のGPIOピンが良い・・と書いてあった気がするのですが、どこで見たのか思い出せず(^_^;)

ただ、私の場合はGPIO23ですとうまく動きました。

配線終了後、プログラムを起動するとこんな感じで動きます。
(わかりやすいよう、動きを2回繰り返すように変えています)

キビキビ動いてますね!

 

無事サーボモーターが動きましたので、次回はこれを押したいスイッチの横に取り付け、遠隔操作できるか試してみる事にします。