エレキジャックでも連載開始!(秋月の気圧センサー) [電子工作]

Eleki-Jack Image

秋月の気圧センサーSCP1000についていろいろ書いていますが、エレキジャックのWebページでも連載が始まったようです。
拙ブログと違い、SPIの基本についてしっかりまとめた内容になりそうで、続きが楽しみです。
・ArduinoにSPI通信を行う機器を接続する(1)(エレキジャック/CQ出版記事)
・Arduino で秋月の気圧センサーを使う 2010/3/8 19:47(elekidのブログ)
タグ:SCP1000 Arduino

Arduinoで秋月の気圧センサーを使う(3) : センサーデータのPCでの活用 [電子工作]

SCP1000_GRAPH2.png
前回の製作でセンサーデータを一定間隔でPCに送る仕組みが出来ました。
今回はそのデータをPC側で処理する方法を紹介します。

データを蓄えてExcelなどでグラフ化すると、気圧の高低の傾向が見えて楽しいので、今回はProcessingでグラフを自動的に作成・更新するProcessingスケッチを作成してみました。

Arduinoのスケッチは基本的には前回と同じですが、データの計測間隔を15分ごととし、さらに送信するデータも整数から小数点以下第2位まで出力するように変更しています。

Processing 側ではその計測データをSerial経由で読み込んでグラフを描画します。
bufferUntil(10) を設定することで、シリアルからLF文字(0x0a/10進数で10)を読み込む度にSerialEvent()を呼び出してくれます。Arduino側から println()でデータを送信することで、データの終わりを正しく認識出来るようになっています。

Processingで受信したデータをスペース文字を区切りに分解して、固定サイズの配列にセットします。
その後配列から値を読み出してグラフを描画します。
デザイン力が無いのであまり楽しい画面になりませんでしたが、昼夜が判別出来るほうが見やすいので、深夜0:00を境に前後6時間程度の長さの背景色を暗くさせる工夫を加えてみました。
後から確認できるように受信したデータのログファイルへの書き込みも行います。ただし事前0バイトでProcessingスケッチが保存してあるフォルダーにログファイルを作成しておかないと、Exceptionが発生するので注意してください。

現在はArduino側をブレッドボードから自作シールドに切り替えるべく作業中です。

[作成したProcessingのコード]

<関連リンク>

2010.8.26 20:32 リンク追加

Japanino! [電子工作]

JAPANINO1.jpg
週末やっと購入しました。まだ箱から出しただけですが、とりあえず写真をアップ!

裏面
Japanino2.jpg
Xbee Shieldを付けてみた
Japanino3.jpg

MTM05は結局行けず。自宅からだとちょっと遠いんだよなぁ。。。。
タグ:Japanino Arduino

Arduinoで秋月の気圧センサーを使う(2) :キャラクタLCDでグラフを作成 [電子工作]

Lcd Graph
前回の続きです。
定期的(一時間毎等)に取得したデータをPCを使わずにグラフ表示させたいと思いました。
8X8などのLED Matrixは配線が大変だし、グラフィックLCDは手持ちが無いので、簡単に出来る手段としてキャラクタLCDを使うことを思いつきました。
前回使った、LiquidCrystalライブラリのcreateChar()を利用して、ちょっと小さいけどそれなりに使えるグラフが出来ました。
どれくらい需要があるか分かりませんが、ライブラリ化しています。ArduinoのLiquidCrystalライブラリの使用が前提です。
尚、こちらの環境はWindows XP/Arduino-0018 ですが、それほど特殊なことはしていないので、他の環境でそのまま又は少しの変更で動くと思います。

<ライブラリ&サンプルのダウンロード先>
LcdGraph.zip

使い方

(1) ZIPファイルを arduino-0018\libraries の下に展開してください。下記のファイルが出来ているはずです。
arduino-0018\libraries\LcdGraph.h
arduino-0018\libraries\LcdGraph.cpp
arduino-0018\libraries\keywords.txt
arduino-0018\libraries\example\Scp1000GLIB01\Scp1000GLIB01.pde (サンプルコード)

(2) Arduino IDEを立ち上げて、ライブラリをインポートしてください。"Sketch"-->"Import Library..."-->"LcdGraph"を選択してください。
(3) コーディングは配布ファイルに含まれるサンプルコードを参考にしてください。関数の使い方を下の通りです。
関数の説明
LcdGraph::LcdGraph(unsigned int c_start, unsigned int numdata)
パラメータ
c_start
キャラクタLCDでグラフ表示用に使用するキャラクタ番号の先頭の番号を指定します。0から7まで指定出来ます。使われるキャラクタの数は次のパラメータ数で決定されます。
numdata
グラフ描画用に渡されるデータ数を指定します。キャラクタの横ピクセル数(ライブラリでは"5"が設定済み)の整数倍である必要があります。またLCD で作ることが出来るキャラクタ数は最大8個までなので、5x8=40を超えることは出来ません。

void LcdGraph::draw(int x, int y, unsigned int data[], LiquidCrystal lcd)
パラメータ
x、y
グラフを表示するキャラクタLCDの座標を指定します。ライブラリ内部でsetCursor()を呼び出す際のパラメータに使用されます。左上は (0,0)となります。
data
グラフ化するデータを配列にセットしてこの関数に渡します。配列のサイズはコンストラクタでnumdataとして指定済です。
lcd
LiquidCrystalのインスタンスを渡します。

dataとして渡す配列にセットする数字は 1...65535の範囲である必要があります。ゼロは「データ無し」とみなしてプロット対象外とする仕様です。
データの最大値と最小値の差が液晶の高さ(=7)を超える場合はmap関数を使用して、液晶1文字の高さに収まるように変換してくれます。

<関連リンク>



2010.4.13 12:00 ライブラリのバグ修正(max-minが7未満の時グラフが逆転する)
2010.6.30 18:00 リンク追加
2010.8.26 20:33 リンク追加

Arduinoで秋月の気圧センサーを使う [電子工作]

SCP1000-D01 close-up
デジタル温度計は時計付きも含めると品揃えが豊富ですが、意外と気圧を計れるものは少ないです。
秋月より気圧センサーSCP1000-D01を1800円で購入出来たので、早速 Arduino で試して見ました。

1. センサーの仕様
以下は秋月の製品ページからの引用です。

  • VTIテクノロジー社製気圧(絶対圧)センサSCP1000-D01のモジュールです。
  • 扱いやすい8ピンDIP型になっております。
  • 気圧計、高度計などに最適です。
  • 電源電圧:2.4~3.3V
  • インターフェース:SPI
  • 測定範囲:30kPa~120kPa(300ヘクトパスカル~1200ヘクトパスカル)

DIPなのでブレッドボードでのお試しには都合が良いですが、電源電圧は考慮する必要があります。

2. Arduino との接続

una.veritasさんのBLOG記事「活用Bパーツ:SCP1000-D01 気圧 barometic pressure センサ」が非常に参考になりました。
電源電圧は Arduino に3.3Vの出力があるので、それを利用することにします。
Arduinoからセンサーへの出力は抵抗の分圧により、1/2の2.5Vを生成することにします。
逆にセンサーからArduinoへの入力は3.3Vから5Vへ昇圧が必要かもしれませんが、まずはそのまま直結してみることにします。

3. コード

センサーとArduinoとの接続は、3本の信号線(CLOCK/IN/OUT)を使用するSPIです。以前作ったMCP4922を利用したプロジェクトの応用でいけますが、ググッたところ、Arduino ForumでSCP1000のライブラリを作った人がいたので、それをそのまま利用することにします。
サンプルコードはシリアルにセンサーの値を出力させていましたが、今回は16x2のLCDを使います。LCDの制御はLiquidCrystalライブラリがあるので、非常に簡単に出来ます。
今回はフォント作成機能を使って「℃」の文字をパネルに表示させています。
LiquidCrystalのprintメソッドが入力値がfloatの場合固定で小数点以下第二位まで表示させる仕様のため、桁が足りなくなりそうです。そのため小数点以下第一位に四捨五入してprintした後に、setCursorメソッドで一文字カーソルを左に戻して、違う文字を上書きしています。
また今のところ意味はあまり無いのですが、ANALOGポートを一本デジタルで使用することにし、センサー読み取り中にLEDが点灯するようにしました。

作成したコードは下記の通りです。


4. 回路図

作図のセンスが悪いですが、作成したのでアップしておきます。抵抗は自宅にストックしていたものを使用しているので、値が適切かどうかちょっと自信なし....。
SCP1000-Arduino schematic
CASIOの腕時計PRO TREKと比較して見ましたが、±1hPaで正しく測定出来ているようです。
無事動くことが確認出来たので、次は応用編にチャレンジしたいと思います。
SCP1000-Arduino layout
<関連リンク>



2010.6.30 18:00 リンク追加
2010.8.26 20:34 リンク追加

タグ:Arduino SCP1000

AVRマイコンの開発(最初の一歩) [電子工作]

RIMG1400.JPG
Arduinoは非常に簡単で素晴らしい製品なのですが、工作を色々していると時々 Too Much と思えることがあります。
ブレッドボード上で試行錯誤するには最適なのですが、ユニバーサル基盤などに組み込むことを考えると意外に面倒です。
e-Jackinoを試してみて、Arduinoをカスタマイズして自分の基盤に実装するのも良いかと考え始めましたが、ここは基本に立ち返って、AVRマイコンを使ってみることにしました。
チップとして、以前エレキジャック 2008年 10月号 [マイコン特集]におまけで付いてきた ATiny2313 を使うことにします。
最初のコードはやはりハードウェアの"Hello World"と言われるBlink(LEDチカチカ)ですね。
これも、エレキジャックの記事のソースをほぼそのまま(一部だけ変更)して使用することにします。

1. 必要なソフトのダウンロード

まず開発環境を整えるため必要なソフトウェア、AVR StudioとWinAVRをダウンロードします(全て無料)。
ダウンロードしたバージョンは、AVR Studio 4.17 (build 666)とWinAVR 20090313を使用します。
AVR Studioはダウンロードに登録が必要ですが、下記リンク先からは登録を省いてダウンロード出来ます。
またWinAVRは今なら 20100120 が最新になるようです。

<ダウンロード元>
AVR® 8-Bit RISC - Tools & Software (ATMEL)
WINAVR (SorceForce)

<参考リンク>
AVRのプログラム環境(1) AVR Studio、WinAVRのインストール

2. コードの作成
上記の通りエレキジャックの例を参考してテスト用のC言語のコードを作成しました。



2つのLEDを交互に点滅させる単純なものです。
AVR Studio新規プロジェクトを作成したら上記を入力します。Buildを実行してエラーがないことを確認します。

3. ライターでプログラムを書きこむ

ライターは自作例が色々とネットで紹介されていますが、初心者らしく有名どころを購入することにします。
使用したのはAVRISPmkII で、今なら秋月で \4,000 で購入できます。
まずはブレットボードに回路を組み立て、接続します。
RIMG1401.JPG
ライターは、上下の高さが同じ丸ピンのピンヘッダ1x3を2個をコネクタ代わりして接続した、共立のISPケーブル経由で、ブレッドボードに接続しました。

わざわざ作るまでも無かったのですが、一応回路図はこのようになりました。
5V電源は手近なArduinoから供給しました。
TinyBLINK.png
ところがこの時点で何度接続を試みても"Target appears to have lost power.."とエラーが出てしまい、先に進めることが出来ませんでした。
通信速度を変更したり、ATiny2313を別に購入していたものと差替えしたり試行錯誤をしましたが、本体側のインジケータは赤色のままです。
最終的には回路と資料をよく読み返したところ、非常に初歩的な間違いだったことがわかりました。
マニュアルには左のように書かれていてそれは全く正しいのですが、コネクタを端子側からみると左右が逆になるので、右の通りになります。
AVRISPmk2Connector.JPG AVRISPmk2_ICSP_cable.jpeg



ここをパスしたら、後は非常にスムーズに進み、無事LEDピカピカが動き出しました。
今後は先日秋月で購入した気圧センサーを接続したいと考えています。
まずはArduinoでプロトタイピングですね。





アクリル板とLEDでイルミネーションを作成 [電子工作]



手軽に出来て美しそうだったので、エレキジャックNo.15の記事「アクリル板とLEDで作るまたたくイルミネーション」を参考にクリスマス向けのイルミネーションを作成してみました。
以下、作成メモです。


1. デザインを決める

記事ではイラストでしたが、文字を入れたかったので、GoogleでRoyality Free のイラスト風文字を検索しました。
今回はStockPhotographyより入手したイラスト風の"Merry Christmas"を使用することにします。
アクリル板に彫りこむため、JPEGは左右反転印刷しておきます。

2. アクリルボードを必要なサイズにカット

3mm厚のアクリルボードを必要なサイズ・数にカットします。
3色にする予定だったので、Pカッターを使用して20cm X 7cm 程度のサイズ×3を用意しました。
切断は、出来るだけ直線となるように力を入れて数回切れ目を入れた後、テーブルの角などで力をいれてパキッと折ります。


3. アクリル板にデザインを彫りこむ
RIMG1251.JPG
文字を印刷した紙をセロテープで、カットしたアクリル板に固定します。
"Merry" と "Christmas"を別に色にするために、半分に切ってそれぞれ用のアクリル板に固定します。
アクリル板は以外と硬いので、完成後裏側となる面に以前ダイソーで購入したミニルータに小口径のドリルビットを接続して、文字にそって点々とマークを付けて行きます。
穴を開ける必要は無いので、ごく軽く跡を付けて行けばOKです。
また3枚目のアクリル板には、ルーターで星マークを文字とのバランスも考えて適当に彫ります。

4. LEDを配線する

LEDはアクリル板の側面から光を照射させるために、充分な長さの配線をする必要があります。
工作用のビニール線を、適切な長さに足をカットしたLEDと半田付けします。
その際に、アノード側の足には電流制限用のカーボン抵抗を直付けします。
片方の足はヒートシュリンクチューブをかぶせて、ショートを防ぎます。

5. LEDをアクリル板に固定する

アクリル板はLEDを取り付けない側面は、全てビニールテープを貼り付けて、側面からの光漏れを抑制します。
LEDもビニールテープで固定して、その側面もビニールテープでマスクしてしまいます。

5. 電池の準備

たまたま買置きがいっぱいあったので、今回は単2乾電池を使用しています。
1.5V×2で3Vだと、LEDのカタログ上3.2Vの降下電圧にやや足りないので、3個を使って4.5Vとしましたが、
今にして思えば、6Vのほうが電池フォルダの加工が簡単で良かったかもしれません。

6. 点滅回路

3枚目の星用に、IC内蔵で自動的に色が変化するフルカラーLEDを準備していたのですが、作成中うっかり4.5Vをそのまま接続してしまい、一瞬で刺激臭を残して昇天してしまいました。
しようがないので、予備の白色LEDに555タイマーICを2個使用した点滅回路を接続して、ピカピカを実現しました。
結果的にはこのほうが綺麗で良かったと思います。
点滅はArduinoを使っても良かったのですが、555のほうが凝り過ぎずシンプルかつ短時間で出来たので満足しています。
最初はATiny2313のマイコン制御も試みたのですが、ライタ無しだと大変なので今回はあきらめました。
回路は17列のミニブレッドボードにすっきり収まりました。
LEDXMAS_SCHEMATIC.JPG
7. 仕上げ

3枚のアクリル板を重ねて、最後に足としてアクリル板の小片2枚をホットボンドで水平になるように接着しました。
最後に黒画用紙を全体をすっぽり覆うようにカットして、重ねています。

8. 雑感など

使用した材料は下表にまとめました。
LEDは最初「高輝度」のものを実験してみたのですが、光が弱く「超高輝度」タイプを買い足しています。
完成品は若干光漏れが多いですが。仕上がりは夏休みの自由研究感が出てしまいましたが、家族にはかなり好評でした。

材料(メイン) 数量
3mmアクリルボード(A4) 1
5mm砲弾型長高輝度LED(白) 1
5mm砲弾型長高輝度LED(赤) 1
5mm砲弾型長高輝度LED(緑) 1
100Ω 1/4W 炭素皮膜抵抗 2
50Ω 1/4W 炭素皮膜抵抗 1
耐熱ビニル電線 適量
バッテリフォルダ(単2) 2
単2マンガン乾電池 3



材料(点滅回路) 数量
NE555 タイマーIC 2
16V 100μF 電解コンデンサ 1
16V 47μF 電解コンデンサ 1
1KΩ 1/4W 炭素皮膜抵抗 2
10KΩ 1/4W 炭素皮膜抵抗 2
2SC1815Yトランジスタ 1
17列ミニブレッドボード 1
ジャンパワイヤ 適量



タグ:LED 555

YAMAHA FM音源Shield for Arduino [電子工作]



これは凄い!
Yamaha_YM2151.jpgYAMAHAのFM音源IC YM2151を解析して、Arduinoで使えるようにした方がいます。
レジスターの使い方などはデータシートに記載されていないので、X68000のマニュアルを探し出して参考にされたとか。
何より感心したのは、きちんとArduinoが音楽している点。
曲のセンスは同年代の方と見ました。

参考リンク
ISH日誌

タグ:Arduino YM2151
nice!(1)  コメント(0)  トラックバック(0) 
共通テーマ:動画

ダイソーすごい! [電子工作]

RIMG1163.JPG
100円ショップが便利なのは周知のことですが、先日ダイソーで驚きました。
普通の街中の100円ショップも楽しいのですが、郊外型のフロア面積が100平米以上のものは、200円(税込210円)均一や600円(税込630円)均一の商品など、価格帯のバラエティが豊富です。
特に工具類の充実ぶりはすばらしいです。
木工・電気など種類が豊富で、無いのは高価な電動ドリルぐらいでしょうか。
エレキジャック 2009年 11月号 [雑誌]の記事を見て、目当てだった上記写真のルーター@630円と、アクリル板各種をゲットしました。

その前に吉祥寺のユザワヤにも行ってみたのですが、閉店セール中で在庫がないものが多くてがっかりでした。趣味ではないですが、画材も充実していて見るだけでも楽しかったのですが、今後吉祥寺界隈の漫画家さんは、大変ですね。

歯ブラシロボット(夏休み自由研究) [電子工作]

RIMG1151.JPG
子供の夏休みの自由研究のネタとして、以前 Make Blog で紹介されていた歯ブラシロボット(Bristlebot)を作らせてみました。

Bristle は英語で剛毛とかブラシの毛の意味になります。ブラシの毛+ロボットで Bristlebot と称するようです。
オリジナルは、いつも面白いネタを提供してくれる、Evil Mad Scientist です。
【使用した材料】
  • 歯ブラシ
  • ボタン電池
  • 携帯電話用小型振動モータ
  • 両面テープ

作り方は超簡単で、歯ブラシ一つまたは二つの上に厚手の両面テープを貼り付け、その上にモータと電池をペタリと乗せて接続をすればすぐ動きだします。
コツらしいコツといえば、テープの厚みを利用してモータを歯ブラシ本体からは浮かせて設置することぐらいでしょうか。
オリジナルでは、モータからの銅線のリードを加工して、電池の抜き差しを容易となるように工夫していますが、今回は子供の工作なのでセロテープですませています。
私はモータを秋葉原の若松通商さんで@105円でばら売りされていたものを購入しました。
説明には 1.5V~3.0Vで稼動と書かれていたので、ボタン電池はCR2013を使用しています。
両面テープは3Mの「強力」タイプをつかっています。

超簡単な工作の割りに、驚くほどよく動きます。
なお、使い古しの歯ブラシを使うとまっすぐ動かないようなので、100円ショップなどで出来るだけ新品を使ってください。
【使用したモータ】
RIMG1149.JPG

【動画】

[2009/8/26] タイトルがデフォルトのままだったので変更しました。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。