「Raspberry Pi Zero W」タグアーカイブ

2020年 Node-RED利用履歴

HomeMadeGarbage Advent Calendar 2020 |10日目
Node-RED Advent Calendar 2020| 10日目

今年もNode-REDには大変お世話になりました。
Node-REDと私の距離感を改めて確認するべく今年の使用実績を記載いたします。

来年は更に理解を深めNode-REDと密接となり、活用できればと願っております。
 

 

モータ駆動

Raspberry Pi

ラズパイZERO WでNode-REDを起動して、コントローラ信号を受信してモータ駆動するラジコンを製作しました。

Raspberry Pi Zero W でFPVラジコンカー自作

 

PCにつないだゲームパッドの入力をOSC(OpenSound Control)通信でラズパイに送信し、モータを駆動しています。

またラズパイカメラによる映像を WebRTC Native Client Momo を用いてPCブラウザに転送しています。

 

 

同じシステムを用いてニセ マリオカート ライブ も自作しましたw

WebRTC Native Client Momo で FPVラジコンを堪能

 

Jetson Nano

Jetson NanoでもNode-REDを使用してモータ駆動を実施しました。

ちゃお 2017年4月号付録のお掃除ロボをハック!

 

以下はJetson Nanoで起動したNode-REDからサーボモータを動かしている様子です。


 

UDP

Node-REDでUDPを送受信し各種マイコンやセンサとのデータのやり取りを楽しみました。

UDP送信

以下ではラズパイ2のNode-REDから定時で発話のmp3 URLをUDPで
ATOM Echoに送信し、ストリーミング再生してます。

ラズパイで気圧測定

 

 

UDP受信

AIコアとESP32を搭載したマイコンMaixduinoに温度センサpHセンサを接続してUDP送信して、
PC上のNode-REDで受信しデータ確認いたしました。

Maixduino で温度、pHデータをUDP送信 ーエッジAI活用への道 10ー

 

Raspberry Pi で 金魚水槽管理システム を構築

HomeMadeGarbage Advent Calendar 2020 |4日目
Raspberry Pi Advent Calendar 2020 |4日目

これまでESP32等で構成していた我が家の金魚水槽システムですが、
この度メンテナンスのし易さや拡張性の高さから制御をRaspberry Pi で実施することにいたしました。

☟従来型の構成は以下の通りです。
家のローカルネットワーク内で水槽の監視・管理を実施しておりました

金魚水槽のフィルターをブクブクから外掛けフィルターへグレードアップ

 

外出時にも対応したいと考え、外部監視・制御にはセキュリティの観点からATOM CamやAlexaアプリの既存のサービスの使用を採用いたしました。

 

 

システム概要

本システムの機能は以下の通りです。

  • 水槽LED照明のON/OFF
  • 自動エサあげ機構
  • 水槽の水温、pHの監視

いずれも自宅内でWebページからの制御・監視が可能で
さらにAlexaアプリと連動させてスマートスピーカ Amazon Echo dot での音声による制御も可能です。
水温、pHについては以前製作した我が家のコンシェルジュのおしゃべりティラノくんに発話で報告させることができます。

外出先からのエサあげ等の制御にはAlexaアプリを用いてスマホで実施し、
遠隔監視にはネットワークカメラ ATOM Cam を使用いたします。

 

構成

以下が本システムの構成図です。
Raspberry Pi Zero W のGPIO端子に照明用のテープLED、温度センサ、エサあげ用ソレノイドを接続し、
pHセンサをマイコンを介してUSB Host端子に接続しています。

部品

  • Raspberry Pi Zero W

     
  • フルカラーLED Neopixel (WS2812B ) 48セル

     
  • 防水温度センサ DS18B20

     
  • pHセンサ PH-4502C

     
  • Arduino Pro Micro 互換ボード

     
  • ソレノイド

     
  • N-MOSFET IRF520PBF

     
  • ダイオード 1N5819

     
  • MOSFET駆動用レベルシフタ

 

各部品の動作確認

本システムはNode-REDで構築しております。
ここでは各接続部品のNode-REDによる動作確認を行います。

Neopixel制御

NeoPixel用のNode-REDノードは存在し以下を参考に導入致しました。
 https://www.npmjs.com/package/node-red-node-pi-neopixel

NeoPixelの信号線をラズパイの12ピン(GPIO 18)し、
以下のようにrpi-neopixelsノードにカラーコードを送るとLEDが点灯いたします。

自動エサあげ機構

エサあげの機構には タカハ製の5Vプッシュソレノイド SSBC-0830/SSBC-0830-01(7.5Ω) を使用いたしました。

筐体は3Dプリンタで製作いたしました。

 

構成は以下の通り

Node-REDでラズパイのGPIOピンを制御して
ソレノイドに5V印可してエサが押し出される仕組みにしました。

水温計

水温系として1 wire温度センサ DS18B20を使用いたしました。

DS18B20のNode-REDノードも存在し、以下を参考に導入致しました。
 https://www.denshi.club/pc/raspi/iot6.html

DS18B20の出力をラズパイの7ピン(GPIO 4)に接続します。

pH計

pH計にはアナログ出力の PH-4502C を使用しました。

センサの校正方法など詳細は以下を参照ください。

pHセンサを味見 ーエッジAI活用への道 7ー

 

ラズパイにはアナログ値の入力ピンがないためArduino互換マイコンのアナログピンにpHセンサ出力を接続し、シリアルでpH値を出力します。

ラズパイのUSB Hostコネクタにマイコンを接続してシリアルでpH値を受信します。

シリアル通信Node-REDノードは以下を使用しました。
 https://flows.nodered.org/node/node-red-node-serialport

 

マイコンArduinoコード

シリアルで文字”1″が入力されるとpHをシリアル出力します。

 

Node-red自動起動設定

以下のコマンドの実行でラズパイ起動で自動的にNode-REDも起動します。

 

水槽システム Node-REDフロー

水槽LED制御

水槽の照明としてLEDテープを48セル設置し、WebページやAlexaによる音声でON/OFF 制御します。

 

① LED ON functionノード

次段に全白のLEDカラーコード(#FFFFFF)を送信します。

 

② LED OFF functionノード

次段にLED消灯カラーコード(#000000)を送信します。

 

③rpi-neopixelsノード

前段からの色信号(ON:#FFFFFF / OFF:#000000)を受けてLEDを制御します。
輝度は30%としています。

エサあげソレノイド制御

WebページやAlexaによる音声でラズパイのGPIO23をON/OFFしソレノイドを 制御します。

 

① ソレノイド ON functionノード

次段に数値1を送ります。

 

② LED OFF functionノード

ON function後200msecの遅延後に次段に数値0を送ります。

 

③ rpi-gpio outノード

前段からの信号を受けてソレノイドを制御します。200msecの間だけ数値1がきてGPIO23がONになりソレノイドに電流が供給されエサが押し出されます。

ラズパイのGPIO制御ノードでGPIO23を制御します。

 

水温・pH測定

Alexaによる音声で起動しおしゃべりティラノくんに発話で水温とpHを報告させます。

 

① rpi-ds18b20ノード

rpi-ds18b20ノード で水温を取得します。

 

② functionノード

前段からの水温を小数点第1位で丸めて変数waterに格納し、
次段に”1″の文字を送信。

 

serial requestノード

前段の文字”1″を受けてpHセンサ値を次段に返します。

 

④ functionノード

前段からのpH値を変数phに格納

 

⑤ templateノード

水温とpHの測定値を受けて、発話内容を生成します。

 

⑥ google-ttsノード

Google Text to Speech APIを呼び出すgoogle-ttsノードを使用しました。
 https://flows.nodered.org/node/node-red-contrib-google-tts

前段からの発話内容を入力して発話のmp3 URLを返します。
言語は日本語(ja-JP)を指定しています。

 

⑦ udp outノード

前段で生成されたmp3 URLをUDPで おしゃべりティラノくんに送信して発話させます。

Webページ生成

“ラズパイのNode-REDのURL/aquarium”にアクセスでWebページを生成します。

ブラウザ表示前に水温とpHを計ってtemplateノードに渡しています。
templateノードにWeb表示用コードを記述しています。

以下がWebページ画面です。

“ごはんをあげる”ボタンで/feedにGETリクエストを投げてソレノイド制御します。
LEDのON/OFFスイッチで/on または /offのGETリクエストを投げてLEDを制御します。

水温とpHの数値を表示します。

Alexa連動

Node-RED Alexa Home Skill Bridge というNode-REDノードを用いてAlexaと連動させ、システムの音声による制御を可能にしました。

Node-RED Alexa Home Skill Bridgeの設定等の詳細は以下を参照ください。
Node-RED Alexa Home Skill Bridge へのユーザ登録や、
スマホのAlexaアプリでNode-REDスキルを有効にしてAlexaサービスとNode-RED Alexa Home Skill Bridgeを紐づける必要があります。

ラズパイで気圧測定

 

デバイス登録

水質の発話報告を起動する”Aquarium”とエサやりソレノイドを起動する”Feed”と
LEDを起動する”水槽”を登録しました。

“水槽”はON/OFF動作させるのでActionにONとOFFを選択しました。

 

Node-RED

Node-REDに登録したデバイスのノードを配置します。

 

定型アクションを編集

以上で登録したデバイスをスマートスピーカAmazon Echoから起動させることが可能になりました。

デバイス”水槽”はLEDのON/OFFを制御するので「水槽つけて」、「水槽消して」で問題ないですが、
“Aquarium”と”Feed”はON/OFFの発話だと不自然なので
Alexaスマホアプリで定型アクションを登録しました。

「アレクサ、ご飯あげて」でデバイス”Feed”を起動してソレノイドを制御します。

 

「アレクサ、水質教えて」でデバイス”Aquarium”を起動してティラノくんに水温とpHを報告してもらいます。

 

動作

水槽設置前の動作テスト

 

ユニットはタッパに入れて水槽裏に設置いたしました。

Webページによる動作

音声による動作

遠隔動作

旅行先でもご飯の供給ができました!

 

追記

みんなラズパイコンテスト

本システムで今年もみんなのラズパイコンテストに応募いたしました。
受賞はできましたが3年連続となるスタートダッシュ賞をいただくことができました♪

マリオカート ライブ を自作

先日、任天堂が『マリオカート ライブ ホームサーキット』なるSwitchソフトの発売 (2020/10/16)を発表しました。
ラジコンカーにカメラが搭載され、自宅がサーキット場になるという画期的なシステムで大変驚きました。

すごく話題になり、まだ発売前ですし9月24日現在 予約も難しい状況。。。

しかたないので作りました。

 

 

ニセ マリオカート ライブ

まずは完成品の動作をご覧ください。

ゲームコントローラで操作できリアルタイムに機体のカメラからの映像を観ることができます!

システム概要

システムは以前、WebRTC Native Client Momo を用いて作ったショベルカーとほぼ同様です。

WebRTC Native Client Momo で FPVラジコンを堪能

Momoによる配信映像を観ながらゲームパッドでモータを制御します。
ゲームパッドの入力はOSC(OpenSound Control)通信でPCからラズパイに送信し、ラズパイカメラによる映像はMomoでPCブラウザに転送されます。

 

機体

機体は以前購入した有線のマリカーラジコンを改造して製作しました。

 
前輪はサーボで傾きを変えて右折左折を実現します。
後輪は元々搭載されていたDCモータを使用して前進後進を実現します。

 

構成

  • Raspberry Pi Zero WH

     
  • ラズパイカメラ

     
  • デュアルモータードライバDRV8835

  • モバイルバッテリ

 

 

制御系

以前の遠隔ショベルカーの時と同様に、TouchDesignerを使用してPCに接続したゲームパッドのボタンを検出してOSC送信でしました。

OSC信号をラズパイのnode-redアプリでうけて、モータとサーボを制御します。

 

Raspberry Pi Zero W について

Raspberry Pi Zero Wはスイッチサイエンスで購入可能ですが、1ユーザ1個までの数量制限があります。

仕方ないので今回はピンヘッダを実装済みのRaspberry Pi Zero WHを購入しました。
しかしコレピンの向きが嫌なんですよね。。。

ラズパイZeroの公式ケースに合わないんだもん。。。

 

しょうがなくピンを外して、実装しなおしました。

追記:本家プロトタイプ

なんと本家のマリオカート ライブのプロトタイプもラズパイZeroを使用しているようでした。

 

USB WiFi接続されてるからラズパイ Zeroでしょうね。Wじゃなく。

 

弊ニセ マリオカート ライブもなかなかいい線いっていたってことですねww

WebRTC Native Client Momo で FPVラジコンを堪能

またしてもTwitterですごいものを見つけました!

なんじゃこりゃー!全然遅延がないじゃないですか。。。
WebRTC Native Client Momoというものらしいです。

以前、ラズパイZeroでMJPEG-Streamerを用いたFPV(First Person View)ラジコンを作ってみたのですが
映像転送の遅延でリアルタイムには程遠いものでした。。

Raspberry Pi Zero W でFPVラジコンカー自作

ここではWebRTC Native Client Momoを用いて再びFPVラジコンを作製してみましたので報告いたします。
 

 

MJPEG-Streamer vs Momo 

まずはMomoの低遅延具合を全身で体感するべくMJPEG-Streamerと比較してみました。

MJPEG-Streamer

設定・使用方法はブログ参照ください。

Momo

ラズパイでの設定・使用方法は以下を参照ください。
 ・Raspberry Pi (Raspbian) で Momo を使ってみる

めちゃくちゃはやい!
やばい!

FPVラジコンの作製

Momoのリアルタイム性を体感できたので早速 FPVラジコンのリベンジです!

長男くんのショベルカーラジコンを改造しましたw

システム概要

Momoによる配信映像を観ながらゲームパッドでショベルカーをコントロールします。
ゲームパッドの入力はOSC(OpenSound Control)通信でPCからラズパイに送信し、ラズパイカメラによる映像はMomoでPCブラウザに転送されます。

ショベルカー構成

ショベルカーラジコンには左右のタイヤ用とアーム用の3つのDCモータが内蔵されていました。コントローラの配線を切ってモータドライバDRV8835を介してラズパイに接続しました。

部品

  • Raspberry Pi Zero WH

     
  • ラズパイカメラ

     
  • デュアルモータードライバDRV8835

  • モバイルバッテリ
     
  • 広角レンズ

 

視野角向上のために、広角レンズを装着しています。

動作

早速動作をみてください。

すごい!ラズパイZeroでFPVラジコンができてしまいました!
ちょっとタイヤが5V(モバイルバッテリの電圧)入力だと動画のように早すぎるので、
以後はPWM入力して速度低減しました。

 

PC側

ブラウザ(chrome)

ゲームパッドF310をつないでブラウザでMomoからの映像を確認します。
http://[ラズパイのIP]:8080/html/test.html で監視できます。

TouchDesigner

ゲームパッドの検出、OSC送信のためにTouchDesignerを使用しました。

ジョイスティックの十字キーとLRトリガを検出してラズパイにOSC送信します。
ポートは10000としました。

 

参考

Raspberry Pi Zero W側

Momo

ラズパイカメラの映像をMomoのテストモードで送信します。

参考

Node-RED

PCからのOSC信号をUDPノード(ポート10000)でうけて、OSC信号受信のために以下のノードを追加し挿入しました。
 node-red-contrib-osc

十字キーでタイヤのモータを制御して前後進、左右旋回します。
モータにはPWM入力(デューティ30%)してスピードを抑えています。

ゲームパッドのLRトリガでショベルカーのアームを上下します。

 

おわりに

WebRTC Native Client Momoを用いてFPVラジコンが実現できました!

いつかはもっと遠隔で屋外で試してみたいですね。

ハエトリソウ捕食監視システム

Raspberry Pi Advent Calendar 2019 | 5日目

長男くんがハエトリソウがハエを食べるところが見てみたいというので、ラズパイカメラで監視して捕食の瞬間を動画におさめるシステムを製作しました。

また こういったIoTシステムで一番問題となる電源の確保をソーラ発電によるエコエネルギーで実施したく同時にシステムに導入しました。

 

 
 

システム概要

システムはベランダに配置してラズパイカメラでハエトリソウを撮影しハエトリソウに虫を捕食するなどの動きがあるとその前後の動画を生成し、IFTTTを用いてケータイ端末に通知します。

電源はソーラパネルを使用して完全に自立したシステムとなります。

構成

ソーラパネルと鉛蓄電池をチャージコントローラに接続します。コントローラが出力する12Vをコンバータで5Vに変換してUSBコネクタで出力します。
負荷としてラズパイZero&ラズパイカメラをつなげます。

部品

 

太陽光発電システム

Indoor Corgi Elec.社製のESP32を搭載した太陽光発電充電コントローラE32-SolarChargerを使用します。マイクロSDカードスロットもありデータログを記録できます。

以下のサイトで製品概要やサンプルコードが提供されています。

Arduino IDEでカスタマイズも比較的簡単にできます。ESP32搭載ですのでWiFiで動作状況や設定変更が可能です。

E32-SolarCharger 概要

  • バッテリの電圧と充電電流を監視してPWM制御します。
  • 液晶ディスプレイにバッテリ電圧・電流、ソーラパネル発電電圧、動作モードを表示
  • 測定値のログをSDカードに保存。
  • 負荷とバッテリ間のスイッチでバッテリ電圧が低下した際に負荷の切断が可能。
  • ソーラパネル発電電圧を観測して8Vを下回ると(夜間)コントローラをディープスリープさせて負荷のスイッチもオフして消費電力を抑える。
  • ESP32のWiFi機能でブラウザで各種数値表示や動作モード変更が可能

ブラウザ表示 (設定)

ここではターゲットとするバッテリ充電電圧を13.8V、充電電流を1Aとしました。スリープモードは有効にしています。

充電動作

我が家のベランダは西向きで晴天時でも午前中の数時間しか満足に日照がなかったので、夜間はチャージコントローラをスリープし、さらに鉛蓄電池と負荷の間のスイッチをOFFして消費電力を低減します。夜は撮影しても見えませんので。

昼と夜間はソーラパネルによる発電電圧によって判断します (8V以下でスリープ、10V以上で解除)。

撮影システム

ラズパイZero Wにラズパイカメラを搭載しハエトリソウを撮影します。

撮影システムはNode-REDで構築しました。電源起動で自動に動作します。

Node-RED自動起動設定

以下のコマンドの実行でNode-REDがサービス化されラズパイ起動で自動的に起動します。
夜間からのスリープ明けの起床時にも自動でNode-RED起動します。

撮影Node-Redフロー

ラズパイカメラでハエトリソウを撮影し、捕食などの動きを検出して動画を生成しスマホに通知を送信します。これをNode-REDで構築しました。

①初期起動 injectノード

injectノードのペイロードを”Started!”とすることでNode-REDが起動した際にトリガ起動します。

参考

 

②監視プログラム起動 execノード

シェルコマンドで監視プログラムを起動します。

 
シェルでハエトリソウ監視Pythonプログラムを起動します。

 

以下がハエトリソウ監視Pythonプログラムです。

 

通常動画撮影

OpenCVでカメラ撮影実施します (L 7~11)。
動画はmp4形式で取り扱います (L 14)。
撮影は1フレームごとにjpgで常に直近の300枚を保存するようにします (L 52~71)。

800フレーム分の撮影実施ごとにログとして画像を保存ファイルに残します (L 92~96)。

動体検知

フレーム間差分法でハエトリソウの動きを検出します (L 23~39、L 73~84)。
フレーム間の差分が閾値(ここでは6000)を3回超えるとハエトリソウが動いたと判断 (L86~90、L100)。

ハエトリソウの動き検知で直近の300枚のjpg画像を動画video1.mp4にします (L 101~105)。

その後1200フレーム分の動画を撮ってvideo2.mp4にします (L 42~49、L 108)。

後処理

動画撮影後、動体検知前の直近の300枚のjpg画像を削除し文字列”MOVE!!”を次のノードに渡します (L 112~120)。
 

参考

 

③動画ファイル名生成 functionノード

ハエトリソウ動作検出後に動画保存のためのファイル名を生成します。日付と時刻で”YYYY-MMDD-hhmm”の文字列を次のノードに渡します。

 

④動画合成 execノード

シェルコマンドで動画合成プログラムを起動します。

 

シェルでハエトリソウ動作の検出前の300フレーム分の動画 video1.mp4 と検出後の1200フレーム分の動画 video2.mp4 をffmpegで合成します。合成後のファイル名は③で生成した日時の文字列を使用します。

 

list.txtは以下の通りです。

参考

 

⑤IFTTT http requestノード

あらかじめIFTTTで設定しておいたWebhooksトリガのURLをPOSTします。

 

IFTTTの設定

IFTTTとはif this then thatの略で各種Webサービス同士を連携して自分好みのWebサービス(アプレット)を生成することができます。ここではthis(トリガ)にwebにリクエストを受信できるWebhooksを使用しthat(アクション)にスマホに通知を送るNotificationsを使用しました。

Webhooksのイベント名は”Flytrap”としました。以下URLをリクエストすると”ハエトリソウに動きあり!”とスマホに通知が来ます。
 https://maker.ifttt.com/trigger/Flytrap/with/key/”Webhook-key”  

“Webhook-key”にはWebhookサービス登録時に得られる認証キーを入力します。

 

以上で動画が保存されるとIFTTTを介してスマホに通知が行きます。

 

⑥delayノード

IFTTT通知後、5秒待って監視プログラム②を再開します。

 

動作

2019/7/14から10/27まで運用しましたが、残念ながらハエトリソウの捕食動画は撮影できませんでした。悲しみ 🙁 

フレーム間差分法で動作検出を実施しているため、急に太陽に雲がかかるなどで影が生成されても動作検出してしまう点が改善すべき点です。

雲の多い日はガンガン通知来ますが捕食はゼロでした。。。
来季は学習による画像認識などの検討も実施しリベンジしたいと考えております。

 

運用時は7分おきに静止画ログも残しておりましたので成長をタイムラプス動画にするなどで楽しむことはできました。

 

追記

2019/12/10 みんなのラズパイコンテスト

今年もこのネタでみんなのラズパイコンテストに参加いたしました!

今年は優良賞とスタートダッシュ賞のダブル受賞でした!わーい 😛 !

太陽光発電でタイムラプス撮影 ーベランダ太陽光発電所への道5ー

いよいよ太陽光発電を本格運用します。ここではラズパイカメラをつないでタイムラプス撮影を実施したのでご報告します。

 

 
 

構成

ソーラーパネルと鉛蓄電池をチャージコントローラに接続します。負荷としてラズパイカメラをつなげました。

部品

 

発電システム

Indoor Corgi Elec.社製のマイコンとしてESP32を使用した太陽光発電充電コントローラを使用します。マイクロSDカードスロットもありデータログを記録できます。

システムは以下の通りでESP32用Arduinoコードが提供されています。

概要

  • バッテリの電圧と充電電流を監視してPWM制御します。
  • 液晶ディスプレイにバッテリ電圧・電流、ソーラパネル発電電圧、動作モードを表示
  • 測定値のログをSDカードに保存。
  • 負荷とバッテリ間のスイッチでバッテリ電圧が低下した際に負荷の切断が可能。
  • ソーラパネル発電電圧を観測して8Vを下回るとコントローラをディープスリープさせて消費電力を抑える。
  • ESP32のWiFi機能でブラウザで各種数値表示や動作モード変更が可能

めっちゃ高機能で便利!!Arduinoコードなのでカスタマイズも比較的簡単にできます。

ブラウザ表示 (設定)

ここではターゲットとするバッテリ充電電圧を13.8V、充電電流を1Aとしました。スリープモードは有効にしています。負荷の切り離しは無効にしてスリープ時もバッテリの電気でラズパイを動かします。

無負荷時の発電動作

まずは負荷なしでチャージ動作を観測してみました。

日が当たるとソーラパネル発電電圧が18V程度になりバッテリに充電されます。バッテリ電圧はほぼターゲットの13.8Vを維持しています。
家は西向きのベランダのため直射日光は6~11時くらいしか得られていません。。。

夜間になりパネル電圧が8V以下になるとコントローラはDeep Sleepモードとなり15分おきに起動して電圧観測し、日の出でパネル電圧が上昇するとスリープを解除します。

 

タイムラプス撮影

丸一日ラズパイカメラをつないで写真撮影してみました。

Node-RED

ラズパイカメラの定期撮影はNode-REDで実施しました。2分おきに撮影します。

 

①撮影トリガ インジェクトノード

カメラ撮影のためのトリガです。2分おきに定期的に動くようにしています。また撮影したjpegファイル名を1づつ増やすためにPayloadに”1″を指定しています。

 

②jpegファイル名生成 ファンクションノード

グローバル変数sumに前段ペイロードの”1″を足して4桁の連番jpegファイル名を生成しています。

 

③カメラ撮影ノード

カメラ撮影を実行する node-red-contrib-camerapi を使用しました。
 https://www.npmjs.com/package/node-red-contrib-camerapi

輝度や画像サイズなどもろもろ設定可能です。前段の連番ファイル名msg.filenameを受けて撮影実施ます。

 

④ファイル名 連番リセット

前段のインジェクトノードをクリックするとこのファンクションが起動して、グローバル変数sumをリセットします。

タイムラプス

撮影した写真をつないで動画にしました。

おもしろい。しかも電気代タダ!!

タイムラプス動画生成は以下を参考にしました。
 http://sozaing.com/technique/timelapse_movie/

各電圧変化は以下の通りです。

日の出後は曇りのためほとんどチャージできていませんが、さほどバッテリは減りませんでした。

ラズパイカメラ定期撮影くらいなら余裕で長期運用できそうです。引き続き実験していきます。

micro:Maqueen 発話でラジコン! ー Alexa + Node-RED + micro:bit ー

ものすごく便利なNode-REDモジュールを見つけてしまいました。

Node-RED Alexa Home Skill Bridge というもので、仮想のAlexaデバイスを作成して発話応答をNode-REDへ返してくれます。まさにブリッジとなってAmazon Echoへの発話とNode-REDの各種パレットをつないでくれます。

これなんでもできるようになるんじゃ。。。可能性ひろがるぅ 😳 

ここではAmazon Echoでコントロールするラジコンカーを作ってみました。

構成

Amazon Echoへの発話応答をNode-RED Alexa Home Skill Bridgeを介して ラズパイZero W上のNode-REDに返して、BLEでmicro:bitに信号を送ります。micro:bitは拡張ミニロボットカーMaqueenに載せて信号を受けて動かします。

部品

  • Amazon Echo Dot

     
  • Raspberry Pi Zero W

     
  • micro:bit

     
  • micro: Maqueen

Maqueen詳細については以下参照ください。

micro:Maqueen を使ってみた

Node-RED Alexa Home Skill Bridgeの設定

Node-RED Alexa Home Skill Bridge用のアカウントを作成してロボットカーを制御するための仮想のAlexaデバイスを作成します。

アカウント登録

以下にアクセスして、Resisterをクリックします。
 https://alexa-node-red.bm.hardill.me.uk/

ユーザ名とメアド、パスワードを登録します。

デバイス登録

登録後、Devicesタグを選択してAdd Deviceをクリックします。

 
ロボットカーのモータを回して前進、後進させるためのAlexa用デバイス”回転”を作成しました。

Name: デバイス名 ” 回転” 入力
Description: デバイスの簡単な説明記載
Actions: デバイスの動作種類を選択。ここではOnとOffを選択。
     Onで前進、 Offで後進させます。

同様にロボットカーを左右に向かせる”ターン”と、停止させる”ストップ”という2つのデバイスを追加で作成しました。

Alexaスキル  Node-RED有効化

スマホのAlexaアプリでNode-REDスキルを有効にしてAlexaサービスとNode-RED Alexa Home Skill Bridgeを紐づけます。

 
スキルを有効にするとNode-RED Alexa Home Skill Bridgeのアカウント入力画面に切り替わるので、登録したユーザ名とパスワードを入力します。

 
問題なければデバイス検出画面に移行します。

 
端末の検出をクリックで作成したデバイスが見つかります。

定型アクションを編集

作成したデバイスの起動するための発話をカスタマイズするために、 Alexaスマホアプリで定型アクションを編集します。

以下のように設定しました。

「アレクサ、前に進め」:デバイス “回転” On
「アレクサ、バックして」:デバイス “回転” Off
「アレクサ、右向け右」:デバイス “ターン” On
「アレクサ、左向け左」:デバイス “ターン” Off
「アレクサ、止まれ」:デバイス “ストップ” On

参考

 

Node-RED設定

Node-REDにAlexa Home Skill Bridge用のノードをインストールして、発話を受けてBLEでmicro:bitに文字列を送信できるようにします。ここではRaspberry Pi Zero WのNode-REDを使用しました。

我が家ではRaspberry Pi Zero Wを自宅内サーバとして使っていて、コンシェルジュのティラノくんが宿題やったか?とか朝だよーとか言ってくれるのです。

AquesTalk と Node-RED と ラズパイで おしゃべりティラノくん作製

ノードのインストール

node-red-contrib-alexa-home-skillをインストールします。

設定でパレットのインストールでnode-red-contrib-alexa-home-skillを検索して”install”クリックでノードが追加されます。

更にBLEを使用するために以下も同様にインストールします。
 node-red-contrib-generic-ble

Node-REDフロー

Alexa-homeノード

作成した仮想Alexaデバイス”回転”、”ターン”、”ストップ”の3つを配置します。

ノードを配置してまずはNode-RED Alexa Home Skill Bridgeで登録したユーザ名とパスワードを入力します。

 
デバイスを選択します。ここでは”回転”を選択。

同様に”ターン”とストップ”用のノードも配置します。
 

true/false分岐 ファンクションノード

“回転”と”ターン”デバイスは発話によってtrueとfalseを返すので、ファンクションノードで分岐させます。

 

BLE送信用文字列 ファンクションノード

“回転”と”ターン”のOn/Offと”ストップ”のOnの発話応用に対応するBLE送信用の文字列を生成するファンクションノードを配置します。

前進(”回転”デバイス On)では文字列 “1:”を送信しています。
micro:bit BLEの書き込み用UUIDと16進数文字列を指定します。

それぞれ以下の文字列を送信します。
 前進(”回転”デバイス On): “1:”
 後進(”回転”デバイス Off): “2:”
 右向(”ターン”デバイス On): “3:”
 左向(”ターン”デバイス Off): “4:”
 ストップ(”ストップ”デバイス On): “5:”
 

Generic BLE 出力ノード

Generic BLE outノードを配置して、鉛筆マークをクリックします。

 
Select from scan resultにチェックを入れ、BBC micro:bit を選択します。

 

MakeCode

Node-REDからの文字列をBLE介してmicro:bitで受けて、ミニロボットカーを制御します。

ここではMakeCodeでブロックコーディングしてmicro:bitに書き込みます。

 https://makecode.microbit.org/

機能拡張

設定アイコン -> 拡張機能をクリックでMaqueen用とbluetooth用のブロックを追加します。

 

Maqueenブロック追加

以下のライブラリリンクを入力して検索をクリック

maqueenをクリックでMaqueenのブロックが追加されます。

 

bluetoothブロック追加

拡張機能でbluetoothを選択。無線ブロックと共存ができないので、無線ブロック削除メッセージが出ます。削除しちゃってください。

 
bluetooth用ブロックが追加されます。

 

micro:bitのBLEペアリング設定を変更します。設定アイコン -> プロジェクトの設定をクリックで一番上の”No Paring Required”を選択します。これでペアリング無しで通信が可能となります。

 

参考

MakeCode ブロック

以下がMaqueen制御用のMakeCodeブロックです。


 

① 初期設定

変数stateを初期化して、BluetoothがNode-RED(Raspberry Pi Zero W)と接続されるとニコニコマークをmicro:bitのLEDマトリクスに表示します。


 

② 文字列受信

Node-REDからの文字列を受信してコロン”:”前の文字を変数stateに代入します。


 

③ 前後進制御

文字列”1:”受信で前進、”2:”受信で後進させます。LEDマトリクス表示もそれぞれ変えます。


 

④ 右向き制御

文字列”3:”受信で右に90°ターンします。LEDマトリクスにはターン方向の矢印を表示させて Maqueen前方についている赤LEDインジケータ右側をウィンカーのように点滅させてます。ターン後、全て停止します。


 

⑤ 左向き制御

文字列”4:”受信で左に90°ターンします。LEDマトリクスにはターン方向の矢印を表示させて Maqueen前方についている赤LEDインジケータ左側をウィンカーのように点滅させてます。ターン後、全て停止します。


 

⑥ モータ停止

文字列”5:”受信でモータ停止し、LEDマトリクスの表示を消します。

 

MakeCode JavaScript

全体のJavaScriptコードを以下に記載します。

 

 

動作まとめ

ゴチャついてきたので、動作を一覧にまとめます。


 

動作

音声でロボットカーを制御できております!

ちょっと初期設定が大変かもだけど、ブロック組み合わせるだけで実にフィジカルなVUIアプリを作成できました!

ゴミ箱とか音声で近くに移動してくれたりとかいいかも 🙄 

とにかくNode-RED Alexa Home Skill Bridge が神がかって便利なので今後もいろいろ活用考えたいです!

AquesTalk と Node-RED と ラズパイで おしゃべりティラノくん作製

最近、長男くんがハマっているYouTubeチャンネルが以下になります。

なんか青鬼のアニメばかり見ててナレや歌が耳について耳について。。。

お母ちゃんがこのチャンネルのナレーションAquesTalkじゃね?ってことで以下のデモを使って色々しゃべると長男くんが少し怖がって、言うことを聞くことを発見www

「早く寝なさい」とかね。

こりゃいいぞ!ということでAquesTalkで喋って動くお人形を作ろうということに相成りました。

おしゃべりティラノくん

しゃべるときに口パクパクさせたいよねと思い。

前にダイソーで買ったニギニギするとパクパクするティラノのおもちゃを使いました。もう歯も取れて、目も剥げてボロボロだったしね。。リメイク!

ラズパイにAquesTalk導入してモータでパクパクしてみました。

めっちゃビビる長男くん。。。

 

一緒に遊んでなんとか仲良しに。。。

 

専用のウェブページを作ってスマホやPCで発話入力できるようにしてます。

最初はラズパイ3とUSBスピーカをつかってみましたがでかいので、ラズパイゼロWで小型化しました。

↓これをこう!

以下に制作の詳細記載します。

 

 

構成

AquesTalkをインストールしたラズパイゼロWにアンプMAX98357Aとサーボを接続しました。

部品

  • Raspberry Pi Zero W

     
  • マイクロサーボ SG90

     

  • MAX98357A搭載 I2S 3W D級アンプボード

  • スピーカー
    長女ちゃんの昔使ってた音の鳴るおもちゃ(プリキュアかなんかの)を分解してスピーカを拝借。小さいけどパワーあってGoodでした。
     
  • ティラノ顔
    ダイソーのパクパク恐竜を分解

配線・組み立て

ティラノの頭とサーボをグルーガンで貼り付けて部品を配線。JCOMでもらった升を筐体として使用しましたw。

枡に穴を開けてスピーカを埋め込みました。

サーボとティラノの頭を紐でつないで、発話中のパクパクを実現します。

AquesTalk

AquesTalkとはテキスト入力で発話させることができr日本語音声合成エンジンです。今回はこれをラズパイに導入して発話させます。

インストール

ラジパイ用の実行モジュールをコピーするだけです。簡単!
以下でtgzファイルをダウンロードします。

ファイルをラズパイ上で解凍します。

解凍したフォルダに移動して以下を実行するだけで音声データが作られ再生されます。

アンプMAX98357A 設定

小型化のためにラズパイゼロを採用しましたがオーディオ出力端子はついていません。ですのでアンプボードMAX98357Aを使用しました。

I2Sという規格で3線で音声データをシリアル転送します。ラズパイとの配線は以下の通り

  • アンプ Vin to Raspbery Pi 5V
  • アンプ GND to Raspbery Pi GND
  • アンプ DIN to Raspbery Pi GPIO21
  • アンプ BCLK to Raspbery Pi GPIO18
  • アンプ LRCLK to Raspbery Pi GPIO19

 

以下をラズパイのターミナルで実行するだけでアンプを使用するためのセットアップができます。

スピーカを接続して音声出力設定は終了です。

参考

Node-RED

ラズパイ上でコマンド打って発話だとちょっと使いづらいので、ブラウザで別端末から発話できるようにするべくNode-Redで設定しました。ついでに発話中の口パクパク用サーボの制御もNode-REDで実施します。

インストール

最近のラズパイOSには Node-REDはインストールされていません。以下実行でインストールできます。

Node-RED設定

以下が今回のフローとなります。

  1. httpノード
    URLを指定してメッセージをGETできるようにしました。

    以下をブラウザ送信すると発話文が受信されます
  2. jsonノード
    jsonノードを挿入してブラウザからのメッセージをString型に変換しています
     
  3. execノード
    コマンド実行してくれるexecノードでブラウザからのメッセージを受け取って、AquesTalkのコマンドを実行します。

     
  4. triggerノード
    ブラウザからメッセージを受けると”1″を200msec毎に出力し続けます。
    “0”が入力されるとトリガがリセットされて止まるようにしました。
     
     
  5. randomノード
    triggerノードからの200msec毎の出力を受けて12.0〜15.0の間で値を生成して出力します。
     
     
  6. rpi-gpio outノード
    サーボモータを動かすためにGPIO2ピンにPWM信号を出力させます。

     

    “サーボの制御にPWMモードが利用でき、入力に小数値も含む 10 から 20 の値が指定可能です。”とのことで今回はrandomノードから12.0〜15.0の間で値がランダムに入力されてサーボをコントロールします。
     

  7. functionノード
    execノードからの発話再生終了出力信号を受けて”0″を出力します。 
    “0”出力をrandomノードに入力して値出力を止めます。更にrpi-gpio outノードにも入力してサーボを完全に止めます。

以上でブラウザから発話メッセージを受けて再生し、音声再生の間はサーボが動いて口がパクパクします。再生が止まるとパクパクも止まります。

Node-red自動起動設定

以下のコマンドの実行でラズパイ起動で自動的にNode-REDも起動します。

参考

ブラウザページの作成

発話文章を入力するページはお母ちゃんに作ってもらいました。ではよろしく。

表示

入力エリアと送信ボタンだけのシンプルな画面です。

ソースコード

Node-RED のエンドポイントに ajax で送信しました。

終わりに

新しい家族が増えました。

長男くん以外のみんなでスマホやPCから文章打ち込んで
「ちゃんとご飯食べなさい」とか
「もう寝なさい」とか
言わせてますww ビビって結構いう事聞いてくれるのよ。これが。

ロボットとお友達とか冗談抜きで未来じゃなくなってる。Amazon Echoも子どもたちはほとんど人として接しているしね。

今度はティラノくんを目覚ましにしたり、リマインダにしたりしたいな。
「宿題やった?」と「歯磨きしなさい」とかね。

追記

定期発話機能追加 (2018/11/4)

Node-REDのinjectノードの繰り返し機能で時刻と曜日が指定できることを知り、目覚ましとリマインダ発話を追加しました。

目覚ましや「宿題やった?」とか「もう寝なさい」とか時間でしゃべるようにしました。いやーNode-REDマジ便利!

Raspberry Pi Zero (2019/4/23)

Raspberry Pi Zero WからRaspberry Pi Zero + WiFiドングルに変更しました。SDカード差し替えるだけで問題なく動きました。

 

Raspberry Pi Zero Wはまた別用途で使用します!

オムロン環境センサ と ラズパイ で ラジコンカー − GOBERNABLES de Pi −

今年のみんなのラズパイコンテストでOMRON製の環境センサの無償提供が実施されましてー

 
即効でアイディア送ってGET!ありがとうございまーす!

“センサ観測値(加速度とか)を用いて、ラジコン作ります!”ってアイディアを送ったのだけど、この時点ではセンサのスペックよくわからない状態(事前に調べとけよ)。。。
本当にセンサが届いたとき、「やっべ。。。」と思いつつ焦って調査&ラジコン製作スタートしましたとさ。このときばかりはトランキーロじゃいられなかったゼ。。
 

構成

環境センサの加速度と照度の測定値をラズパイに送って、モータとLEDを制御します。

部品

  • オムロン製 環境センサ 2JCIE-BL01
  • Raspberry Pi Zero W 

     
  • I2Cモータードライバ・モジュール DRV8830

  • 白色LED
     車のヘッドライト用。ダイソーの自転車用LEDライトから取り出しましたww
  • ダイソーの電池式モバイルバッテリー
     電源として使用。単三電池2本を5Vにしてくれます。108円でこれはいいよね。今度分解してみよう。。

     
  • ダイソーの黄色い車

  • ボールキャスター 
    車の前方に使用。

     

センサをコントローラとして、車を走らせたりライトをつけたりします。

 

環境センサ 2JCIE-BL01

この環境センサは温度、湿度、気圧、照度などの各種環境値を測定してBLEを介して、スマホアプリで測定値みたりプロットされたグラフを見れるという代物。
GitHubでラズパイで値を取得できるpythonサンプルコードも公開されております。
 https://github.com/OmronMicroDevices/envsensor-observer-py

環境センサの設定

上記のpythonサンプルコードを使用するためには環境センサをBroadcasterモード(デフォルトではBeaconモード)にする必要があります。
また今回は車のリモコンとしてセンサを使用するので、測定間隔もデフォルトの300秒から最速の1秒に変更します。

センサの設定を変更するためにスマホアプリBLE Scannerを使用しました。
 

動作モード変更

スマホアプリ BLE Scannerを起動するとBLEデバイスのスキャンが開始します。環境センサは”Env”という名前で表示されますのでCONNECTをクリックします。

2JCIE-BL01 ユーザーズマニュアル p. 26-28 によると、センサのモードはService UUID:0x3040のCharacteristics UUID: 0x3042で変更します。

BLE ScannerでCUSTOM SERVICEの”0C4C3040〜”をクリックして”0C4C3042〜”にデータを書き込みます。書き込むデータは以下の表 (p. 27)のとおりです。

ここでは、ADV_IND 送信間隔を最短の500msec (0x0320)にしてBeacon ModeをGeneral Broadcaster 1 (0x02) [マニュアル p. 28参照]にして、その他は初期値のままにします。

ちなみにBeacon Mode : General Broadcaster 2では加速度は送信されませんでした。

ここで注意が必要でデータを書き込む際は上の表の通りLow Byteから書いて後にHigh Byteを書き込みます。よって今回は以下を書き込みます。

“2003A0000A0032000200” (書き込みタイプはByte Arrayを選択)

ADV_IND 送信間隔500msec (0x0320)にしたいので最初にLow Byte : 02、そしてHigh Byte : 03を書きます。これ最初気づかずに0320で書き込んでいて全然測定値更新されずオムロンさんに問合せちゃった。。。。
こんな私に対しても丁寧に対応くださったオムロン様、本当にありがとうございます!!!!
 

測定間隔変更

センサの測定値の更新間隔を最速の1secにします。

BLE ScannerでCUSTOM SERVICEの”0C4C3010〜”をクリックして”0C4C3011〜”にデータを書き込みます。書き込むデータは以下の表 (p. 15)のとおりです。

ここでは、測定間隔を最短の1sec (0x0001)にしますのでLow Byteから

“0100”(書き込みタイプはByte Arrayを選択)

を書き込みます。0001じゃないことに注意!Low Byte → High Byteで書き込みます。

以上で環境センサの設定はOKです。
 

参考

 

サンプルコードでセンサ動作確認

オムロン公式のpythonサンプルコードを動かしてみます。

ここではRaspberry Pi Zero Wを使用しました。OSはRASPBIAN STRETCH WITH DESKTOP ver. 4.14です。

pythonでBLEを使用するためのライブラリをインストール

https://github.com/OmronMicroDevices/envsensor-observer-py でZipをDLしてラズパイの適当なフォルダに解凍して、解凍したフォルダで以下を実行

デバッグモードでプログラムが実行されターミナルに測定値が表示されます。

↑ちょっとわかりにくいですがセンサの設定変更がきちんとなされて1秒毎に測定値が送られています。
 

コントローラ製作

コントローラはダンボールで製作しましたww。Nintendo Laboで鍛えられたダンボール工作力を駆使しています。

百均で買った木の箱とダンボールで作ったバネと環境センサが入る直方体ダンボール箱を用意。

んで、この3つを木工用ボンドで接着して先端に環境センサをはめて出来上がり!

はいそうです。9/14に発売予定の「Nintendo Labo Toy-Con 03: Drive Kit」を参考に作りました。パクりちゃう。。サンプリングや。。。


 
 

車製作

ヘッドライトとして左右にLEDをつけました。ライト部に穴を開けてグルーガンで固定しました。

シャーシはガッツリ加工して、後輪にギアドモータを接続。タイヤは元のものを使用。前方にはボールキャスターをつけて右折・左折に対応します。

後輪のグリップが甘いので輪ゴム巻いてます。

Raspberry Pi Zero WとモータドライバDRV8830を載っけて配線します。

モバイルバッテリーも詰め込んでボディーを被せます。LEDの配線もZero Wに接続します。なんかギュウギュウだけど。。。まぁ。。完成!
 

ラズパイ設定

モータドライバ 用I2Cの設定

モータドライバDRV8830にI2Cでデータを書き込んで回転方向や印加電圧を指定します。回転方向や電圧は環境センサの加速度で変更します。

I2C有効化

まずはラズパイのI2Cを有効にします。Raspberry Piの設定を開きインターフェースのタグでI2Cの有効を選択しRebootします。

 

Python用I2Cライブラリインストール

Python-smbusをインストールします。

OS RASPBIAN STRETCH WITH DESKTOP ver. 4.14では初めからインストールされてました。

コードの書き方は以下を参考にしました。
 http://www.raspberry-projects.com/pi/programming-in-python/i2c-programming-in-python/using-the-i2c-interface-2

I2CモータードライバDRV8830

マニュアルを参考にI2Cデータ書き込みを実施します。

I2Cアドレス設定

2個のモジュールを制御する必要がありますので、それぞれ異なるI2Cアドレスを設定します。

本モジュールは基板上のジャンパA1, A0のステートによって以下の表のようにアドレスを指定することができます。

表のアドレスxは読み込み時には1、書き込み時は0をしてします。ここでは書き込みのみ使用します。左モータ用モジュールのジャンパを両方GND (アドレス:0x60)、右モータ用モジュールのジャンパを両方Open (アドレス:0x64)としました。
 

書き込みI2Cデータ

アドレス0x00に8bitの情報を書き込むことでモータを制御します。
各ビットの設定は以下の通り

 

ヘッドライトLED用PWM出力

ヘッドライトLEDの輝度は環境センサの照度で制御します。PWM制御でLEDの輝度を設定します。センサの照度が低下するとLEDの輝度を上げ、センサ照度が上がるとLED輝度を下げます。

コードの書き方は以下を参考にしました。
 http://blog.robotakao.jp/blog-entry-122.html

 

pythonコード

公式pythonサンプルコードを元にプログラム修正しました。
 https://github.com/OmronMicroDevices/envsensor-observer-py/blob/master/envsensor-observer-py/envsensor_observer.py

 

モータ動作

センサの重力加速度に対する座標

コントローラを前に傾けてセンサのx軸の加速度が+になるとモータは前進、-になると後進します。

回転スピードは傾きを大きくして加速度が大きくなるほど早くなります。ここでは書き込み電圧2.97V (0x25)以上にならないようにしています。

またコントローラを横に傾けてy軸の加速度が+になると右折、-になると左折します。

 

ヘッドライト動作

環境センサの窓が照度センサになっており、窓を覆って暗くするとLEDヘッドライトが点灯します。

 

参考

ラズパイ起動時にpythonコードを自動スタートする方法は以下を参考にしました。
 Pythonプログラムを起動時に実行する方法

 

動作

以上でやっとこ完成!

センシング間隔が1秒のためタイムラグあるけど動いてるよね 😀 

 

 

終わりに

多くにおいて人間は環境に抗うことはできず、順応もしくは耐えるしか道はありません。
でも一歩踏み出す勇気さえあれば環境を変え物事を動かすことができるのです。
ま・さ・に・  
GOBERNABLES de Pi!

追記

2018/12/16

今年は受賞はなりませんでしたが、早めに投稿したので『スタートダッシュ賞』をいただけました!やったー!

Raspberry Pi Zero W 単体でラジコンカー自作

前回Raspberry Pi Zero Wでサーボモータを制御してみてラズパイでなにかしらを制御するのはシンドいなぁという感想を得たのですが。。。デジタル信号制御なら問題ないだろということで、I2C入力のモータドライバでラジコン作りました。

Raspberry Pi Zero W と Blynk で サーボモータ制御

ここではスマホアプリ Blynk とラズパイでI2C入力のモータドライバを介してモータをコントロールします。

構成

部品

I2Cモータードライバ・モジュール DRV8830

I2C入力によって、モータ供給電圧(スピード)と供給電圧方向(回転方向)を制御します。円形ロボットシャーシキットの左右のモータを制御するため2個のモジュールを使用しました。

I2Cアドレス設定

2個のモジュールを制御する必要がありますので、それぞれ異なるI2Cアドレスを設定します。

本モジュールは基板上のジャンパA1, A0のステートによって以下の表のようにアドレスを指定することができます。

表のアドレスxは読み込み時には1、書き込み時は0をしてします。ここでは書き込みのみ使用します。左モータ用モジュールのジャンパを両方GND (アドレス:0x60)、右モータ用モジュールのジャンパを両方Open (アドレス:0x64)としました。

書き込みI2Cデータ

アドレス0x00に8bitの情報を書き込むことでモータを制御します。
各ビットの設定は以下の通り

 

blynk設定

ここではblynk の2個のジョイスティックのx軸を使用して左右のモータを制御します。

新規プロジェクトを作成します。ハードウェアはラズパイ zeroがまだないのでとりあえずRaspberry Pi 3Bを選択。Conection TypeにはWiFiを指定します。
AUTH TOKENはコードコンパイル時に使用しますのでメール送信してメモしておきます。

ウィジェットとしてジョイスティックを2個配置します。

2個のジョイスティックの設定はそれぞれのx軸をヴァーチャルピンV0, V1に出力させ、値は-63~63としました。

プログラム

サーボ制御同様にC++を採用しました。

Blynkライブラリインストール

ラズパイにBlynkライブラリをインストールします。
詳細は https://github.com/blynkkk/blynk-library/tree/master/linux 通りでターミナルを起動して

$ git clone https://github.com/blynkkk/blynk-library.git

でOK

ラズパイI2C有効化

Raspberry Piの設定を開きインターフェースのタグでI2Cの有効を選択しRebootします。

C++プログラミング

Blynkライブラリがインストールされるとホームにblynk-library/linuxフォルダが生成されます。linuxフォルダをコピーするなどして、その中のmain.cppを以下のように書き換えます。

BlynkのV0, V1で値を受けてモータの回転方向とスピードを制御しています。

wiringPiのI2Cライブラリを使用しています。

コンパイル

main.cppのあるフォルダに移動して以下を実行。

$ make clean all target=raspberry 

Blynk実行

つづいて以下を実行

$ sudo ./blynk --token=Blynkアプリで取得したAuthToken 

上図のようにReadyで準備OK!
 

動作

 

#ラズパイ 単体でラジコン #blynk

Home Made Garbageさん(@homemadegarbage)がシェアした投稿 –

いい感じ!デジタル通信による制御であればラズパイでも問題なく色々できそうです♪

Raspberry Pi Zero W と Blynk で サーボモータ制御

Raspberry Pi Zero Wを手に入れたので、これまでなんとなく避けていたラズパイでの電子工作にトライしてみました。

ここではスマホアプリ Blynk とラズパイで2軸のカメラマウンタ(サーボモータ2個)をコントロールします。

構成

部品

blynk設定

ここではblynk のジョイスティックで2個のサーボモータを制御できるようにします。

新規プロジェクトを作成します。ハードウェアはラズパイ zeroがまだないのでとりあえずRaspberry Pi 3Bを選択。Conection TypeにはWiFiを指定します。
AUTH TOKENはコードコンパイル時に使用しますのでメール送信してメモしておきます。

ウィジェットとしてジョイスティックを配置します。

ジョイスティックの設定はヴァーチャルピンV0, V1にそれぞれの軸の数値を出力します。x, yの値はそれぞれ25~0としました。

プログラム

ラズパイのプログラムはpythonやnode.jsなど色々あって軽く迷走した結果、C++を採用しました。Arduinoで親しみも深い言語ですので。。。

Blynkライブラリインストール

ラズパイにBlynkライブラリをインストールします。
詳細は https://github.com/blynkkk/blynk-library/tree/master/linux 通りでターミナルを起動して

$ git clone https://github.com/blynkkk/blynk-library.git

でOK

C++プログラミング

Blynkライブラリがインストールされるとホームにblynk-library/linuxフォルダが生成されます。linuxフォルダをコピーするなどして、その中のmain.cppを以下のように書き換えます。

BlynkのV0, V1で値を受けてサーボの角度として制御しています。

wiringPiのSoftware PWMライブラリを使用してどのGPIOでもPWM出力できると思っていたのですが、ハードウェアPWMに対応したGPIO12, GPIO18でしか動作しませんでした。。。なぜだろう。。。(´;ω;`)ウッ…

コンパイル

main.cppのあるフォルダに移動して以下を実行。

$ make clean all target=raspberry 

Blynk実行

つづいて以下を実行

$ sudo ./blynk --token=Blynkアプリで取得したAuthToken 

上図のようにReadyで準備OK!

動作

Blynkアプリを実行すると以下のようにラズパイ単体でサーボを制御できます。

 

Raspberry Pi Zero W と #blynk で サーボモータ制御

Home Made Garbageさん(@homemadegarbage)がシェアした投稿 –

でも。。。何かしら動かすならマイコンはさんだほうがいいかなぁ(´・ω・`)
不具合起きた際の復帰も遅いし。。。