FC2ブログ

Raspberry Piで遊ぶ (2) LED点灯テスト/コマンドライン編

無事Raspberry Pi(ラズベリーパイ)の起動に成功しました。続いては、組み込み系のプログラミングの"Hello World"とも言える、LEDチカチカのテストをしてみたいと思います。

いきなりの脱線ですが、The Evolution of a Programmerというページがあります。「プログラマーの進化」ということですけど、Hello Worldと表示させるためのプログラムを中学生・高校生はBASICで
10 PRINT "HELLO WORLD"
20 END
とやっているのですが、"New professional"のレベルになると


#include
void main(void)
{
char *message[] = {"Hello ", "World"};
int i;

for(i = 0; i < 2; ++i)
printf("%s", message[i]);
printf("\n");
}


程度に進化します。Master Programmerレベルになると、もう何をやっているかパッと見ではわからないような複雑なプログラムを書くようになります。それが、"Guru Hacker"にまでなると

% echo "Hello, world."

とまぁプログラムも書かずに済ませちゃうわけですね。
更に、Middle Managerクラスになると

mail -s "Hello, world." bob@b12
Bob, could you please write me a program
 that prints "Hello, world."?
I need it by tomorrow.
^D

もう自分で作ることもできなくなるほど退化してしまいます。Chief Executiveに至っては

% letter
letter: Command not found.
% mail
To: ^X ^F ^C
% help mail
help: Command not found.
% damn!
!: Event unrecognized
% logout

全く受け付けてもらえず、捨て台詞を吐いて退散です(笑)

さて本題に戻ります。
Raspberry PiではLinuxが動いていますので、本当の"Hello World"と出力するプログラムももちろん作成できて、表示も確認できます。ですがRaspberry Piの特徴はGPIO端子を使って色々な制御ができることです。シリアル通信はもちろん、I2CやSPIを使って他のデバイスとのやり取りも可能です。何はともあれ、これらの事を始める第1ステップとしてLEDチカチカのテストをしてみたいと思います。

Raspberry PiではGPIOのピンにアクセスするために非常にユニークな方法が提供されています。Guru Hackerではないですが、これらはコマンドラインからやるとわかりやすいので、まずは簡単なshellスクリプトを作成して実験してみたいと思います。
http://elinux.org/RPi_Low-level_peripheralsには、GPIOピンのアサインや使い方に関する例が詳しく出ています。

raspbianでは、ファイルの入出力でIOピンの入出力が出来るような仕組みが提供されています。まず、IOピンの使用を宣言しますが、17番ピンの使用を宣言するには

% echo "17" >/sys/class/gpio/export

つまり/sys/class/gpio/exportに対して使用するピンの番号を文字列で書き込んでやります。すると/sys/class/gpio以下にgpio17というディレクトリのシンボリックリンクが作成され、その下にdirectionやvalue等のファイルが作られます。このdirectionというファイルに対して"in"とか"out"のように、文字列で入出力の方向を書き込んでやると、そのピンの入力/出力が定義できるのです。更にピンのL,Hの切り替えは、valueというファイルに"0"を書き込むとLOWレベル、"1"を書き込むとHIGHレベルに変化させることができます。
具体的にやってみますと、

% echo "17" >/sys/class/gpio/export
% echo "out" >/sys/class/gpio/gpio17/direction
% echo "1" >/sys/class/gpio/gpio17/value

これでGPIO17番を出力に定義して、そのレベルをHにすることができます。使用後には

% echo "17" >/sys/class/gpio/unexport

でGPIO17の使用終了を宣言します。

では実験してみます。

入力と出力を一度にテストするため、とあるピンの状態を読み取り、LOWであればLEDをON、HIGHであればLEDをOFFにするような実験をしてみましょう。GPIO17を出力にしてLEDを接続、GPIO27を入力にしてSWを繋ぎます。回路については書くまでも無いとは思いますが、
LEDTEST.png
Raspberry Piからの3.3V出力から1kのプルアップ抵抗を経てGPIO27に入れてやり、スイッチを経由してGNDに落としています。今回はSWではなくてジャンパー線でGNDに繋ぐ/繋がないでやっています。また、GPIO17から1kΩ抵抗とLEDを直列につないでGNDに落としています。

GPIO27をGNDに落とさない状態(SWオフの状態)では
settings.jpg
LEDは消灯した状態ですが、右上のGPIO27をGNDに落としてやると
P1240003.jpg
このようにLEDを点灯させることが出来ました。
このプログラムは

#!/bin/sh

LEDPIN=17
CHKPIN=27

# set GPIO channels
echo "${LEDPIN}" >/sys/class/gpio/export
echo "${CHKPIN}" >/sys/class/gpio/export

# set IO mode
echo "out" >/sys/class/gpio/gpio${LEDPIN}/direction
echo "in" >/sys/class/gpio/gpio${CHKPIN}/direction

while [ true ]
do
SW=`cat /sys/class/gpio/gpio${CHKPIN}/value`
if [ "${SW}" = "0" ]; then
echo "1" >/sys/class/gpio/gpio${LEDPIN}/value
else
echo "0" >/sys/class/gpio/gpio${LEDPIN}/value
fi
done



wiringPi libraryというのを使うと更に高度な事がコマンドラインでもできるようになります。インストールするとgpioというコマンドが使用できるようになります。こちらはPWMを使ってLEDの明るさを連続的に変えるテストです。

#!/bin/sh

PIN=18
STEP=20
gpio -g mode ${PIN} pwm
while [ true ]
do
I=0
while [ ${I} -le 1023 ]; do
gpio -g pwm ${PIN} ${I}
I=`expr ${I} + ${STEP}`
done
I=1023
while [ ${I} -ge 0 ]; do
gpio -g pwm ${PIN} ${I}
I=`expr ${I} - ${STEP}`
done
done

因みに、-gというオプションはwiringPiのピン番号ではなくBCM GPIOのピン番号(=今まで使ってきたピン番号)で指定するというものです。wiringPiとはArduinoのスケッチをそのまま移植できるようにするためのライブラリーです。Raspberry PiのGPIOのピン番号は飛び飛びの番号になっていますが、wiringPiのピン番号は0番から順番に使用可能になっています。

こちら↓がその実行結果です。




PWMの値は0~1023の間でデューティ値が0%~100%の変化をします。
スポンサーサイト
line

Raspberry Piで遊ぶ (1) 初期設定編

Raspberry Piとは英国Raspberry Pi財団が開発したクレジットカードと同じ大きさの基盤に実装されたコンピュータです。なんと35ドルと言う低価格で販売されていて、一時は入手までに4か月待ちという状態でした。最近は少し供給体制が整ってきたのか、2週間もかからず手元に届きました。

P1200005.jpg
こんなかわいらしいプラスチックケースに入っていました。

P1190012.jpg
ボードにはUSBx2, HDMI, LAN, 電源, 映像端子, オーディオ端子, SDカードスロット, GPIO端子などが備わっています。

電源はスマートフォンなどに良く使われるmicro USB(B)で供給します。かなりの電力を食うようで、一緒に入っていた説明書には最大で1.2A程度流れると書いてありました。USBでこれだけの電力を供給できるものが無かったので、HDMI⇔DVI端子の変換コネクタ、8GBのSDカードと一緒に別途購入しましたが、本体よりこれらの方が高く付きました。

最初にしなければならないのがSDカードにOSを入れる作業です。
http://www.raspberrypi.org/downloads
にあるOSをダウンロードしてきます。迷わず「推奨」と銘打ってあるRaspbian “wheezy”を入れることにしました。私はどちらかと言うとRedHat系のLinuxの方が慣れているので、Debian系のLinuxはちょっと不慣れなところがあります。まぁ基本的なところは一緒なのでそれほど問題は無いのですが。

さて、ダウンロードしてきたOSのイメージをSDカードにコピーするのですが、ただコピーするだけではダメで、
win32diskimagerというツールで書き込みます。
w32diskimager.png
Device:でSDカードのドライブを選択し、先ほどのOSのイメージを選択、WiteボタンでOKです。

出来上がったSDカードをRaspberry PiのSDカードスロットに差し込み、キーボード、マウス、モニター、ネットワークなどを接続し電源を入れます。電源スイッチは無いので、micro USBコネクタの抜き差しでOn/Offします。

P1190002.jpg
Linuxの起動画面ぽいのがずらずら表示されてきました。一番最初に起動したときにはraspi-configという画面が起動します。
P1190003.jpg
expand_rootfsとは、SDカードの容量すべてをRaspbianで使用できるようにするものです。また、キーボードの選択は[Generic 105-key (Intl) PC]-[Japanese - Japanese (OADG 109A) ]、time zoneは[Asia]-[Tokyo]を選択します。その他私はsshとboot_behaviourをONにしました。finishにするとリブートするか聞かれます。リブートすると、先ほどの起動画面が再度表示されますが、ファイルシステムのブロックサイズを変更するようで、そのところでかなり時間を要しました。

boot_behaviourをyesにしているので、立ち上がると
root.png
このようなX window systemの画面が表示されました。

8GBのSDカードを使用しましたが、空き容量は5GB強あるようです。ほとんど最小限のアプリケーションしか入っていませんので、必要なものを後から追加して使いやすくしていきます。

私は購入の際に、専用ケースを一緒に注文しました。
P1200003.jpg
こちらがケースに入れてみたところなのですが、どうやらケースに入れると熱暴走してしまうようです。これから買われる人は注意しましょう。放熱の穴を空けるかファンを付けるかなどが必要なようです。今は、蓋をせず、ケースの下の部分のみ使用しています。

次回は、組み込み系プログラミングでの"Hello World"とも言える、LEDチカチカのテストをしてみたいと思います。

参考:http://lifescape.seesaa.net/article/283876741.html
line

NIWAKA衛星補足失敗

本来なら「補足成功!」という華々しいタイトルで飾りたかったのですが、失敗しました。

福岡工大の情報では、1月14日・16日・17日の早朝に衛星が日本上空を通過する際にLED発光を実施するということでした。生憎14日は出かけており、しかも朝から雪が降る悪天候。16日と17日のチャンスを狙う事にしました。

16日は衛星の高度が低くてあまり良い条件ではありません。それに天気の方も夜半から雲が発生するような感じです。また、観測地の積雪の状態も不安でしたので、17日の早朝にかけることにしました。

当初の計画では03時22分から10Hzの点滅信号で発光させる予定になっていましたが、直前になってモールスに変わっていたようです。当方はこの変更については知らずに観測に臨んでいました。

まず観測機材ですが、ISO1600ではきついとの情報がありましたので、デジタル一眼は諦めることにしました。私のデジ一はもうかれこれ10年以上使っている今となっては旧タイプのものです。撮像素子はCCDで最大感度は1600まで。早く新しい一眼が欲しいです。そこで、写野は狭くなってしまいますが、冷却CCDのST-2000XMを使用することにしました。鏡筒の方も手ごろな焦点距離での明るい鏡筒が無いので、先日日食でも使用した60EDに0.85倍のレデューサを付けることにしました。これで焦点距離は298mm、f5.0となります。ちょっと暗いので写るかどうか不安があります…

チャンスは一瞬ですので、衛星を狙うフレーム位置と時間を厳密に決めておきます。直前のTLEデータで衛星が通るコースを計算します。guide9でTLEを読ませ、観測場所(雪入公園)の緯度・経度・標高を入れて03時22分から2分間(当初の計画に合わせたもの)の位置を計算しました。レンズの焦点距離とカメラの情報から写野フレームを表示させて色々と検討した結果、次のような位置で待ち受けることにしました。

意図した構図

大きな四角がイメージCCD、小さな方がガイドCCDの写野です。中心に選んだ星はHipparcos #44353という明るさ7.95等の星。この星の極近傍を03時23分45秒~46秒にかけて画像の下から上に向かって通過する予定です。

午前0時頃に家を出て雪入公園に向かいます。途中の林道は所々雪が残っているので帰りは凍結が心配です。当然、目的地には誰も居ません。気温-2℃。

最近、出かけるごとにトラブルが発生しているのですが、この時も冷却CCDをパソコンが認識しないというトラブルが発生しました。ドライバを再度入れなおして何とか復旧です。また、撮影機材も初めての組み合わせになるのですが、主鏡とCCDの連結方法にのみ意識が行っていて、ファインダーにまで頭がまわっていませんでした。ライブビューと言う機能は無いので、1秒間隔で連続撮影した画面を見ながら基準となる星を導入するのは結構手間でした。準備が整ったのはちょうど3時頃になっていました。

最後まで悩んだのはフィルターをどうするかです。衛星のLEDは緑色ということだったので、緑のフィルターを入れようかどうしようか迷いましたが、少しでも感度が下がるのを嫌って結局入れない事にしました。

そして03時23分35秒から20秒間の露出で撮影スタート。

niwaka_half.jpg
撮影された画像を濃度反転してみたものです。

見事に写っていません

画像の中心付近のピクセル等倍画像です。
niwaka_等倍
眼を皿のようにしても確認できません。やはりレンズの明るさが暗かったのでしょうか。

一応、撮影した位置がおかしくないか確認してみますが、実際の撮影範囲は下の画像のように、最初に計画した場所から多少ずれてはいるものの、衛星の撮影には支障のない範囲です。
実際の構図

衛星の位置計算でguide9がおかしな計算をしていないかHeavensatでもシミュレートしてみましたが、両者に特に大きな差は無いようです。

うーむ、なかなか難しい・・・

前日昼間の雪入ふれあいの里公園駐車場のパノラマ写真。
雪入ふれあいの里公園

line

沖縄のダムと鉄塔

仕事で昨年12月下旬から沖縄に行っておりました。

仕事の開始前と終了後に沖縄のダムをまわってダムカード収集をしてきました。

沖縄でダムカードが発行されているのは、北部にある北部ダム統合管理事務所の管理する8つのダムです。沖縄は国交省や農水省関連の事業を内閣府沖縄総合事務局がやっています。内閣府管轄のダムと言うのはなかなか珍しいですね。その他、2か所のダムで非公式ダムカードが配布されていますが、今回は時間の関係でそちらは諦めました。

今回、自由な時間が取れたのが平日1日と日曜1日。これらのダムのうち、平日しか対応していない3つのダムをまず最初に片付けることにしました。

最初に訪れたのは普久川ダム。これは「ふんがわだむ」と読むそうです。ダム湖はフンガー湖なんだそうな。
DSC_0502.jpg
特徴的な全面越流方式の非常用洪水吐を持つ重力式コンクリートダムです。天然記念物のヤンバルテナガコガネが最初に発見されたのがこのダムの近くだったとのこと。

続いては安波(あは)ダム。
DSC_0508_20130107011812.jpg
沖縄最大の重力式コンクリートダムです。ダム湖は「クイナ湖」。ヤンバルクイナのクイナから取ったそうです。
普久川ダム、安波ダム、そして次の辺野喜(べのき)ダムではダムカードの配布が平日のみで、安波ダムで3カ所分のカードを配布しています。時間の関係で辺野喜ダムに行く前にここで3カ所のカードを貰ってしまいました。カードを貰いに管理事務所の入り口に行くと、ちょうど昼休みだったせいか受付にある内線電話で呼び出しても誰も応答してくれず、昼休みが終わるまで待たなければなりませんでした。

次に新川ダム(あらかわだむ)に向かいました。
DSC_0519.jpg
このダムのカードは国交省の資料によると福地ダムで配布しているという事でした。なのでこの日に訪問した際には管理事務所に足を運ばなかったのですが、後でわかったことですが、このダムでもダムカードを配布していました(後述)。

DSC_0572.jpg
ダムの周囲はこんな感じで「やんばるの森」に囲まれています。


平日最後に訪問した辺野喜ダム。
DSC_0525.jpg
このダムは重力式コンクリートダムとロックフィルダムの複合形式ダムです。ダムカードの記号はGFとなっていました。写真は重力式ダムの部分。

年が明け、仕事が終わって改めて残りのダムをまわります。
最初に向かったのは羽地ダム(はねじだむ)。
DSC_0529_20130107020151.jpg
2005年に完成した高さ66.5mのロックフィルダムです。沖縄総合事務局のホームページによれば

羽地ダムでは、水が高いところから低いところへ流れ落ちる力で水車を回し、空気を圧縮し、それを様々なダム施設へ送気し利用しています。これをダムエアーエネルギーシステム(DAS;Dam Air-energySystem)といいます。

だそうです。

その次には大保ダムに向かいます。
DSC_0542.jpg
大保ダムは重力式コンクリートダムの本ダムとロックフィルダムの脇ダムとからなります。上の写真は本ダムの方です。
DSC_0544.jpg
こちらが脇ダム。

更にお次は福地ダム。
DSC_0560.jpg
このダムはロックフィルダムですが、少し離れた所に非常用洪水吐があります。
ダムカードを貰いに管理事務所に行くと、入り口には鍵が掛かっていて(休日には良く有る事です)、インターホンを押して係りの人を呼ぶのですが全く応答がありません。そこで申し訳ないとは思いましたが、電話攻撃に打って出ます。携帯は圏外なのですが、運良くすぐ近くに公衆電話を発見しました。扉を開けると中は蜘蛛の巣だらけ。やはり最近では使う人は居ないのでしょう。プッシュボタンも強く押さないと音が出ないボタンもありました。管理事務所に電話を掛けると、ちゃんと職員の方が出られました。ダムカードを貰いに来たことを告げると、すぐに入り口まで持って来てくれました。先ほど書いたように福地ダムでは新川ダムのカードも発行していると国交省の資料に出ていました。そこで新川ダムのカードもお願いしてみると在庫が無いとの事。なんと、新川ダムでもカードを配布しているという事を対応して頂いた方からお聞きしました。親切にも電話して在庫があるか確認までして頂きました。福地ダムから新川ダムは結構距離があるのですが、再度行くことになってしまいました。

新川ダムに向かう途中に目にした66kVの1回線鉄塔。
DSC_0562.jpg

線路名は「海水揚水線」という名前。気になって若番方向に辿っていくと・・・
CIMG1931.jpg
なるほどそういう施設があったのですね。揚水発電の下ダムとして海を使用している発電方式です。予約制で見学可能という事でしたがアポなし訪問でも見学できました。正月早々こんな辺鄙なところにある施設に見学に訪れる人が居るようにも思えず、職員の方も暇を持て余していたのかも知れません(発電所のコントロールは50km離れたうるま市でおこなっているそうです)。

DSC_0576.jpg
地下147mにある発電機組立室。地上からはエレベーターで一気に下りて来ました。この部屋の標高は海面下15m。最大出力3万キロワットの発電能力があるそうです。
DSC_0580.jpg
発電機上部

DSC_0579.jpg
発電機組立室と放水口を結ぶ通路。圧力水管はこの通路の下を通っているそうです。圧力水管はFRP製なんだとか。フジツボなどが付着しないように特殊な塗装がしてあるそうです。ガイドのお姉さんの話では、海水揚水発電では、下ダムを造らなくて済む代わりに生物の付着などの海水特有のメンテナンスが必要なため、一長一短なんだそうです。

DSC_0577_20130107025012.jpg
地上と発電機組立室を結ぶクレーン用資材搬入抗。手を叩くとかなり遅れて跳ね返ってきた音が聞こえます。

DSC_0585.jpg
実際に使用されている圧力水管。

DSC_0588.jpg
上ダムです。海水が漏れださないようにゴムシートで全面遮水しています。海から直接揚水しているため、金網などをすり抜けた稚魚などが繁殖していることがあるそうです。年1回の掃除で海水を全部抜くと、たくさん魚が取れるのだと説明していました。帰りにはJ-POWERの附箋とボールペンをお土産に頂きました。

海水揚水発電所でかなり時間を使ってしまい、最後の漢那ダムに到着するのがかなり遅くなってしまいました。
DSC_0601.jpg
グスクをイメージした石積み模様。

DSC_0602.jpg
バルブ室も沖縄風のつくりで、屋根にはシーサーが。

今回の成果
Scan0001.jpg


おまけ

今回のお仕事は海の上でする仕事でした。

CIMG1887.jpg
東シナ海から昇る2013年初日の出。

CIMG1868.jpg
こういう発泡スチロールで出来たカップラーメンの容器を水深1600mの海底に沈めますと・・・

CIMG1907.jpg
こういうミニカップになって上がってきました。
line
line

line
プロフィール

夜行虫

Author:夜行虫
夜行虫とは天体撮影等、夜に出歩くのが多いことから名づけました。夜光虫の誤変換ではありません。海に潜ったり温泉浸かったりも趣味です。

line
最近の記事
line
最近のコメント
line
最近のトラックバック
line
月別アーカイブ
line
カテゴリー
line
ブログ内検索
line
RSSフィード
line
リンク
line
ブロとも申請フォーム

この人とブロともになる

line
sub_line