2014年7月15日火曜日

「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で明かりをコントロール」です。

自前(?)でPWM

delay関数を使って明るさを変える話でパルス幅変調の説明があります。実際にサンプルでやってみたのですが、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章はおしまい。


2014年7月14日月曜日

Arduinoを買いました

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

 


中身はこんな感じ。

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

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

2013年12月3日火曜日

[Spring Advent Calendar 2013 3日目] Thymesheetを使ってみる #spadc13

Spring Advent Calendar 2013 3日目です。
http://www.adventar.org/calendars/153

Thymesheetとは


Thymeleafのテンプレートからth属性を取り除いてCSSみたいに外だししようというものです。
https://github.com/connect-group/thymesheet


Thymeleafのおさらい


ThymesheetのREADMEに書いてあるので、おさらいがてら適当訳してみました。

Thymeleafは、Javaのライブラリーです。XHTML/HTML5を提供するWebはもちろんWebでない環境でもっともいい感じの、XML / XHTML / HTML5(他のフォーマットも拡張可能)のテンプレートエンジンです。
Spring MVCに組み込むためのモジュールが提供されており、Spring MVCのJSPテンプレートエンジンに対する、HTML5での完全な代替として使うことが出来ます。
Thymeleafのゴールは、エレガントでちゃんとした形式でのパワフルで自然なテンプレート、つまり静的なプロトタイプとして動作しブラウザで正しく表示できるテンプレートを作る方法を提供することです。

詳しくはこちらをご覧下さい。


Thymesheetの使い方


とっかかりレベルではREADMEみればOKって感じですが、一応サンプル作ってみました。
去年のAdvent Calendarで書いたものから修正しています。
https://bitbucket.org/twopack/spring-thymeleaf/branch/thymesheet
というわけで、さくさくと説明です。

Mavenの設定


pom.xmlに以下を追加します。
Thymesheetは、Thymeleafは2.1.0以降をサポートですのでdependencyのバージョンもチェック。
<dependency>
        <groupId>com.connect-group</groupId>
        <artifactId>thymesheet-spring3</artifactId>
        <version>2.1.0</version>
</dependency>

Spring Configration

コンテキストファイルでテンプレートエンジンの指定をThymesheetのものにします。
<beans:bean id="templateEngine" class="com.connect_group.thymesheet.spring3.SpringThymesheetTemplateEngine">
    <beans:property name="templateResolver" ref="templateResolver" />
</beans:bean>

テンプレート


今回のサンプルだとThymesheetを使う前はこんなです。
<P th:text="${serverTimeMessage}">  The time on the server is 2012/12/05 10:01:10 JST. </P>

これが、Thymesheetを使うとこんなになります。th属性はなくなりました。
<P>  The time on the server is 2012/12/05 10:01:10 JST. </P>

ただし、CSSのようにTSSファイル(Thymesheet Style Sheetかな?)をリンクします。
th属性で指定していた埋め込みの情報は、home.tssに追い出しています。
<link rel="thymesheet" href="resources/ts/home.tss"/>

TSSファイル


で、TSSファイルは以下です。とっかかり過ぎですねw
pタグは以下のth属性入れてね、ということです。
p { 
    th-text: "${serverTimeMessage}"
}

th:textがth-textになったぐらいです。わかりやすいですね。
CSSのようなイメージで以下のような表現が出来ます。READMEより拝借。
table > tbody > tr {
    th-each:"prod : ${allProducts}";
}


まとめ


Thymeleafのコンセプトを更に進めた感じのものだなと思います。
さらにHTMLとの分離が進んで、デザイナーさんとの分解点がはっきりすると思います。
ただ、実用するにはとっかかりだけじゃ不十分ですね、完全に。。。。
Standard Dialectとの対応など、いろいろ確認してみないとダメかな、という感じです。また来年w


明日はToshiaki Makiさんです!

2013年12月2日月曜日

テスト設計コンテスト’14 東京予選を見学してきた

11/30にテスト設計コンテスト’14 東京予選を見学してきました。
テスト設計コンテストは、NPO法人ASTERが行っているコンテストです。
翌日にシステムテスト自動化カンファレンス2013へ出るため東京へ前日入りの予定だったため、少し早めに行けば見れる!と早起きしました。(ついでではないw)

今年からテストベースがポットから自動販売機になりました。ポット時代もテスト設計コンテスト自体を生でみたことはなかったので、どんな感じなのかなと楽しみにしていきました。
とりあえず、会場についてAグループ、Bグループがあり、好きな方を見学できる、ということでBグループをみました。チーム名だけの情報だったので、理由は特にないですw

まだコンテスト中なので、ああだったこうだったは書けませんということになりますw(じゃあ、後で書くのかというと(ry)
Bグループは6チームでしたが、違いもあれば共通点もあり、アプローチもいろいろでした。
また、プレゼン資料だけでなく実際の成果物を見るのは初めてで、これも各チームいろいろで面白かったです。
Aグループは掲示と資料を眺めたぐらいでしたが、プレゼンも聞きたかったなあ、と思いました。

いろいろと見たり聞いたりしても、すぐに忘れる鳥頭で辛いですが、頭と心があったかい内に刷り込んでおかないとな、ということが多い半日でした。

あと地区予選の見学は、あと関西が残っていますね。お近くの方はぜひ!(まだ空いてるのかしら
http://aster.or.jp/business/contest/visitor.html

2013年10月1日火曜日

第33回勉強会(2013/09/28) Scala入学式 に参加してきました。 #nds33

9/28に新潟県長岡市でScala入学式に参加しました。 長岡IT開発者勉強会(NDS)の一環として開催されたハンズオン形式の勉強会です。 @neko_gata_sさんが講師をしてくれました。
資料はこちらで公開されています。
https://gist.github.com/Shinpeim/6740436


入学式

名前は聞いた事ありましたが触るのははじめてなScala。猫型さんがどんどんコードを書いてくれるのを追っかけていくのも精一杯!って感じでした。反面、追って書いているコードはとても分かりやすく簡潔だと思いました。Scalaもすごいですが、猫型先生の準備もすごいものがあるなあ、と。

型で作っていくというスタンス。型推論含め、コンパイラーによって型の問題を解消して値の問題に注目できるのは重要なメリットだと感じました。@trailrecOptionforが糖衣構文というのも非常に面白かったです。

モナドのあたりからは、もっと勉強せねば・・・・という感じでした。コンテナの中身を気にせず扱えるという説明は、今までもなんどか呼んだはずのモナドについての説明よりも大分すっと入ってくるものがありました。それを踏まえて、もう一度学ばねば。。。


LT&懇親会


相変わらず楽しいLT&懇親会でした!入学式でぐったり、、、だったのですが、大笑いでしたwwww
それに比べて自分のLTときたら、準備不足というかなんというか(ry
今後はGo/NoGoの判断をちゃんとしたいと思います。

懇親会でもいろいろな話がでますが、なかなか中身についていけないです;;話を聞いているだけでも、技術的にも話としても面白いんですが。
学生さんも多いので、テストの話だったりもいろいろしてみたいなあ、と思うのですが、引っ込み思案な私。。。
もっと興味をもってもらえるようなアウトプットをしないとなあ、と思いました。


というわけで


今回も非常に楽しい勉強会でした。

RedmineプラグインをGitHub Actionsでテストする

Redmine Advent Calendar 2019 の Qiita で書きました。追っかけで もう一つ 。 Travis-CIで行っていたRedmineプラグインのCIを、GitHub Actionsに変更したものです。 GitHub Actionsをやってみようという...