-
一般的にデータロガーは値段が高い。そこで秋月電子のデータロガーとシリアル−USB変換ケーブルを購入して使用してみようと考えた
-
データロガーの入力端子と端子台を接続したのは2×20の昔のハードディスクのパラレルケーブル。ピンは順番がバラバラなので端子台に順番に接続した。(マイナスの端子にはGNDを接続)
-
端子台に可変抵抗器を接続し、スタンドアロンで動作を確認。
-
ログデータを吸い上げるにはPCが必要。そこで接続したPCのOSはUbuntu、Wine上でCD−ROMに入っていたデータ管理ソフト「AKI PIC LOGGER」を動作させ、一通り動作を確認できました。
(補足:AKI PIC LOGGERは本来Windowsのソフトです。WineはLinux系のOS上でWindowsのソフトを動作させるソフトです。ただ、エミュレータではないらしい。) -
あと、WineのためにUSBのシンボリックリンクを追加してください。
~/.wine/dosdevices/ に
ln -s /dev/ttyUSB0 com1
以下のURLを参考にしてください。https://wiki.winehq.org/Wine_User%27s_Guide#Serial_and_Parallel_Ports -
今どきのグラフィックが派手なデータロガーと異なり、秋月のデータロガーはかなり地味ですが、データロガーとしての最低限の機能は十分にあります。PCを接続してもリアルタイムでグラフをグラフィック表示できないことはご承知ください。
-
編集後記:将来、Raspberry PiとPythonを利用して操作したかったので、PC−データロガー間の通信の仕様を秋月に聞いてみたのですが、「ソースコードがCD−ROMに載っているのでそれを参考にしてください」ということでした。結果的に私のスキルでは読むことができませんでした。もともとプログラミングヘタレな私にはアセンブラなんかもっと無理! ただ、UbuntuとCutecom(シリアル通信用ターミナルソフト)を利用し、「V」コマンドでデータロガーのファームウェアのバージョンをターミナルソフトに表示することは成功しました。もし、興味がある方はこれ以降をお願いいたします。
事の発端はGoogle HomeもどきであるAIY Project Voice Kitを購入・組み立て・インストールして、とりあえず英語で動作するようになって、英語で質問すると時間や天気と答えるようになったが、「じゃぁ、この箱はなにに使えるの?」と聞かれるとなにも使えない。
それじゃ、とりあえず目の前のテレビを操作しようということになって始めたプロジェクトがこれです。
実は最初は中に入っているRaspberry Piから直接赤外線LEDを発光させてテレビを操作しようと思ったのですが、Linuxのリモコン操作のライブラリーがバージョンによって使い方が違うということが判明しまして、さらに英語が大の苦手な私にとって最新のライブラリーの使い方を理解することは不可能と判断しまして、基本的に赤外線LEDの発光はArduinoにお任せしようとなったわけです。
ここまで引っ張っておきながら今回AIY Project Voice Kitには全く触れていません。
今回のブログはパソコンからシリアル通信でArduinoに文字データを送り、赤外線LEDを 発光させるだけです。
動作確認はSHARP LC-42EX5だけです。
AruinoのスケッチはPanasonicとなっていますが、赤外線の発光パターンがパナソニック形式だっただけで、このスケッチで操作しているのはSHARPのテレビです。(信号コードを変更してあげれば可能だと思う)
スケッチや回路図などのデータは今回からGithubに載せてみました。
SoratobuMacaroniPenguin/PansonicIrRemote
なにか不具合点や質問、要望などコメントしてください。
最後にArduinoのIRremoteライブラリーを開発してくれたKen Shirriffに感謝します。
息子の部屋でお菓子が無くったという連絡を受けて、監視カメラを作るプロジェクトを立ち上げました。
ハードルは大きく分けて3つ
2.Sambaの設定をする
3.Raspberry Piのメモリーを利用するため、ある程度画像が溜まったら自動的に削除するプログラムを作る
1−1 Motionをインストールをする sudo apt-get install motion
1−2 /etc/motion/motion.confの設定をする
1−3 設定値はサンプルを基本にして適当に設定しました。(静止画のみ、3秒おきに撮影、640×480) ※変更箇所のみピックアップ
width 640
height 480
minimum_frame_time 3
threshold 4000
ffmpeg_output_movies off
target_dir /home/pi/Pictures
stream_port 0
1-4 webcontrol_port 8080 であればブラウザで設定ができます。Raspberry Pi上のブラウザのURL欄に127.0.0.1:8080を入力してください。ただし、設定完了後にはSaveをお忘れなく
1−5 デーモンで動かす
2−1 Sambaの設定はSambaのホームページからサンプルをダウンロードして多少変更して使用しています。
「Chapter 2. 手軽な始め方: 短気な方への手引き」の「スタンドアローンサーバー」の「Example 2.1. 匿名リードオンリサーバー設定」を参考に設定しました。
ちなみにこの設定では外部から写真を閲覧はできますが、削除はできません。
3−1 ある容量以上に達した場合、古いファイルから削除するスクリプトをPythonで作ってみました。
import os
from operator import itemgetter
picture_space = 30720 # 30720 = 30 * 1024
d_name = '/home/pi/Pictures/'
file_list = []
size_counter = 0
for file in os.listdir(d_name):
file_info = os.stat(d_name + file)
file_list.append([d_name + file , file_info.st_mtime , int(file_info.st_size / 1024)])
size_counter = size_counter + int(file_info.st_size / 1024)
file_list.sort(key = itemgetter(1))
if size_counter > picture_space:
size_counter = size_counter - file[2]
os.remove(file[0])
else:
break
![](https://blogimg.goo.ne.jp/user_image/1c/a0/75319e41a6ebb51cb6c06ae7fe461faa.jpg)
MakerFaireTokyo2016のスイッチサイエンスで手に入れたchibi:bitですが、様々な問題(Bボタン問題とWindows10AnniversaryUpdate)を乗り越え、やっとのことでプログラムが完成しました。
コンパスです。
ネットに掲載しているプログラムを参考にしましたが、最終的に矢印が常に北を指しているプログラムはオリジナルです。
実はこのブロックのプログラムを公開したいと思い、とりあえずプリントスクリーンしたのですが解像度が足りなくなってしまい、うまく公開することができません。
次に文字スクリプトにコンバートしてみたのですが、コピーすることができません。
なんかいい方法はないものですかねぇ。
このchibi:bitはBBC micro:bitの互換機です。
その中にはBluetooth、磁気センサー、5×5LED、ブロックによるプログラムなどいままでにない素晴らしいワンボードマイコンなのですが、かなり惜しいです。
先ほど話したネットでの公開方法も惜しいと思えることの一つです。
その他、入出力端子が基板の端についているというのはとっても斬新なアイデアなのですが、接続できるスロットが手に入らない。(もしかしたら、私が見つけられないだけなのかもしれないが、見つかる気配がない)
さらに情報が少ない。
私自身、実はこのchibi:bitが初mbedなのです。
いままでarduino推しだったのでmbedに触ったことがなかったのですが、結構面白いと思います。
ユーザーがネット上に掲載する情報がもっと多くなったら、とってもよいマイコンボードになると思います。
40W2灯用逆富士型蛍光灯器具いわゆる「逆富士」で通っていた名称もLED時代には形も変わり「ベースライト」という名称が一般的になりました。
我が家の子供の部屋の2段ベット風ロフトの下が暗いのですが、明るさの調整が微妙だということで調光付きのLEDベースライトをつけようと思いました。当然ながら照明器具だけでは調光ができず、別途調光装置が必要です。しかし、メーカー製の調光装置は値段が高い。
そこで電子工作で何とかならないかと考えたのが今回の企画です。
注意事項
当然ながらこの記事を読んで同じものを作ってみようと思われることは大変結構なことですが、自己責任でお願いいたします。
それからもっと大切なことですが、この記事を書いている時点で実際にLEDベースライトで動作を試せていません。
試せていない理由はLEDベースライトを間違えて購入してしまったからです。
読者の方に同じ轍を踏まさないためにも間違えた理由をここに書いておこます。
私の場合、蛍光灯換算で20W1灯用タイプのベースライトを買いました。
本来購入しなければならなかった蛍光灯器具は
三菱電機製 組み合わせ形名 MY-L215030N AZH(ライトユニットEL-LU21503N AZH + 器具EL-LHL20700)ですが、
実際には私がAZHというところを未記入で発注してしまったため、電材屋さんで一般時な方のAHTNの記号が補填され
三菱電機製 組み合わせ形名 MY-L215030N AHTN(ライトユニットEL-LU21503N AHTN + 器具EL-LHL20700)
が来てしまいました。
開封前に気がつけば返品もできたのでしょうが、調光ができないことがわかってから型番が違うことに気がついたのでかなりの後の祭りでした。
とりあえず作ってみた
![](https://blogimg.goo.ne.jp/thumbnail/53/c4/761da5de3f826c86123bf6614cde043b_s.jpg)
![](https://blogimg.goo.ne.jp/thumbnail/4d/2b/028e2bd6494627ed2d89ef7282534fc1_s.jpg)
int analogPin = 3; int pwmPin = 3; int val = 0; void setup() { } void loop() { val = analogRead(analogPin); analogWrite(pwm Pin, val / 4); }
とりあえず動かしてみた
とりあえず、今日完成した成果から
Arduonoのシールドは何年か前のMakerFaireTokyoでスイッチサイエンス + セニオネットワークのワークショップに参加した時に娘がハンダゴテを使用して作った「五徳バーLEDシールド」です。
その時に使われていた教科書がどこかに行ってしまったので逆にハード側から調べたのですが、バーLEDのしくみが分からない。
ホント、四苦八苦して調べたら、Complementary LED Driveという方式で点滅していることが判明。
参考:パレットソフトさんの複数LED制御のページの「サンプルプログラム(その2:Complementary LED Drive)」という項目。
とりあえず、作ってみたスケッチはこちら
from firmata import * a = Arduino('/dev/ttyUSB0',baudrate=57600) # 3 for COM4 #[Z,Z,Z,L,H]→Z:入力にするポート、L:出力LOWにするポート、H:出力HIGHにするポートの順番で配列(リスト) led_matrix = [[2,3,4,1,5],[1,3,4,2,5],[1,2,4,3,5],[1,2,3,4,5],[2,3,5,1,4],[1,3,5,2,4],[1,2,5,3,4],[1,2,3,5,4],[2,4,5,1,3],[1,4,5,2,3],[1,2,5,4,3],[1,2,4,5,3],[3,4,5,1,2],[1,4,5,3,2],[1,3,5,4,2],[1,3,4,5,2],[3,4,5,2,1],[2,4,5,3,1],[2,3,5,4,1],[2,3,4,5,1]] def led_print(n): #毎回、一旦全部のポートを出力LOWにしている。 for j in range(5): a.pin_mode(n[j] + 4, firmata.OUTPUT) a.digital_write(n[j] + 4, firmata.LOW) #入力にするポート、出力LOWにするポート、出力HIGHにするポートの順番で設定 print 'SEG' + str(n[0] + 3) + '= Z' a.pin_mode(n[0] + 3, firmata.INPUT) print 'SEG' + str(n[1] + 3) + '= Z' a.pin_mode(n[1] + 3, firmata.INPUT) print 'SEG' + str(n[2] + 3) + '= Z' a.pin_mode(n[2] + 3, firmata.INPUT) print 'SEG' + str(n[3] + 3) + '= L' a.pin_mode(n[3] + 3, firmata.OUTPUT) a.digital_write(n[3] + 3, firmata.LOW) print 'SEG' + str(n[4] + 3) + '= H' a.pin_mode(n[4] + 3, firmata.INPUT) a.digital_write(n[4] + 3, firmata.HIGH) a.delay(0.02) #本文 a.delay(2) while 1: for i in range(20): print str(i) + " = " + str(led_matrix[i]) led_print(led_matrix[i])
まあどれをとっても最初にしては上出来では・・・
今度はFirmataをやってみたくなりました。
Firmataとはパソコンの高級言語やProcessingからArduinoの入出力端子に直接アクセすることができる方法です。
ArduinoにはあらかじめFirmataのスケッチをコンパイルして入れておきます。
先日、ちょこっと使用しようしたPython言語に惚れ込んでしまいましたので、最終的にはPythonからFirmataを使用したいと思っています。
とりあえず、ProcessingからFirmataを使用してみます。
なにも知らない私が参考にさせていただいたWebページは以下のとおりです。
です。これでArduinoが接続されているUSBの番号を知らないとFirmataが使えないことを知りました。サンプルなども大変参考になりました。
何に使いたいのかも、何に使えるのかも全くわからないですが、楽しみながらやりたいと思います。
私の場合、RaspberryPiを買ってはみたものの、Raspbianをインストールして起動できたら、満足して終わりって感じでしたね。
やはり、Arduinoと比べたら外部端子で入出力って敷居が高いってかんじですね。
なんでだろう。
○Arduinoと違って、開発しているところが一本化していない
○インターネット上の情報が散らばっていて、探すのが精一杯
当然ながら、最初はRaspbianのインストールからはじめました。
以前よりもバージョンアップしていました。現在(2014/11/03)の最新版で2014/09/09でした。
それからRaspberryPiの外部端子(GPIO)にアクセスするための環境を整えます。
アクセスする方法は複数あるみたいですが、私が選んだのはAdafruitのPythonを使う方法です。
私はとっても英語が苦手なのですが、辞書を片手にLESSON1から順番に設定していったらとりあえず開発環境は設定出来ました。
しかしやはりマニア向けなのでしょうか、途中から急に難しくなります。なんで設定まで手取り足取り事細かく書かれているのに、実際にプログラミングする段になってから、突き放すような行為に出てしまうのか不思議です。もう少しゆっくりと階段を登るようにlessonしてくれたらうれしいと思います。
なにがともあれGPIOを使用したという実績がほしいために、定番のLチカを紹介しているホームページを探しました。
http://www.hiramine.com/physicalcomputing/raspberrypi/rpigpio_blink.html
です。
![](https://blogimg.goo.ne.jp/thumbnail/2d/2c/9eada24eff8f5dcb8a55f2a8da5446cb_s.jpg)
これでGPIOを使用したという実績だけはできました。
しかし、コンテストに出すようなアイデアは浮かばない。ましてやOSが載っているマイコンボードのメリットが生かせるようなものというと、とにかく難しいですね。
と、言っても基本的にハード部分は完成しておりまして、あとはソフトの部分のみです。
![](https://blogimg.goo.ne.jp/thumbnail/09/b1/5c2ee7db30bb3c3e20e915999ae5d941_s.jpg)
![](https://blogimg.goo.ne.jp/thumbnail/7d/ec/813c05845ebcaec7361f115f67a108f8_s.jpg)
![](https://blogimg.goo.ne.jp/thumbnail/41/d8/c524645317981493927de92e03a5b34d_s.jpg)
![](https://blogimg.goo.ne.jp/thumbnail/3e/37/f69a1c74ed1ed707e3766123b8ce5c4c_s.jpg)
![](https://blogimg.goo.ne.jp/thumbnail/1c/9a/25967f8b9e71b80a2acd8ef75f6db605_s.jpg)
あとはコツコツとソフトを作っていくだけなのですが、時間とやる気がなかなか無いので時間がかかりそうです。
ブラウザーはchromiumをインストールして使っています。
メモリーが少ないせいでタブを大量に発生させたりしてスワップが発生するとほとんど動かなくなってしまうことがありますが、ある程度妥協すればそこそこ使えます。
(ちなみにCPUを700から950Mhzにクロックアップはしてあります)
ただ、一番困った点はネットワークが突然途切れる時があるということです。
現象からしてネットワークチップがフリーズしてしまっているようです。
いろいろなところのブログに原因と思われることが書かれています。
ACアダプタの出力不足
とりあえず、ポリスイッチはハンダでジャンパーしました。
それだけではうまくいかなかったので2番の出力不足を疑いました。
最初はスマホのUSB出力のACアダプタを使用していました。出力は700mA
次に小机のサトー電気でボード型の電源5V2Aを購入して、接続しました。
するとネットワークでおかしくなることが全くなくなり、「やっぱり、原因はACアダプタの出力不足だったんだ」と思いました。(最終的にはこのボード型電源の性能が良かったのでネットワークの異常が出なかったことがわかりました)
しかし最近になって、GPIOを使いたくなったのでブレットボード経由で5V2AのACアダプタを接続したところ再びネットワークのエラーが発生してしまいました。先日の出力不足が原因だと思っていたのが間違っていたのです。
![](https://blogimg.goo.ne.jp/thumbnail/4c/0d/1d8e0ee486a4050ef981c055f58a3bfe_s.jpg)
もしかしたら瞬間的な電圧降下かもしれないと思い、電解コンデンサーをGPIOの5VとGNDの間にはさみ、出力700mAのUSB出力のACアダプタで使用してみたところ、問題なく動いてしまいました。
![](https://blogimg.goo.ne.jp/thumbnail/3c/65/ee9d2d977d0a21dabb02a3f334983c60_s.jpg)
結果、問題の原因はRaspberryPiの電源系のコンデンサの容量不足だったわけです。まぁ、チップコンデンサなので容量が少ないのはしょうがないですが、早めに改良して欲しいものです。