RaspberryPi でPythonでモータ制御するための情報

これも調査中の記事です。


###みんなのRaspberry Pi 入門 モーターキット
https://www.switch-science.com/catalog/2217/
>内容物
>DCモーター ※要ハンダ付け
銅線 2本
デュアル・モータードライバ （TB6612FNG）※要ハンダ付け
電池ボックス
ステッピングモータ（SPG27-1702）
トランジスタアレイ（TD62783APG）
ミニサーボモータ
ピンヘッダ 1×40

書籍[「みんなのRaspberry Pi入門 第２版 [対応言語:Python] (リックテレコムの電子工作シリーズ)」]
[![みんなのRaspberry Pi入門 第２版 ](http://ecx.images-amazon.com/images/I/51A5NsVVQ1L._SX383_BO1,204,203,200_.jpg)]
(http://www.amazon.co.jp/%E3%81%BF%E3%82%93%E3%81%AA%E3%81%AERaspberry-Pi%E5%85%A5%E9%96%80-%E7%AC%AC%EF%BC%92%E7%89%88-%E5%AF%BE%E5%BF%9C%E8%A8%80%E8%AA%9E-%E3%83%AA%E3%83%83%E3%82%AF%E3%83%86%E3%83%AC%E3%82%B3%E3%83%A0%E3%81%AE%E9%9B%BB%E5%AD%90%E5%B7%A5%E4%BD%9C%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA/dp/4897979943)

DCモータ、ステッピングモータ、ミニサーボモータと異なる種類のモータを含むセットなので、モータ初心者にとって、それぞれのモータがどういうものかを知ることから始めることができるだろう。

(DCモーター：小学校や中学校の理科の実験に使っているのは、たいがいこれ。電源につなぐだけで回る。（どれだけ回って目的の位置にあるのかどうかは、DCモータには知る手段がない。）
ステッピングモーター：モーターがどの回転位置にあるかを小刻みに制御しているモータ。外乱がなく制御されている系で用いることが多い（ようだ）。


)

###Raspberry PiのGPIO制御方法を確認する(回路組み立て編その1)
https://tool-lab.com/2013/12/raspi-gpio-controlling-breadboard-1/

####第24回 Raspberry PiのGPIOを制御する(コマンド編)
https://tool-lab.com/make/raspberrypi-startup-24/
####第26回 Raspberry PiのGPIOを制御する (Python編)
https://tool-lab.com/make/raspberrypi-startup-26/
「ツール・ラボ」さんの記事はGPIOについて丁寧に書いてくれています。


###Raspberry PiでSPG20-1332(注：ステッピングモーター)を回す
http://eleclog.quitsq.com/2012/12/raspberry-pi-spg20-1332.html

GPIOの出力を制御するために
    system("echo \"7\" > /sys/class/gpio/export");
といったように、RaspberryPiの特定のデバイスファイルに値をechoで書き込んでいる。


###Raspberry piでステッピングモータを制御し、音楽を奏でる
http://yamaguchi-1024.hatenablog.com/entry/2015/12/04/234242
>ステッピングモーターＳＴ－４２ＢＹＧ０２０
ステッピングモータードライバキット（の一部）

PythonでGPIOを使う方法で書かれている。


###新登場のRaspberry Piロボティクス用ボードのハードウェア性能とソフトウェアサポートを検証！
http://www.rs-online.com/designspark/electronics/jpn/nodes/view/type:blog/slug:an-introduction-to-the-gertbot

[Gertbot Robotics Board for Raspberry Pi](http://jp.rs-online.com/web/p/processor-microcontroller-development-kits/8486806/)

###安価なLinuxボード「Raspberry Pi」、新モデル「B+」で試したい5つのこと
http://japan.zdnet.com/article/35050936/

###Raspberry Pi GPIO入出力のサンプル（Python, C言語, shellスクリプト）
http://netlog.jpn.org/r271-635/2013/01/raspberry_pi_gpio_test.html
まず、シェルスクリプトをみてみると、GPIOを出力として利用するとは、
/sys/class/gpio/
以下のデバイスファイルに値を書き込むことがわかる。

C言語の階層でみると、チップBCM 2835の固有のIO関数を使うためには、
固有の関数を利用していることがわかる。
GPIO and other IO functions on the Broadcom BCM 2835 chip
[C library for Broadcom BCM 2835 as used in Raspberry Pi]
(http://www.airspayce.com/mikem/bcm2835/)


Python言語の階層からみると
import RPi.GPIO
[RPi.GPIO](https://pypi.python.org/pypi/RPi.GPIO)
がC言語での場合には見えてしまう厄介な処理の部分をだいぶ隠してくれており、扱いやすい形になっていることがわかる。
RPi.GPIOのサイトでは次のような注意を述べています。
> Note that this module is unsuitable for real-time or timing critical applications. This is because you can not predict when Python will be busy garbage collecting. 

このモジュールはリアルタイムや時間がクリティカルな用途には適していないことに留意してください。
Pythonがガバレージコレクションにいつ忙しくなるのか予測することができないのです。
[BCM2835 SOC and Raspberry Pi](http://sourceforge.net/p/raspberry-gpio-python/wiki/TechRef/)
に強く依存しているので、他のARMベースのLinuxボードのGPIOでは使えないはずです。


###RaspberryPiでフィギュアの制御
RaspberryPiでモータ制御している例は
>[株式会社ボークス（VOLKS INC.）とスピーシーズ株式会社は、業界標準のボークス社製６０ｃｍドールを動くフィギュア技術で可動させた『動くドール：Dollfie（R）ハニー』を開発しました。]
(http://www.dreamnews.jp/press/0000124132/)
[(A) Dollfie(R) Honey: 60cm 28DOF Motional doll equipped with LINUX and MikuMikuDance]
(https://www.youtube.com/watch?v=QhfxQWWfnk4&feature=youtu.be)(YouTube画像の１つ)

がありました。
YouTubeのリンクの１つは、台座部分の中身を見える構造でのビデオです。
制御の軸数が多いのをどのように制御しているかが興味深いところです。
開発元のスピーシーズ株式会社のリンクをたどっていくと
http://robo-pro.com/MOFI/strategy.html
にたどりつきました。どのようにワイヤーで人形を制御しているのかが見て取れます。

スピーシーズの記事　2016/09/01 [動く「初音ミク」ドール、元AIBO開発者らが制作　9月のイベントで初披露](http://www.itmedia.co.jp/news/articles/1609/01/news125.html)

> 小型コンピュータ「Raspberry Pi 3」を搭載し、Linuxが動作。MikuMikuDance（MMD）でオリジナルのモーションを作成することもできる。

とのこと。


###[RaspberryPiでドローンを操作！？フライトコントローラー「NAVIO+」]
(http://www.borg.media/raspberry-pi-navio/)
>NAVIO+はC++とPythonによりプログラミングされており、
ソースコードは[こちら](https://github.com/emlid/Navio)のGitHub上で公開されています。


RaspberryPiの販売元のRSコンポーネントからモータ制御用の基板が販売されています。
RaspberryPiに接続して使います。
RaspberryPi本体ではGPIOの電圧が3.3V であり、電源の電圧や電流の供給に限界がありますが、それより大きな電圧を供給できます。

[Gertbot Robotics Board for Raspberry Pi]
(http://jp.rs-online.com/web/p/processor-microcontroller-development-kits/8486806/)

12V power supply

Raspberry財団上のページ
[GERTBOT IS HERE!](https://www.raspberrypi.org/blog/gertbot-is-here/)


RTK MOTOR CONTROLLER BOARD KIT FOR RASPBERRY PI
https://docs.google.com/document/d/1Rfw2yCGLgT9BpKVBv3TBlHxGVVSL7cA8nhG0zy4hb0A/edit?pli=1#heading=h.urtsts8c9n0t


SMALL REDUCTION STEPPER MOTOR - 5VDC 32-STEP 1/16 GEARING
https://www.adafruit.com/products/858


[Raspberry Pi 3 モデルB](http://jp.rs-online.com/web/generalDisplay.html?id=raspberrypi)



------------------------------
###**BeagleBone Black の GPIO**

[BeagleBone Black で遊ぶ - GPIO]
(http://www.sugakoubou.com/doku/bbb)

[BeagleBoneBlack [4] – 拡張コネクタ GPIO 制御 –](http://mytoolbox.sakura.ne.jp/?p=167)

[BeagleBone Blackシリーズ: Linux GPIOを通して割り込みを取得する](https://jp.linux.com/news/linuxcom-exclusive/415008-lco2014032602)

[BeagleBone Black のGPIO　を pythonから利用する](https://learn.adafruit.com/setting-up-io-python-library-on-beaglebone-black/gpio)


[BeagleBoneBlack Python Lチカ](http://qiita.com/yh_cake/items/f93185316546ed3a22ac)

---
GPIOは他のARMベースのLinuxボードとどの程度共通なのだろうか？


###**ArmadilloのGPIO**
http://manual.atmark-techno.com/armadillo-4x0/armadillo-460_startup_guide_ja-1.0.5/ch08.html#sec-GPIO
[armadillo ~]# echo 1 > /sys/devices/virtual/gpio/CON9_2/value
といった流儀で値を設定できることは共通らしい。

ArmadilloにPythonをインストールすることは可能らしい
Armadillo-IoT: ユーザーランドにPythonを追加する
https://users.atmark-techno.com/blog/53/1349

この記事ではdebianを使って、ArmadilloにPythonをインストールし、apt-getでPIP(python-pip)を入れて、
PyserialをPIPを使ってインストールしています。


[Armadillo-X1](http://armadillo.atmark-techno.com/armadillo-x1) 2016年発表



----
###**Zynq(Xilinx)**

FPGAを利用可能なARMデバイスであるZynqについて調べてみる。
ZynqもLinuxで利用可能である。GPIOの他にも
EMIO(extended multiplexed I/O)
などがある。

[Zynq-7000（ZC702)のLinuxでMIOに接続されているLEDを制御]
(http://marsee101.blog19.fc2.com/blog-entry-2203.html)
Cのソースコードが記載されている。

[ZYNQ に GPIO 回路を接続し Linux 上で割込みを受け付けてみる(後編)]
http://myokota.hatenablog.jp/entry/2015/08/12/233020

```
for i in `seq 898 901`; do
echo 1 > /sys/class/gpio/gpio$i/value
done
```

Zynqを利用したボードの1例です。
[ＺＹＢＯ　Ｚｙｎｑ－７０００　評価ボード](http://akizukidenshi.com/catalog/g/gM-07740/)

[Xillybus and ROS on Ubuntu14.04 on Zybo Part 4 : Zybo上における設定~ROSのインストール](http://qiita.com/kazuyamashi/items/4489a84452821746f9a4)

---------------------------
###**Cyclone V SoC(Altera)**

[「アルテラ SoC評価ボード HelioにDCモータをつなぐ」](http://www.kumikomi.net/fpga/sample/0007/FPGA07_028.pdf)

Helioボードの記事　[「【其ノ八】 ネットワークアプリでの遠隔 PWM 制御、モーター制御、起動スクリプトの作成方法」](https://www.elsena.co.jp/elspear/soc_linux_dojo/soc_dojo_08.html)


書籍 [「ARM Cortex-A9×2！ZynqでワンチップLinux on FPGA」](http://shop.cqpub.co.jp/hanbai/books/46/46091.html)
[![image](https://qiita-image-store.s3.amazonaws.com/0/83761/48155889-d8a6-3736-2efb-eb038805ada4.png)](http://shop.cqpub.co.jp/hanbai/books/46/46091.html)


書籍 [「FPGAマガジン No.7 ブラシ付きからステッピングまで!初めての制御回路作り
モータ&ロボット×FPGA」]
(http://www.kumikomi.net/fpga/contents/0007.php)



追記：
　RaspberryPIやPythonにかぎった話ではありませんが、
次の書籍は、さまざまな部品についての理解を深めてくれそうです。
書籍[「ロボコン部品ガイドブック」オーム社編](http://shop.ohmsha.co.jp/shopdetail/000000001542/)


未整理の追記：
　サーボモータではPWM(Pulse Width Modulation)が使われている。そのため、PWMでの出力の関係の記事を調査中。


モータ制御に欠かせない技術“PWM”って何？ (1/3)
https://www.switch-science.com/catalog/2181/


Adafruit 16チャンネル PWM/サーボ HAT for Raspberry Pi
https://www.switch-science.com/catalog/2181/


Raspberry Pi 2でDCモーターを２つ制御する
http://kaiware007.hatenablog.jp/entry/2015/07/15/014119

Raspberry Pi で GPIO
http://ag.hatenablog.com/entry/2015/07/31/013013


「インターフェース」　が特集を組んでいます。
- [「インターフェース 2016年5月号 人間アシスト/ロボ/EV/ドローンのキー・テクノロジを5,000円キットで初体験！ トルク自由自在！最新モータ制御」](http://www.kumikomi.net/interface/contents/201605.php)


----------------------
###**Jetson (Tegra  board)**

- [Jetson/Tutorials/GPIO](http://elinux.org/Jetson/Tutorials/GPIO)

- [Jetson TK1でGPIOを制御する](http://www.4gamer.net/games/244/G024410/20140719011/)

> \> sudo python ~/lab/gpio/advanced_blink.py
として実行させるだけだが，接点スイッチを押している間だけLEDが点滅することを確認できた。


- [「学び続ける小さな人工知能」を実現する、組み込みボード「NVIDIA Jetson TX1」](http://monoist.atmarkit.co.jp/mn/articles/1603/02/news073.html)


[Jetson TX1開発キットのディープラーニング機能](https://blogs.nvidia.co.jp/2016/07/13/deep-learning-cats-lawn/?utm_source=dlvr.it&utm_medium=twitter)

[Jetson TX1 でも看板検出やってみた](http://wazalabo.com/jetson_tx1_signboard_detection.html)


----------------------------------------------
＜付記＞
RaspberryPiの場合、USBメモリを差し込むだけで、自動でマウントされる。しかも、USBメモリをunmountするのがGUIから簡単に行える。そのため、RaspberryPiでの開発は、特にpythonスクリプトの場合楽だ。Windowsで動作するスクリプトを作っておき、USBメモリにコピーし、RaspberryPiに差し込むと、RaspberryPi上で動作させるのがとても簡単です。不足しているライブラリは,apt-getで入手すればよいのが大半なので移植性は良好です。そのためには、windows上でspyderを使って事前にpylint しておいて移植性を良好にしておきます。スクリプトはUTF8で保存しておきます。ディレクトリの区切りにr"\"を使わず"/"を使うようにしておきます。プログラムをコンソールで実行させるときに、日本語コードなどの多バイトコードを表示させないようにしておくのが、トラブルをさけるのによさそうです。コンソールの表示のフォントなどの理由により、期待した動作から外れてしまうことを
無難だと考えています。

組み込み系のCPUボードはなかなかボードを入手して動作させる機会が少なくなりがちです。しかも開発環境の情報や、開発事例が十分あるCPUボードは限られてしまいがちです。RaspberryPiは入手しやすく、開発環境がそろっていて、開発事例の情報はweb上に多数あるものです。ですから、組み込みプログラミングを始めてみるにはとても始めやすい基板といえます。

＜付記＞
[ROS(Robot Operating System)について調べてみよう](http://qiita.com/nonbiri15/items/8d3111e77918bd362441)
を書きました。

Pythonでのモータ制御に関心をもっている理由
http://qiita.com/nonbiri15/items/c911e327faec3d43a0b4
を書きました。

[Omega2 というWi-Fi内蔵・Linux搭載のコンピューターが気になりはじめました](http://qiita.com/nonbiri15/items/8d01c0188fb437de9840)


インターフェース　が特集を組んでいます。
[「インターフェース 2016年5月号
人間アシスト/ロボ/EV/ドローンのキー・テクノロジを5,000円キットで初体験！
トルク自由自在！最新モータ制御」](http://www.kumikomi.net/interface/contents/201605.php)