コメを噛め

コメを噛め

rerofumi の電子工作メモ

Archive for the ‘programming’ Category


hatena bookmark

先日「なにか面白いアイテムはないかなー」と yodobashi.com を覗いていたところ、共立電子の「Wi-Fi式電波時計用リピータ / P18-NTPWR」というものを見つけたので購入した。
(というか共立電子のアイテムって yodobashi.com や Amazon で買えるのか)

Wi-Fi 経由で NTP を使って現在時刻を取得し、それを JJY 信号として送信することで近距離(この場合の対称は部屋内)の電波時計の時刻を合わせるというガジェット。建物の中だと電波が届かなくてせっかくの電波時計でも時間がずれてしまったりするんだけれども、これがあればバッチリ合わせることができる。
丁度自室も入りが悪くて時刻合わせにほとんど失敗する(たまーに成功することがある)感じで困っていたので実用として購入。


買う前にわかってはいたけれども、中身は PIC マイコン 1つと無線制御に ESP-WROOM-02 1つというシンプルな構成。
といってもソフトが良くできているし実運用できる点でお値段相当の価値はあると思った。

しかし、これくらいシンプルな構造なら自分でも作ってみたいなと思ったのが今回のお話。
Read the rest of this entry »


hatena bookmark

RaspberryPi での気象センサー計測と「なんログ」でのロギングでお部屋の中の情報が順調に記録されていく。
後はそのログを解析してなんかに利用すれば良いだけだ。

取りあえずデータが見たいということで、ログの結果をグラフ表示する WEB ページを作ることにした。

myweather.service.consul_2015-12-19_18-06-54
myweather.service.consul_2015-12-19_18-07-01

グラフの表示には Flotr2 という javascript ライブラリを使用している。
サーバー自体は部屋内に設置しているため、外部には公開していない :-)

sinatra で erb view とか使っているけれども、一般的な WEB アプリな作りになるので特に語ることも無いかも。

このへん、グラフ表示をしたい、そこを強くしたいというのであれば WEB サーバーのログ解析で使われるメトリクスツールをそのまま使うというのも手な気がしてきた。
そういう意味ではログを記録する部分も fluentd などのサーバーアプリを使えばキューイングとかストア先とかそのまま利用できるだろう。


hatena bookmark

Raspberry Pi 2 で気圧や温度が取れる様になったところで次はそれをデータとして蓄積して行きたいわけです。
単純にテキストファイルに追記していくだけでも良いのですが、ここのところ継続して計測したいという要求が多いので簡単なロガーサーバーを作ることにしました。名付けて「なんログ」です。

要求としては、

  • ネットワーク上にあるサーバーに設置、幾つかの機器からのログをポストするだけで記録してくれる
  • IoT的な機器から使える様にシンプルな HTTP API を備える
  • どこからのログか分かるように分別タグを付けられる
  • 複数機器からのアクセスでも大丈夫
  • 最初は簡単にテキストファイルに記録することろから

といったあたりで。
2015-12-19_054015

システムとしては上図のようになる。
Read the rest of this entry »


hatena bookmark

低気圧の到来時など気圧の変化で健康状態に影響を与えるとは良く言われる。
台風や爆弾低気圧の通過後はそうかもなー、とか思うのものの普段の生活で気圧というのは気温ほど気にしてはいなかったりする。そもそもで温度計は家電として入手しやすいものの気圧計はあまり身近では無い様に思う。
そういった体調と気圧変化を結びつけるには今現在の値が知れれば良いわけでもなく継続した変化、ロギングが重要ではないかとも思うのである。

そこで、マイコン(RaspberryPi2)で気圧や気温といった気象情報を計測し、サーバーにロギングする「デジタル百葉箱システム」を作ってみようかというのが今回のお話である。

ちなみに計測するのは自分の部屋である。
単に自分にとっての生活指針が欲しいだけなので外気の状況でなくて良い。

掲載予定としては

  1. センサーでの計測部分
  2. サーバーでのログ収集
  3. ログデータの表示

の 3回になる見込み。

■ センサー

部品箱をほじくり返して以前買ってあったセンサーを掘り出す。
この計測自体は昔からやりたかったので、以前からぽちぽちセンサーだけは買ってあったのである。今になってやろうと思ったのは、自宅内サーバー環境が整ってきたところで、世間で流行の IoT 的フローを構築したくなったからに他ならない。

DSC00883
部品箱にあったセンサーは上の2つ。
青いパッケージで包まれているのが DHT11、温度と湿度を計測するモジュール。8pin DIP 変換基板に載っているのが LPS25H、大気圧を計測するモジュール。どちらも秋月電子通商で買った物。
ちなみに LPS25H は大気圧計測に必要なので温度センサーも載っていてその値を取ることもできる。2つのモジュールのどっちが正しい温度か分からないから両方取得することにする。

DSC00880
RaspberryPi2で値を読み取るテスト。
LPS25H は I2C での通信なので RaspberryPi2 でやりやすいのだけれども、DHT11 はワンワイヤーシリアルである。同様の型で I2C の温度湿度センサーもあるのになんでこれを買っちゃったかな、自分。

DHT11 を Raspberry PI で読むにはと調べたら下記の良い記事がヒットした
「温湿度センサDHT11をRaspberry Piに繋いでシリアル入力を学ぶ」
ソースコードを見ると delayMicroseconds() を使っていて、あーラズパイでこれできるんだとか思いつつ、これで良いかと上記ページにあるコードをそのまま利用させてもらうことにした。
ただ利用しやすい様にコンソール出力のフォーマットだけ手直しした次第。

LPS25H の方は I2C なので WiringPI の I2C メソッドを利用してシリアル通信を行う。
今回は基本的に ruby でコードを書く予定なので、WiringPI の ruby GEM を利用。

 # gem install wiringpi

でもって予め gem をインストールしておく。

I2C 経由で読み取る ruby コードは以下の通り。

require 'wiringpi'

class Lpc25h
  def initialize
    @io = WiringPi::I2C.new(0x5c)
  end

  def writeCommand(address, data)
    @io.write_reg_8(address, data)
  end

  def readCommand(address)
    @io.read_reg_8(address)
  end

  def init
    live = readCommand(0x0f)
    if (live != 0xbd) then
      return false
    end
    writeCommand(0x20, 0x90)
    sleep(1.5)
  end

  def pressure
    a = readCommand(0x2a)
    b = readCommand(0x29)
    c = readCommand(0x28)
    d = (a * 0x10000) + (b* 0x100) + c
    d = d / 4096.0
    return d
  end

  def temp
    a = readCommand(0x2c)
    b = readCommand(0x2b)
    c = (a * 0x100) + b
    if c > 0x7fff then
      c = c - 65536
    end
    d = 42.5 + (c / 480.0)
    return d
  end
end

sense = Lpc25h.new
sense.init
press = sense.pressure
printf("%f hPa\n", press)
temp = sense.temp
printf("%f *C\n", temp)

temp_sensor
特に書くほどの事もないけど今回の回路。

DSC00881
行けそうなので基板にまとめた。

これで温度、湿度、気圧のセンサーから現在の部屋の状況を読み取る事ができた。
今回 RaspberryPi2 と ruby を選択したのは、センサーを読み取りつつ、その後ネットワークでよしなにするためなのでお手軽になるのはここから先のお話である。

追記:
あーそういえば RaspberryPi2 で I2C を使うために最初なんかインストールしたり設定したりする必要があった覚えがある。
ちょい前の話であまり覚えていないので省略。


hatena bookmark

超小ネタ。

野暮用でジャイロセンサーでの角速度計測を超お手軽にさくっとやりたい要求があった場合どうするか。 やっぱり Wiiリモコンを PC の Bluetooth で読むのが一番お安くて簡単だよなあというのが落ち着くところだと思う。
秋月電子通商やストロベリーリナックスでもジャイロセンサーやブレークボードが安価で買えるようになってきたけれども、最終的にPC上でデータを利用したい場合はWiiリモコンのほうがずっと楽だ。使えればのお話だけれども。

Wiiのジャイロセンサーは後発で「Wii Motion Plus」というアダプタで発売された。
これの解析記事や、PCから利用するサンプルコードなどは既にある。(参照: kako さんのところWiiBrew)
kako さんのところには wii-motionplus-reader-v02.zip というジャイロを読むサンプルコードと HID を Open する DLL ライブラリがあるのでこれを利用させてもらうのが有効。

現在のところ Wii Motion Plus は生産終了品となっており、リモコンとジャイロユニットが一緒になった「Wiiリモコンプラス」という型になっており一層お安くなっている。
んが、wii-motionplus-reader-v02.zip では Wiiリモコンプラスのジャイロが読めなかった。この事については kako さんのところでも触れられている。

Wiiリモコンプラスのジャイロを読みだしている人もいるようなのだが、今ひとつ情報が足りなくて正解にたどり着くのに苦労したので書き留めておこうというのがこの記事の目的。
Read the rest of this entry »


hatena bookmark

Gynostemma Ver.1.50.0 (20110910)をリリースした。

お待たせしましたというか、ようやくというか、特殊なパターンで内側にゴミが残るバグを修正することができた版となる。

通常私が使っている分には出会わない現象だったので確認が遅れたのだけれども、

時たま上の画のようにパターン内側にひげゴミが残る事があった。
出る状況も限られていたのでなかなかわかりにくかったのだが、乱数で任意のパターン線を数本引いて問題ないかを評価するユニットテストで回数ぶんまわすことでようやく不具合が生じる単純パターンを見つけ出すことができた。

わかってしまえばどうと言うことも無い簡単なバグであった。

その不具合を修正することでようやくゴミ残りバグを根絶することができた。

まあ、それが無くなったからといって完璧では無いことは作った本人が理解しているのだけれども、ひとつよろしくお願いいたします。


hatena bookmark

これまで作成してきたプリント基板作成用のガーバーデータを G-Code に変換するスクリプトに GUI を追加してアプリケーションとしてまとめ上げました。
GUI 製作にも IronRuby を使っており、全て ruby で書かれています。

実行には IronRuby 1.0 が必要です、インストールして準備しておいてください。
IronRuby は Mono でも動作しますので、Mono を使って MacOSX 等といった Windows 以外の環境で動作させる事ができます。

Download: gynostemma-20150228b.zip (1.30MB) 最新版
Download: gynostemma-20150128a.zip (1.30MB) 1つ前
Download: gynostemma-20140615.zip (1.34MB) ワンカッターオペレーション対応版:
Download: gynostemma-20120802.zip (1.34MB) マルチスレッド、ポリゴン対応版
Download: gynostemma-20110910b.zip(1.33MB) シングルスレッド、旧安定版

以前から書いている様に、個人で CNCフライスを使ってプリント基板作成をしたい場合は Eagle とユーザースクリプトを使って G-Code を出力させるのがおすすめです。
それ以外の CAD を使って行いたいというニーズがどれくらいあるのかはわかりませんが、これがなんらかのお役にたてたらと思います。

– 更新履歴
Feb.28.2015 – ドリルデータで全て読み込まれないパターンがあるものを修正
Jan.28.2015 – 線が密集しているところでアウトライン抽出が欠けやすい不具合を改善
Jan.17.2015 – 左右反転機能の追加、アパーチャマクロ型のパッドに対応
Jul.15.2014 – 1本のエンドミルで穴開け、パターン彫り、くり抜きを連続する Export を追加
Aug.02.2012 – 20120721 で入れてしまった2パス目以降が膨らんでいかないバグを修正
Jul.21.2012 – ガーバーのポリゴンフィル(G36/G37)に暫定対応
Jul.09.2012 – パスビルド時の演算をマルチスレッド化
Sep.10.2011 – データによってはパターンの内側に掘削パスがゴミとして残ってしまう場面がまれにあったバグを修正、内側に残る系は無くなったと思う
Aug.07.2011 – 計算ミスで必要な掘削パスが消えてとぎれてしまったり、いらないパスが残ったりしていたのを改善(※まだ起こり得ます)
Aug.04.2011 – パターン処理するデータによっては無限再起ループに陥りクラッシュ終了することがあったので、その不具合を修正
Jul.31.2011 – インチ対応が不十分でアパーチャグリルサイズに適用できていあんかった不具合を修正。横長のアパーチャグリル(パッドなど)に対応
Jul.27.2011 – MBE対応、読み込み時インチデータの判別改善、ドリルデータ読み込みオプションとドゥエル指定の追加
May.14.2011 – ドリルの掘り下げ深さを別個に指定できるようにした
May.06.2011 – 公開開始


hatena bookmark


CNCフライスでプリント基板作成をするために、G-Code変換ツールを作っていたのは以前に書いた通り。(準備その1その2動画)
その後 10枚くらいの基板を設計、作成してちょこちょことスクリプトを変更していた。

ruby で書いたスクリプトではあるもののいずれアプリケーションとして整えて公開しようと思いつつずるずると今に至る。
別に意図して公開していなかったわけではないのだけれども、いまひとつ変なところがあるとか、素のスクリプト状態では使いにくいとかそんなあたりで。
そんなスクリプトだが公開して欲しいという声をありがたいことに頂戴したので、軽く整えて以下に置いておくことにする。

Download: r_gerber_converter.zip (19kb)

通常の ruby ではなくて .NET framework の IronRuby が必要。
また、計算結果のパターン表示に OpenTK を使っているのでそれも準備する必要がある。
ちょっぴり変な実行環境だけれども、その分 MacOSX などでも動作するものになっている(確認済み)ので興味があったら試してみて欲しい。

ファイルの指定などを GUI で行うことのできるアプリケーション版も準備中。
本気出したら割とそれなりにできてきたので近日中に公開できるかも。こちらも IronRuby+OpenTK で作られている珍しいプロジェクトなので環境はあらかじめ用意しておいてくださいな。

# ちなみに計算にはえらい時間がかかるので覚悟してください


hatena bookmark

toolchain 製作の rake スクリプトに gdb を加えた。
OpenOCD と JTAG ケーブルなどを使ってダウンロードやデバッグをリモートで行う用。

Download: fumi2_cortexM3_toolchain-0.0.2.tar.gz

メモ、GDBサーバーとの繋げ方例(ポートが3333のとき)

$ arm-none-eabi-gdb example.elf
(gdb) target remote localhost:3333
(gdb) monitor reset halt
(gdb) load
(gdb) continue


hatena bookmark

IOが沢山あってそれなりにパワフルでお安いマイコンが使いたくなり、STM32 に手を出してみることにした。てなわけでまずは Strawberry LinuxSTBeemini を入手。

さて、ボードも買ったことだし開発環境を作るかと LEDチカチカもさせずにいきなり GCC toolchain をビルドし始めたというのが今回のお話。
toolchain バイナリは DevKitPro がスタンダードかと思っていたら、今時だと CodeSourcery G++ なのだそうで。知らなかった。(追記: YAGARTO ってのもあるらしい)
しかし、CodeSourcery G++ は GNU GCC toolchain だといっても一応商用のライト版だしなー、とか。他の環境はなんやか制限があるしなー、とか。Cygwin ネイテブはないしなー、とか。色々思うところあって、久しぶりに自分でビルドすることにした次第。

以前 SDL の時にやったように、ぽちぽち手作業でビルドしてその時の手順や configure 引数を rake 形式でメモしていくもの。
rake(make の ruby 実装) 一発でソースをダウンロードしてきて自動的にビルドできるのだけれども、どっちかというとドキュメントを rake というフォーマットで書きましたという意味合いの方が大きいのでできればスクリプトを読んでいただけるとありがたく。

Download: fumi2_cortexM3_toolchain-0.0.1.tar (4KB)

上記スクリプトでインストールされるのは

  • binutils-2.21
  • newlib-1.19.0
  • gcc-4.5.2

といった一応現時点で最新のもの。
言語は C と C++ の二つ。
まあ、STM32 で C++ が使い物になるかどうかは知らないけど。

ターゲットは Cygwin, MacOSX(10.6), Linux でそれぞれでビルドできることを確認している。
ただし、Wow64(Windows 64bit)上の Cygwin では、この規模のビルドは fork エラーが出たりして完了できないと思う。実のところ、4日前後この問題と取っ組み合いしていたのだけれどもお手上げした。Cygwin で使いたいひとは Win32 環境でビルドしてバイナリだけ持ってくるのがオススメ。
MacOSX や Linux は何の問題も無し。

参考程度に Cygwin 版のバイナリを置いておく
Download: cortexM3_gcc_toolchain.tgz (76.5MB)

この toolchain で、Strawberry Linux の STBee ページに置いてある LEDチカチカサンプルをビルドし無事実行できることを確認している。