雑記 -Miscellaneous-

 10日間の旅行に行くときにベランダで育てている野菜(小松菜とか野菜もろもろ)の水やりをどうしようか考え、
既製品も含めいろいろ検討した末、自作することにしました。

いろいろ調べたところ、よく使われるのが、水道の蛇口に取り付けて弁を制御するタイプの製品。
私の住処では植木鉢をベランダで育てているので、これは無理。
次にいいなと思ったのが、ペットボトルに制御部を取り付ける簡易タイプ。
これで目的が果たせるかも!と思ったのですが、10日だとペットボトルじゃ足りません。

というわけで、私の目的を果たせるものがありそうでないことがわかったので作ってしまうことにしました。





★材料








・USB延長ケーブル * 2(フラットタイプ)


★その他
半田ごて * 1(正直安モノでいい)
・半田 * 適当量
・ホットボンド(百均に売っているもので問題ない) * 必要に応じて
・LANケーブル(Raspberry Piにsshで入って設定する用)
・HDMIケーブル、キーボード、マウス(Raspberry PiのIPアドレス確認用)
・電動ポンプの動作確認用の乾電池

<組み立て>
シンプルなリレー回路です。
リレーはNC(ノーマルクローズ)につながないようにしましょう。
電動給油ポンプが単1乾電池2本で動くものなので3V駆動ですが、実際は
下の絵は素材がなかったために適当なバッテリーを繋いでいますが、実際には市販のUSBケーブルを剥いてPin1とPin4を繋いでいます。(電源はUSB ACアダプタを使用)
3Vのモーターに5Vを繋ぐのでモーターが心配ですがなんとかなるでしょう(適当)
心配な場合はきちんと降圧するか、3Vの電源を用意しましょう。
(ちなみにRaspberry Pi自体の電源と灯油ポンプの電源を両方ともボード本体から取れないかと、派生製品(Orange Piシリーズ)も全部試しましたがダメでした。残念ながら起動直後にResetがかかります。)
自動水やりき


基盤なしで、そのまま電動給油ポンプの電池入れる部分をくり抜いてリレーを押し込んでおります^^
Raspberry Pi Zeroだったらまるごと給油ポンプの中に押し込めたのに・・・。
なお、ベランダで使う場合は防水対策はしておいたほうがいいと思います。

USB延長ケーブルはフラットタイプにしておくと窓を閉めることができて、かつ電源を屋内から取ることができます。
13920840_1117691534947036_4922592358260476820_n


<ソフトウェア>
OSのセットアップ方法はどこにでもあるので割愛します。
pythonで楽がしたいので、WiringPi-Pythonをビルド&インストールしておきます。
大したプログラム書くわけでもないのでUbuntuでもRaspbianでも問題ありません。

=====================
orangepi@OrangePI:~$ sudo vi /etc/init.d/optest.py
gpio.setcfg(PUMP, gpio.OUTPUT)
while COUNT >= 0:
    gpio.output(PUMP, 1)
    if COUNT == 0:
        print "IT'S WORKS!"
        gpio.output(PUMP, 0)
        break;
    else:
        print COUNT
        gpio.output(PUMP, 1)
        COUNT -= 1
        time.sleep(1)
while True:
    time.sleep(86400)    //1日1回
  //どうしてCronでやらなかったんだろ・・・と作った後で気づくという
    timing_limit = 20; //20秒間
    while timing_limit >= 0:
        gpio.output(PUMP, 1)
        if timing_limit == 0:
            print "Time's Over. Pump Stop."
            gpio.output(PUMP, 0)
        else:
            print timing_limit
        timing_limit -= 1
        time.sleep(1)
=====================

<動作パターン>
Raspberry Piはgpioのピンによって初期状態でプルアップされているピンとプルダウンされているピンがあります。
わざとプルアップされているgpioピンに接続すれば、通電からプログラム動作時までの数秒間、ポンプが動きますのでポンプが動作するかの最終確認をすることができます。
上記プログラム実行時から24時間後に20秒間ポンプが動作、以後24時間毎同じ動作の繰り返しとなります。

で、あとは
推奨されていませんが/etc/rc.localで作成したスクリプト指定すれば起動と同時に動きます。
ちゃんとやるならsystemdとかですかね。
今回のはネット接続もいりません。

<まとめ>
こんなかんたんな制御ならもちろんマイコンでもできますが、ラズパイで作っておいて、今後色々応用できたらなあと思っております。
Parrot Flower Powerとか、可視化ソフトと連携して色々できそうですね。

Ulefone Powerのroot奪取について

結構手間取り、作業中に2日ほど文鎮化 したので忘れないようにメモも兼ねて。

ulefone power rootでググり、ドライバ、flash toolとscatter fileをダウンロード

ドライバをインストールし、flashtoolを起動して手順通りに実行するも、エラーがでて焼けない。
このエラーに慌ててしまい、Format Flash(format whole flash except bootloader)してしまう。
結果、起動はおろか、電源ボタンを長押ししてもボリュームボタンを押しながら電源を入れてもうんともすんとも言わなくなる。
以後、何をやってもobtain dram failed.というエラーが表示されて何もできない状態になる。(brickっぽくなった)

いろいろ試行錯誤した結果、下記のサイトのドライバの適用でうまくいくようになった。

Ulefoneリカバリー手順Ulefone PowerドライバをDL
 (メモ:ちなみに上記サイトのFlashing Toolも試してみたが、自分の環境ではうまくいかなった。)

windows7の場合:
 ・コマンドプロンプトを管理者権限で起動し、以下を実行する
   bcdedit /set testsigning on
 ・上記ドライバを解凍したフォルダに入っているbatを実行
 ・警告ダイアログが表示されたら、「インストールする」を選択
 ・再起動

windows8の場合:
 ・コマンドプロンプトを管理者権限で起動し、以下を実行する
   bcdedit /set testsigning on
 ・そのままコマンドプロンプトで以下を実行する
   shutdown /r /o /t 0
 ・再起動されオプションメニューが表示されるので、「トラブルシューティング」->「詳細オプション」->「Windowsのスタートアップ設定」->再起動
 ・再起動されると、自動的に起動オプションの選択画面が表示されるので、キーボードの7を押下
 (メモ:Mac OS上のParallelsでこれをやろうとしたが、再起動されたタイミングで普通にWindowsが立ち上がってしまってうまくいかなかった。)

 ・Windowsの起動が完了したら、ドライバを解凍したフォルダに入っているbatを実行
 ・警告ダイアログが表示されたら、「インストールする」を選択
 ・再起動

ここまでやったところで、SP Flash Toolの挙動が変わった。
エラーは依然としてでるものの、S_SECURITY_INVALID_PROJECTになった。
ググったところ、「USBのネゴシエーションの速度を変更するといいよ」とか書いてあったが、自分の環境では関係なかった。
結論としてはSP Flash Toolが古かったので、SP FLASH TOOL V.5.1620を拾ってきたところ再度エラーが変わった。
また、scatterもDA(Download-AgentもCドライブ直下に置いて、パスから半角スペースなどを消しとかないとエラーが出ることがある。(おそらくパスに半角スペースとかが含まれていると失敗する?)

ここまで挙動が変わった事で、根拠もなくいけそうな気がしてきた。
エラーが変わるということは完全にbrickしてない可能性があるということ。

Ulefoneリカバリー手順

をもう一度参考に、OSイメージをDL。
解凍するとCheckSum_Gen.exeが入っているのでそのまま実行。
scatterファイルが自動生成されるので、それを使い、さっきDLした最新のSP FLASH TOOLで書き込みをトライしたところ、成功。
試しに、USBを一旦抜いたら、初期状態で起動してきた。
その後、電源をオフにして、ボリュームアップ+電源長押ししたところ、倒れたドロイド君出現。

ドライバは正しくインストールされているはずだから、もう1度TWRPを焼ければいけるはず。
Ulefone Power用OSイメージ、およびTWRPイメージ
をDL。
先ほどの最新のSP FLASH TOOLで書き込み->成功
TWRPの使用方法は別サイト参照。

というわけで無事にbrick的症状から脱し、root化にも成功しましたとさ。
なおお約束ですが、Ulefone Powerは技適を取っていないので中国など、使用しても問題ない国で使うようにしましょう。

<root奪取するときの注意点まとめ>
  • SP FLASH TOOLは最新のものを使用する
  • download-agentやscatetrファイルは、Cドライブ直下に置いたほうがよい
  • ドライバのインストールが正しくできたかがとても重要
  • (なぜか)使えずエラーになるファイルがネット上に転がっていることを認識しておく






■必要なもの
・Raspberry Pi 2 Model B × 1
・USBスピーカー × 1
・半田ごて × 1
・半田 × 少量
・百均の乾電池2本で動くXmasイルミネーション × 適当
・グルーガン × 1
・グルースティック × 1
・microUSBケーブル × 1
・モバイルバッテリー × 1
・GPIO用ピンヘッダ × 適当

ダイソーとかに売ってるXmasイルミネーション
これらは100円で安くてよいのですが、常時点灯タイプ or ひたらす点滅を繰り返すタイプしかないことや、1つ1つ乾電池が必要になってしまいツリーに巻きつけた時の見た目がアレということもあって、今回はラズパイで制御しようと思い立ちました。

DSC_0733


使用するGPIOを決め、Groundの位置も確認しておきます。
gpio-pins-pi2

gpio-numbers-pi2

バラします。
といってもハサミかニッパーでケーブル切断するだけですが(⌒-⌒; )
CM151213-183835001


半田ごてでピンヘッダとバラしたLEDを接着します。
CM151212-001033001

Ground側がわからなくなると面倒なのでテプラなどで印をつけておきます。
次に、接着したピンヘッダをRaspberry Piに挿入します。
CM151212-001050002

LEDの点灯パターンを作成します。
事前準備としてRaspberry PiにRaspbianかUbuntuをインストールし、動作する状態にしておきます。

ubuntu@raspberrypi ~ $ sudo apt-get install git-core 


ubuntu@raspberrypi ~ $ git clone git://git.drogon.net/wiringPi


ubuntu@raspberrypi ~ $ cd wiringPi
ubuntu@raspberrypi ~/wiringPi $ ./build 

ubuntu@raspberrypi ~/wringPi $ cd ~
ubuntu@raspberrypi ~ $ vi led-test.sh 

#!/bin/bash

gpio -g mode 2 out #red
gpio -g mode 3 out #green
gpio -g mode 4 out #blue
gpio -g mode 5 out #whilte
gpio -g mode 13 out #rgb
gpio -g mode 26 out #gold

while :
do
gpio -g write 2 1
gpio -g write 3 1
gpio -g write 4 0
gpio -g write 5 0
gpio -g write 13 0
gpio -g write 26 0

usleep(1)

gpio -g write 2 0
gpio -g write 3 0
gpio -g write 4 1
gpio -g write 5 1
gpio -g write 13 1
gpio -g write 26 1

usleep(1)

gpio -g write 2 0
gpio -g write 3 0
gpio -g write 4 0
gpio -g write 5 0
gpio -g write 13 0
gpio -g write 26 0
usleep(0.5)
done
すべてのLEDが点灯できることを確認したらホットボンドで誤魔化接着します。
CM151212-001125008
接着が終わったら再度点灯するかテストします。

クリスマスツリーを用意します。
Rasberry Pi本体をできるだけ隠したいので鉢にスペースがあるものを選びました。
CM151212-000907001

好きなように巻きつけます。
CM151212-000729001

次に音楽を鳴らします。
楽曲はあらかじめRaspbery Piの適当なディレクトリに入れておきます。
teratermやwinscp、fileZillaなどでscp転送するのが手っ取り早くてオススメです。
USBスピーカーをRaspberry Piに接続します。
HDMIなどが接続されているとそちらが優先デバイスになる可能性があるので気を付けましょう。

ubuntu@raspberrypi ~ $ sudo apt-get install mpg321
ubuntu@raspberrypi ~ $ lsusb


ubuntu@raspberrypi ~ $ sudo alsa unload
ubuntu@raspberrypi ~ $ sudo modprobe snd_usb_audio

音楽を鳴らしてみます。
ubuntu@raspberrypi ~ $ mpg321 -g 10 xmas_song.mp3

gオプションはボリュームで0から100の整数で指定します。
音楽は再生中にctrl+Cで中断できます。

ここまで出来たら最後に起動時に自動実行されるようにします。

おしまい。





このページのトップヘ