ロボットを作る

子供のころ、映画「STARWARS」 を観てワクワクし、ガンプラにドキドキしていた。時間が経つのも忘れてしまう、そんな時間をもう一度、取り戻すために、Raspberry pi を使って、オヤジがロボット作りに挑戦する!

やり始めてみると、なかなか思い通りに行かない。時間の経つのも忘れて悪戦苦闘中。 「こんなちっちゃな Raspberry Pi で、こんなことができるんだ」を日々実感している今日この頃。

第9章の
 9.5 ブラウザのスライダの利用 〜RGBフルカラーLED
 9.6 タッチイベントの利用 〜DCモーターの速度調整
を本のとおりに。



ブラウザのスライダの利用では、4本足のLEDを利用。前回3つ必要だったときは検証をスキップしたが、今回1つだけの利用なので、ちゃんとやってみる。

一番長い足が、共通アノード(+)で、抵抗を3つ接触しないように組んで完成。
本のとおりスライダを動かして、RGBでの濃淡がきれいに変化した。

次の検証へは念のため(接触させないため)電源切ってから組み替える。


タッチイベントも本のとおり、さくっとできた。
iphoneで、真ん中よりにタッチすると弱めで、外よりにタッチすると強めになった。


ここまできたか。
今年1月下旬に、この本に出会ってゆっくりではあるが、ここまできた。

ついに第10章の戦車!!!!だぁ!!!!

「Raspberry Pi で学ぶ電子工作」(講談社ブルーバックス)


 

第9章 P.250「9.4 ブラウザへの温度センサの値の表示」



I2C接続して前に利用した温度センサ ADT7410 を使用する。

準備として P.251の
 $ sudo apt-get update
 $ sudo apt-get install libi2c-dev
 $ wget http://ftp.de.debian.org/debian/pool/main/i/i2c-tools/i2c-tools_3.1.0.orig.tar.bz2

とりあえず本のとおり、3.1.0 を入れる。3.1.1 があったが。
 $ tar xf i2c-tools_3.1.0.orig.tar.bz2
 $ cd i2c-tools-3.1.0/py-smbus
 smbusmodule.c を sampleのものと入れ替える。
 $ python3 setup.py build
 $ sudo python3 setup.py install

エラーなく、終わった様子。



で、前回同様に iphone から http://<rasp ip>:8000/bb/02/ へアクセスしたが、あれ?

取りあえず、rasp自身のプラウザからはアクセスでき、温度も表示したのでネットワークが問題か。/etc/init.d/webiopi restart とかしてみる。

wireshark で iphoneからアクセスされてるかを確認しようと、
 $ apt-cache search "tshark"

で、wireshark を見つけて入れた。
 $ sudo tshark -i eth0 -f "port 8000"

を実行して流れてる。
あれ、今度は iphone で見れた。なんだったのか?  結局?のまま続きを読む

タイトルが気になったので、残しておく。

 2014/12/4 11 open source tools to make the most of machine learning.

なかでも以下は時間のあるときに調べてみよう。

 Project: Weka
 
 Project: scikit-learn 
 GitHub:
 https://github.com/scikit-learn/scikit-learn 

 Project: Mahout

 Project: 
MLlib

 Project: Cloudera Oryx 
 GitHub:
 
https://github.com/cloudera/oryx

 Project: GoLearn 
 GitHub: 
https://github.com/sjwhitworth/golearn

知らないことが多すぎるなぁ。そらそうか。



今度は本のサンプルファイルを用いてLチカする。

 $ sudo chown -R pi /usr/share/webiopi/htdocs
 $ cp -r 09-samples/bb /usr/share/webiopi/htdocs

最初は「9.3 ブラウザのボタンによるLEDの点灯」から。 
 $ sudo vi /etc/webiopi/config

[SCRIPTS]セクションに以下を追加。


 myscript = /usr/share/webiopi/htdocs/bb/01/script.py

そしてプロセスの再起動

 $ sudo /etc/init.d/webiopi restart


で、iphone から http://<respiのip>:8000/bb/01/ へアクセス。

でけた。

 



続いて、図9-5 LEDを点灯させる回路を作り、WebIOPi からLチカしてみる。

いままでのように Pythonプログラムを idle から起動させるようなことはない。
Raspi のGPIO 25pin をLEDへつなげるだけ。


P.237 「図9-6 デモアプリケーション GPIO Headerの画面」 は、
WebIOPi をインストールしたときの含まれていたデモアプリケーション。

本のとおり、自分のiphone から Lチカできた。なんかニヤニヤしてしまった。

 

第9章「WebIOPiを用いたPCやスマートフォンとの連携」に入る。



だが、2015/4/6現在、WebIOPiが Raspberry Pi2 に対応していないことは周知の事実であるようだ。 

ただ、この本の

著者のWeb 

の”第9章”では、すでにワークアラウンドが示されていた。これに添って進める。

WebIOPi-0.7.1をダウンロードし、/pi/homeに展開。
本のP.227-228のとおり進める。というのも解凍ツール Xarchiver 登場するが始めて見るので操作が、???な感じ。

そのあと、P.228 のインストールする前に、パッチを当てるようだ。
 $ wget https://dl.dropboxusercontent.com/u/69652790/bb/WebIOPi-0.7.1.patched.tgz
 $ tar zxf WebIOPi-0.7.1.patched.tgz
 $ cd WebIOPi-0.7.1/

 $ sudo ./setup.sh
  Do you want to access WebIOPi over Internet ? [y/n] n




無事終わったら、とりあえず、本のとおり webiopi を起動してみる.

$ sudo /etc/init.d/webiopi start

で、自分の iphone から Raspiの http://ip address:8000 でアクセスしてみると、
ログイン画面が出た。P.235 のユーザ名とパスワードで

 WebIOPi Main Menu

が出た。取りあえず出来た。

第8章の続き。



ここでは、精度の高いPWM信号を用いてサーボモータの角度制御を行う。

サーボモータ
Arduino Sidekick Basic Kit2 に付いてきたものを使う。
コネクタは、茶赤黄の3色。茶:GND、赤:+、黄:PWM信号


【準備】

wiringPi と wiringPi2-Pythonのインストール

 $ git clone git://git.drogon.net/wiringPi
 $ cd wiringPi
 $ ./build

 $ cd
 $ sudo apt-get install python-dev python-setuptools
   <ディスク容量喰うけどいいっすか?  yes> 

エラーでた。

  =================
  E: いくつかのアーカイブを取得できません。apt-get update を実行するか
  --fix-missing オプションを付けて試してみてください。
  =================



で、sudo apt-get update してからもう一度実行したらうまくいった。


 $ git clone https://github.com/Gadgetoid/WiringPi2-Python.git
 $ cd WiringPi2-Python
 $ sudo python setup.py install 


これで準備終わり。
 

08-04-servo.py を、おもむろに起動してみる。
=====================
>>> 
Traceback (most recent call last):
  File "/home/pi/Desktop/raspi-sample/08-04-servo.py", line 4, in <module>
    import wiringpi2 as wiringpi
ImportError: No module named wiringpi2
>>>  
=====================
エラーが出て、動かない。

 $ sudo python
 Python 2.7.3 (default, Mar 18 2014, 05:13:23) 
 [GCC 4.6.3] on linux2
 Type "help", "copyright", "credits" or "license" for more information.
 >>> import wiringpi2
 >>> wiringpi2.piBoardRev()
 2
 >>> 
 $

ん? もしや。
idle(python2.x)で動かすとできた。idle3(python3.x)だとこのエラーか。

とりあえず。でけたぁ。python2 と python3 の違いに注意。


機械学習を学んでみよう。

◆利用できそうなパッケージをキーワードで検索してみる。
$ apt-cache search "weka"
weka - Machine learning algorithms for data mining tasks
weka-doc - Machine learning algorithms for data mining tasks

 $ sudo apt-get install weka weka-doc

なんか入った。取りあえず起動してみる。
トップ画面が上がった。バージョン 3.6.6。エラーも出た。

$ weka
---Weka Editor Registration ---
Trying to add database driver (JDBC): RmiJdbc.RJDriver - Error, not in CLASSPATH?
Trying to add database driver (JDBC): jdbc.idbDriver - Error, not in CLASSPATH?
Trying to add database driver (JDBC): org.gjt.mm.mysql.Driver - Error, not in CLASSPATH?
Trying to add database driver (JDBC): com.mckoi.JDBCDriver - Error, not in CLASSPATH?
Trying to add database driver (JDBC): org.hsqldb.jdbcDriver - Error, not in CLASSPATH?


サンプルファイルから決定木を作り、木構造のビジュアル化で java のエラーがでた。
表示できるビジュアル化もある。

すこし修行が必要だ。 
 

「第8章 PWMの利用」の続き。



図8-11 DCモーターの速度制御用回路 を作る。
先に作ったLEDのやつをベースに若干つなぎ変えるところから始める。


 半抵抗ツマミを回す → ADコンバータ →[SPI通信]→
        【RaspPi】 →[GPIO]→ モータードライバ → DCモーター





DCモーター
事前にDCモーターに、コンデンサ(103)とワイヤーをハンダ付けしておいた。
モーターは、本のとおりのものを購入した。ラベルに

 MERCURY MOTOR
 FA-130RA 01/2014
 DC1.5V 9100RPM

と書いてある。
子供のころ買ってもらったプラモデルにお約束のように付いていた 130モータ。
それらは確か”マブチモーター”だったと思う。
同じ形状の130モータを見ると懐かしさが溢れてくる。

モータードライバ
TA7291P】
正逆転切替え用としてブリッジドライバで正転・逆転・ストップ・ブレーキの4モードがコントロールできる。 



図のとおり結線して動いた。
つまみの微妙な加減なのか、モータ回転とは別に振動する(通電する)ような音がずっとしている。「うーーーー」って唸ってる感じ。
 

第8章 PWMの利用に入る。



8章の最初にあるとおり、振り返る。
 RasPiが、デジタル出力 0/1(Low/High)の2値 【4章】
 RasPiに、デジタル入力 0/1(Low/High)の2値 【5章】
 RasPiに、アナログ入力 SPI通信:アナログ値→デジタル値変換【6章】
 RasPiに、アナログ入力 I2Cセンサ:アナログ値→デジタル値変換【7章】

この章で、PWMを用いて「擬似的な」アナログ信号を出力できることを学ぶ。



図8-6 を組んで、結果的には半抵抗のつまみを回してLEDが明るくなったり暗くなったりりしたので、うまくいった。

途中、PIN位置を間違えてまったく動かなかった。原因分からず四苦八苦した。


で、「8.4 RGBフルカラーLEDの色を変更しよう」は都合により、スキップする。
都合、半抵抗が2個足りない。買いに行くのを忘れた。orz 

↑このページのトップヘ