投稿

7月, 2014の投稿を表示しています

リリース:Redmine XLSX format issue exporter 0.1.0

イメージ
Redmineのチケット一覧をXLSX形式で出力するプラグイン、
Redmine XLSX format issue exporterを作りました。Plugins Directoryにも登録しました。

機能Redmineにはチケット一覧の右下からCSVやPDFで出力する機能が標準であります。そのXLSX版です。プラグインをインストールすると、右下の赤丸部分のようにリンクが追加されます。

リンクを押すとCSVエクスポートと同じように、オプションで選択している項目を出力するか、全ての項目を出力するかを選択するダイアログがでます。また、チケットの説明をつけるかも選択できます。

あとはエクスポートボタンを押すダウンロードがはじまります。XLSXの中身は、CSVダウンロードと同等のものにある程度の書式設定(ヘッダの色、ヘッダの固定、折り返し、列の幅)がされています。

Redmine XLS Exportとの違いExcel形式でエクスポートするプラグインとしてRedmine XLS Exportもあります。こちらには、XLS形式でのチケット一覧の出力以外に、履歴や添付ファイルを出力する機能などもあります。Redmine XLSX format issue exporterでは、シンプルにRedmine標準のCSVエクスポートのXLSX版という位置づけにしたいと考えています。

Plugins Directoryに登録したついでにRedmine XLS ExportPlugins Directoryを見たら、すでにオフィシャルには3年以上更新されていません。リポジトリもなくZIPで公開されているのみという状態だったので、自分でZIPからGithubに遷してメンテしているんですよね。もう更新しないのかなあ。。。

RedmineプラグインのCI環境を作る

イメージ
1年ぐらい前にNDSでRedmineプラグインのテスト書いてとLTしましたが、幾ばくかのテストを自分で書きました。
テストを書いたので次はCI環境を作りたいと思います。

Redmineプラグインのテストを書いてくれませんか? #niigatarb from Tatsuya Saito
Travis Integration for Redmine Plugins 調べてみたところ、以下を見つけました。
Travis Integration for Redmine Plugins
Redmineプラグインのテストをするには、当たり前ですがRedmineが必要になります。なので、CIの環境にRedmineをインストールするところから始めないとなのですが、その辺をTravis CI向けにスクリプト化したものです。
これは便利そうということで、これを使っての環境構築を試してみました。

追記:上記のリポジトリでRedmineをダウンロードしてくるソースがedavis10のところになっていました。ここもミラーしているようですが、Redmineのフォーラムでgithubのリポジトリが示されていたので、フォークしてソースに書き換えました
追記の追記:プルリクエストを出して取り込まれました。
手順 手順は以下のとおりです。Travis CIで対象のリポジトリをCI対象にしている状態とします。
Travis Integration for Redmine Pluginsをクローンしてくる。.travis*をプラグインのルートフォルダにコピーする。.travis.ymlで定義されているbranchesを書き換える。クローンしたままだとtestingブランチのみが対象となるため、フックが効かないことがあるかもです。.travis.ymlで定義されているenvを書き換える。REDMINE_VERSIONで指定されたバージョンのRedmineでテストをします。複数指定する場合は、行をコピーしてバージョンを書き換えてください。.travis.ymlで定義されているPLUGINをプラグイン名に書き換える。.travis*をコミットする。コミットがフックされてビルドが開始されます。 結果 できた環境はこちら。テストも成功しました。
.travis.ymlrvmREDMINE_VERSIONのマトリック…

Arduinoで温度センサーを使ってみた

イメージ
Arduinoエントリーキットに付いてきた最後の部品、温度センサーを使ってみました。
温度センサーはLM35DZです。データシートはこちら

配線回路図は以下のとおり単純なのですが、はまりました。

LM35のGNDと+Vsを逆にしていたため、測定した値がおかしくなりArduino自体が動かなくなってしまいました。。。
データシートのピン配置図をみていたのですが、BOTTOM VIEWと書いてあるのを読み取れていませんでした。。。足の出ている方を上にしてみるんですね、BOTTOM VIEWですもんね。この投稿をみてわかりました。
分かってみてからLM35DZ 逆で検索すると、同じようなことがでてきました。

スケッチいろいろなサイトで同じスケッチがでているので割愛。ポイントは以下のとおり。
実際の室温と同じぐらいになっていました。
アナログ入力は5Vを1024段階にする。LM35DZのVoutからは、10mV/℃で出力される。
精度を上げる検索していたらこんなのを見つけました。
LM35HigherResolution

analogReference()は、アナログ入力の基準電圧を変える関数。デフォルトは5V。INTERNALを指定すると1.1Vになります。
基準電圧が5Vの場合は、
5V / 1024 = 0.00488から、1単位あたり約4.9mVとなります。
これが基準電圧を1.1Vにすると、
1.1V / 1024 = 0.00107なので、1単位あたり約1.1mVとなります。
上でも書いたようにLM35DZは10mV/℃で出力するので、5Vの場合は1単位あたり0.49℃、1.1Vの場合は1単位あたり0.11℃となり、より細かい温度を測定できます。
ただし、LM35DZは+2℃〜+150℃まで測れるとデータシートにありますが、1.1Vの場合のMaxは112.53℃に制限されます。

実際に試してみると、5Vの場合は27.83℃と28.32℃(差は0.49)をいったりきたりしたのに対して、1.1Vの場合には29.54℃と29.43℃(差は0.11)をいったりきたりしていました。それぞれはよさそうですが、比べると1℃近くも値が違います。なんでだろう?



これでArduinoエントリーキットに付いてきたひと通りの部品を試しました。
ここまでArduinoを触った感じでは、簡単な回路もの…

半固定抵抗を使ってみる(回路図も書いてみた)

イメージ
Arduinoエントリーキットについてきた部品で、まだ使っていないものが以下の2つ。
半固定抵抗 10kΩ温度センサー
ついてきたものは使ってみよう!ということで、まずは半固定抵抗から。
半固定抵抗の調節に合わせて音の調子が変わるというものを作ってみます。作ったものはこんな感じ。


半固定抵抗 これです。

三本ある足の真ん中にかかる抵抗が上のつまみに連動しています。

回路図 配線はこんな感じ。
写真だけだとわからない、、、と今更ですが回路図を書いてみようと思い立ちました。

調べてみると、Fritzingというツールが使いやすそうなのでこれを使いました。
以下のようにブレッドボードのイメージが出てきて、そこにパーツを置いて描けます。Arduino自体ももパーツとしてあるのが便利。
これを元に整形して回路図を描けます。
上と同じですがエクスポートした回路図がこれ。簡単に描けて便利ですね。

スケッチ スケッチはここでコミットしています。
TDDでかいてみました。#ifdefで実機に出力/入力する関数をラップしてテストするようにしました。toneW()やanalogReadW()などです。うまくラッパーをまとめていけば、TDDもしやすくなると感じました。というか、まとめないとコードが汚くなりそう。。。


次は温度センサーです。


ArduinoUnitでTDDを試してみる

イメージ
Arduino開発でのTDDについて少し調べてみましたが、C/C++でやるというのが多いようです。Arduino IDEは、スケッチをC++に変換してビルド、実機へ転送する仕組みになっているので、そこを使うようです。TDDのサイクルを早くするためには、実機への転送時間とかを考えるとC++でやるのがいいのかもしれません。
とはいえ、スケッチでできるユニットテストのフレームワーク「ArduinoUnit」もありました。手軽にやるにはこちらのほうがよさそうなので、これを試してみることにします。

ArduinoUnitArduinoUnitは、Arduino向けのユニットテストのフレームワークです。
以下の環境で試してみます。
Arduino UNO Rev.3Mac OS X 10.9.4Arduino IDE 1.0.5
準備Githubからクローンしてきてます。ZIPファイルでダウンロードしてもかまいません。
srcフォルダをArduinoUnitとリネーム、もしくは別フォルダにコピーします。ここでつけた名前が、Arduino IDEで表示されるライブラリ名になります。
Arduino IDEで、スケッチ -> ライブラリを使用 -> Add Library...をクリックして、ダイアログで先のフォルダを選択します。
すると、ライブラリとしてArduinoUnitが追加されます。
また、Arduino Libraries Directoryに選択したフォルダがコピーされます。GithubのREADMEでは、まずArduino Libraries Directoryにフォルダを作るとありますが、選択すればコピーされるので不要でした。
ちなみに、私の環境では、~/Documents/Arduino/librariesにコピーされました。

サンプルを動かすREADMEのGetting Startedにあるサンプルを動かしてみます。
新規のスケッチにコピペしてArduinoに転送、シリアルモニタを開くと以下のように出力されました。
結果が2回出力されてます。頭の方はなんか変ですし。。。転送とシリアルモニタを開くタイミングとかかなと思い、loop()のテスト実行前にdelayを入れたらきれいに出ました。
あとで気づいたんですが、シリアルモニタを開くたびにテストが実行されるようです。d…

「Arduinoをはじめよう」ではじめよう(4)

イメージ
第6章をやってみました。ここまでやってきたことを組み合わせて、3色のLEDを混ぜたランプをつくるものです。
PCでProcessingを使ってWebから情報を取ってきて、それを元にシリアルでArduinoに色を伝えるという仕組みです。
ランプになってませんが、こんな感じになりました。

これでひと通り読み終わりました。
巻末に付いているリファレンスをざっと読んでいて、tone関数attachInterrupt関数が気になりました。エントリーキットに圧電スピーカーも付いていたので、音を出してみることにしました。ソースはこちら

tone関数は、指定した周波数の矩形波を出す関数です。1行書くだけで、音が出ました!
tone(SPEAKER, scale[i]);
attachInterrupt関数は、割り込みの関数です。タクトスイッチで音を止めたり出したりするのを割り込みでやってみました。
attachInterrupt(SWITCH, stop, RISING); と、SWITCHで指定したピンがLOW -> HIGHの場合にstop関数を呼び出すようにしました。4章ででていたバウンシングなのか、連続して割り込みが出るケースが結構ありました。delayを挟んだりしてみたのですが、うまく改善できず。。。。こういうのはループの中でやるべきなのかな?

実際に動かしてみて音が出たところです。

「Arduinoをはじめよう」ではじめよう(3)

イメージ
5章の残りです。

プッシュボタンの代わりに光センサを使うタクトスイッチの代わりに、光センサ(CdSセル)を使ってみました。センサを覆うとLEDが消えました。

アナログ入力を使って光量によってLEDの明るさを変えるのもできました。ANALOG INにつないでいます。

シリアル通信ここでシリアル通信を行って、ArduinoからPCにアナログ入力の数値を表示するコードがでてきます。
Serialオブジェクトが用意されていて、printlnメソッドで簡単に出力できました。ここまでデバッグの方法は出てきていませんが、IDEで特別な機能もないようなので、これを使ってデバッグする感じでしょうか。
IDEのシリアルモニタから、以下のように出力されている結果を確認できます。

モータや電球などの駆動私の買ったエントリーキットには、この項で説明されている部品は含まれていませんでした。訳注にある部品とかは検索すると通販で買えるようです。というわけで、実際にやってみていません。
Arduinoのピンからは20mAまでしか出せないので、モーターなど大きな電流が必要なものは動かせないとのこと。本ではVin端子から電源をとってMOSFETというトランジスタでON/OFFを制御するとあります。わからない・・・・全然わからない・・・・ということで検索したら、以下でわかりやすい回答がありました。
Vinについて

また、検索していてトランジスタで電流を増幅して動かすというサイトがありました。う〜ん、難しい。。。。
Arduino でモータを動かす [Arduino]

「Arduinoをはじめよう」ではじめよう(2)

イメージ
5章の「PWMで明かりをコントロール」です。

自前(?)でPWMdelay関数を使って明るさを変える話でパルス幅変調の説明があります。実際にサンプルでやってみたのですが、50%とか25%とか書いてあるけど、いまいち明るさが変わっているのがわかりづらい。。。5%とかだとわかりました。
2つ並べればわかるかな?と思い、並べてみました。スケッチはこちら

結局あんまりわからず、5%の写真になりますw

PWM本に従って、ArduinoのPWMが使えるピンでもやりました。私の買ったエントリーキットには本に書いてあった270Ωの抵抗がなかったので330Ωのにしました。

この抵抗はなんのためにあるのか分からなかったので、とりあえず外してみたところ、すごく光りましたw
以下のサイトで「LEDは、電流を何らかの方法で制限してやらないと、壊れてしまうというものなのです。」と書いてありましたorz 煙は出ませんでしたが。
LEDの基本 その3 制限抵抗

ただ、ここまでLEDを使う場合には直列で抵抗を挟むことはありませんでした。明るさを調整したのが分かりやすいように、LEDに流れる電圧を下げているのかなとサイトのグラフを見て思いました。あってるかな?

組み合わせボタンとPWMの組み合わせてみるところがあります。
答えを見ずに組み合わせたものを作ってみました。単純にスイッチを押している間、明るさが変化するものです。スケッチはこちら


5章はもう少しあります。

「Arduinoをはじめよう」ではじめよう(1)

イメージ
「Arduinoをはじめよう」を読みながら、経過を記録していきたいと思います。
本に書いてあるソースを載せるのはちょっと・・・なので、読んだ内容を参考にして自前でもここで書いていきたいと思います。

前回、LEDをつけることができました。次は「プッシュボタンを使ってLEDをコントロール」です。

タクトスイッチ以下のようにしたところ、スイッチにかかわらずLEDが点きっぱなしになりました。。。

何が悪いんだろうといろいろ試した結果、タクトスイッチの向きが問題でした。上は横向きでしたが正しくは縦に付けないとダメでした。
以下のサイトでタクトスイッチについて詳しく書かれていました。縦方向につながっているんですね。なので横につけると、常につながっている状態になっていたということでした。
スイッチの入/切でLEDを点灯させます

というわけで、こんな感じでつなげてスイッチを押すとLEDが点くようになりました。

プルアップ抵抗上の回路でわからなかったのが、なんで抵抗をつけるのか?です。いろいろ調べてみたところ、おそらくスイッチがオフの時の電圧を安定させるためのプルアップ抵抗というものだと思います。以下のサイトがわかりやすかったです。
第4回 プルアップ・プルダウン抵抗

こういったことは、「Arduinoをはじめよう」では(今のところ)触れられていないため、図を見ながらそういうもんだと組んでみる感じです。
出来る限り調べてみたいですが、取っ掛かりが難しい。。。

ボタンでLED上の回路でのソースはこんな感じ。
本とは違って、LED操作の部分を別ファイルにしてみました。同じフォルダにあるファイル(IDE上ではタブ)の定義もIDEで自動的に読まれます。

さらにボタンを押すと、
赤 → 緑 → 両方 → 消灯
という順番で点いたり消えたりするように回路とスケッチを作ってみました。

ここまでで、4章はおしまい。


Arduinoを買いました

イメージ
Arduino UNOを買いました。右も左も分からない状態なので、合わせて入門書も購入。




中身はこんな感じ。

本を読みながらMacにUSBで接続。「新しいネットワークインタフェイスが検出されました」とでるとありましたが、OS X 10.9.3では何も出ず。
そのまま、4章の「LEDを点滅させる」に従って、10L程度のコードを書いて転送すると点滅しました!まずは第一歩!
参考にしながら点滅のタイミングを変えるようなソースを書いたのでこちらに登録しました。

2章の「Arduinoの流儀」では、「We Love Junk!」という項がありました。
ジャンクを買ってきてArduinoと組み合わせて何か作れたら面白いですね。