Raspberry Pi Zero W と Blynk で サーボモータ制御
Raspberry Pi Zero Wを手に入れたので、これまでなんとなく避けていたラズパイでの電子工作にトライしてみました。
ここではスマホアプリ Blynk とラズパイで2軸のカメラマウンタ(サーボモータ2個)をコントロールします。
目次
構成
部品
- Raspberry Pi Zero W
- SG90サーボ用 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を以下のように書き換えます。
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
#define BLYNK_PRINT stdout #ifdef RASPBERRY #include <BlynkApiWiringPi.h> #else #include <BlynkApiLinux.h> #endif #include <BlynkSocket.h> #include <BlynkOptionsParser.h> #include <wiringPi.h> #include <softPwm.h> static BlynkTransportSocket _blynkTransport; BlynkSocket Blynk(_blynkTransport); #include <BlynkWidgets.h> BLYNK_WRITE(V0) { softPwmWrite (12, param.asInt()) ; delay (10) ; } BLYNK_WRITE(V1) { softPwmWrite (18, param.asInt()) ; delay (10) ; } void setup(){ softPwmCreate (12, 0, 1000); //(pin, iniValue, Range) softPwmCreate (18, 0, 1000); //(pin, iniValue, Range) } void loop(){ Blynk.run(); } int main(int argc, char* argv[]){ const char *auth, *serv; uint16_t port; parse_options(argc, argv, auth, serv, port); Blynk.begin(auth, serv, port); setup(); while(true) { loop(); } return 0; } |
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アプリを実行すると以下のようにラズパイ単体でサーボを制御できます。
でも。。。何かしら動かすならマイコンはさんだほうがいいかなぁ(´・ω・`)
不具合起きた際の復帰も遅いし。。。
こんにちは!main.cppをC++に書き換えたのですが、その後どうすればサーボモータを動かすのでしょうか?
サーボモータはひとつだけ使用します。
Raspberry pi zero whを使っています!
blynk設定やサーボへの配線及びコンパイルが終わってましたら、
ラズパイのターミナルで
sudo ./blynk –token=(Blynkアプリで取得したAuthToken)
を実行してください。
スマホでBlynkアプリを起動し、実行ボタン(三角の再生ボタンみたいなやつ)を
押すとラズパイとつながり
ジョイスティックをいずれかの方向に動かすとサーボが動くはずです。
ご確認ください。
はじめまして。プログラムの解説などお願いできますでしょうか?また他のサイトで参考にしたのであれば教えてほしいです。
コードは以下を参考にカスタマイズしています。
https://github.com/blynkkk/blynk-library/blob/master/linux/main.cpp
解説は少々お待ちください。
あとお手数ですがどのように配線をしているかをよく見たいので実物を見せていただきたいです。よろしくお願いいたします。
申し訳ございません。
ずいぶん前に解体しておりますので
構成の図と動作の動画でご判断ください。
度々すみません。どうしても動かないのですがwiringPiのインストールなど必要なのでしょうか?配線は直接ラズベリーパイのGPIOに接続しています。Blynkの設定やプログラムは間違いがないと思うのですが他になにか原因ありましたらお願いいたします。
大変お世話になりました。なんとか動かすことができとても感動しました。ありがとうございました。
初めまして。プログラム初心者です。
blynkでボタンにVIを設定し、入力された際にpython プログラムを実行しようと考えています。
そのようなことが可能なのか教えていただけませんでしょうか。