ArduinoにLCDを接続

,
ArduinoにLCDを接続してみました.

まず,関連部品を購入します.
今回購入したのは,秋月電子から
LCDキャラクタディスプレイモジュール 20×4行バックライト付き
14Pフラットケーブル
小型ボリューム 5KΩB
です.
小型ボリュームは,LCDのコントラストを調整するためです.(作ってみてわかったのですが,コントラストを調整しないとちゃんと表示されません)

LCDはこんな感じ
 

まず,ハンダづけを行います.




久しぶりにハンダづけを行いました・・・ちょっと汚くなってしまった・・・.でもまぁ,OK
 ボリュームにも必要に応じてハンダづけを行います.
全体はこんな感じ




今回はボタンを押した回数をカウントするプログラムを作成してみました.


プログラムはこのようになります.

#include <LiquidCrystal.h>
#define BUTTON 9
#define LCD_ROWS 4
#define LCD_COLS 20

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int count = 0;
int before_button = LOW;

void disp_count(){
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Count :");
  lcd.print(count);
}

void setup(){
  pinMode(BUTTON, INPUT);
  lcd.begin(LCD_COLS, LCD_ROWS);
  lcd.clear();
  disp_count();
}

void loop(){
  int button_input = digitalRead(BUTTON);
  delay(10);
  
  if( before_button == LOW && button_input == HIGH){
    count++;
    disp_count();
  }
  before_button = button_input;
}

Arduinoで2進数カウンタ

,
Arduinoを購入しました.
Arduinoは,基板(マイコンボード)と開発環境で構成されたフィジカルコンピューティングシステムです.

特徴としてオープンソースハードウェアであることが挙げられます.

Arduinoには用途に応じて様々な種類のボードが用意されていますが,今回購入したのは,一通りの基本機能を搭載したArduino Duemilanoveです.
Amazonにて「Arduinoをはじめようキット」を4200円で買いました.
付属品はこんな感じ
 
※Arduinoは,USB経由で給電とプログラムの書き込みを行うのですが,この「Arduinoをはじめようキット」にはUSBケーブルがついてません!!(はじめようキットなのに・・・)
そのため,自分でB端子のUSBを用意する必要があります.

Arduino本体はこんな感じ
・USB端子
・電源プラグ
・デジタル入出力ポート×14
・3.3V電源
・5V電源
・アナログ入力ポート×6
・アナログ出力ポート×6
・リセットスイッチ(プログラムを初めから実行する)
・モニター用端子
 


開発環境のダウンロードは下記サイトから行えます.お使いのOSに合ったファイルをダウンロードしてください.
http://arduino.cc/en/Main/Software

Windowsの場合,arduino-00**.zipをダウンロードするかと思います.
展開してから,arduino.exeをダブルクリックしてください.これだけで実装環境の構築が終わりました.
※arduino.exeはJavaVM上で動作します.そのため,事前にJavaをインストールする必要があります.

プログラムの実行手順は下記の通りです.
1. プログラムを記述
2. エラーがないか確認(一番左のVerifyボタン)
3. アップロード(右から2番目のUploadボタン)
うまくアップロードできると,Arduinoが点滅します.
もし,アップロード時にエラーがでるようでしたら,デバイスマネージャにて,正しくデバドラがインストールされているか,また,接続されているCOMポートの番号と実装環境のTools->Serial Portで選択されているCOMポートの番号が一致しているかを確かめてください.

試しに,付属の光素子とスイッチを使用して光に反応する2進数カウンタを作ってみました.
ちょっとわかりにくいですが・・・



ソースはこちら
C-likeですね.define部分は接続した入出力ポートに合わせてください.
setup関数は一番初めに一度だけ実行される関数.loop関数はプログラムの本体となり,ここに記述されている内容が繰り返し実行されます.

#define LED3 8
#define LED2 7
#define LED1 6
#define BUTTON 9
#define INTERVAL 10
#define CDS 10

int count = 0;
int before_cds = LOW;

void setup(){
  pinMode(LED3, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED1, OUTPUT);
  pinMode(BUTTON, INPUT);
  pinMode(CDS, INPUT);
}
void check_count(){
  if((count & 4) == 4){
    digitalWrite(LED3, HIGH);
  } else {
    digitalWrite(LED3, LOW);
  }
  if((count & 2) == 2){
    digitalWrite(LED2, HIGH);
  } else {
    digitalWrite(LED2, LOW);
  }
  if((count & 1) == 1){
    digitalWrite(LED1, HIGH);
  } else {
    digitalWrite(LED1, LOW);
  }
}

void loop(){
  int cds_input = digitalRead(CDS);
  int button_input = digitalRead(BUTTON);
  delay(INTERVAL);
  
  if(cds_input != before_cds){
    before_cds = cds_input;
    if(cds_input == HIGH){
      count++;
    }
  }
  check_count();
  
  if( button_input == HIGH ){
    count = 0;
    check_count();
  }
}

namebenchを使ってみた

,
DNSサーバのベンチマークソフトであるnamebenchを使ってみました.

[ダウンロードはこちら]


このソフトは,自身が設定しているDNSサーバやGoogle Public DNS,また,その地域にあるDNSサーバなどを検査し,最良のDNSサーバをレコメンドしてくれます.

使い方も簡単で,結果はWeb上にて,グラフィカルに表示してくれます.
便利ですねー

僕の環境では,Google Public DNSは,5番目でした.






Autohotkeyでプリントスクリーン機能拡張

,
プリントスクリーンはよく使う機能の一つですが,
Autohotkeyを用いて,この機能を拡張してみたいと思います.

拡張する機能は以下のようなものです.

Ctrlキーが押されている場合は,マイクロソフトペイントを起動し,
自動的にペーストすることで,編集状態に入ります.
逆にCtrlキーが押されていない場合には,ExClipを起動します.
ExClipは,クリップボードに格納されている画像を保存するためのソフトです.詳しくは開発元ページを御覧下さい.

もちろん,Altキーを押しながらプリントスクリーンキーを押すことでアクティブなウィンドウの画像のみ取得できるのは,変わりありません.

途中で100ミリ秒Sleepしているのは,ペイントを起動しきっていない状態で,ペーストするのを防ぐためです.また,変数exClipにExClipのパスを予め設定しておいてください.

; キャプチャ画像を保存する ※ExClipが必要 
*~PrintScreen::
 GetKeyState, ctrlFg, Ctrl   ; Ctrlが押されているか?
 if ctrlFg = D     ; Ctrlが押されている場合
 {
  Run, mspaint.exe
  Sleep 100
  Send, ^v
 } else {
  Run, %exClip%
 }
return

素人のように考え、玄人として実行する

,
素人のように考え、玄人として実行する(金出 武雄 著)

先日京都大学で開催されたマイクロソフトリサーチ主催の21世紀コンピューティングコンファレンスにて,カーネギーメロン大学の金出先生の発表を聴講しました.
なにより感じたのは「楽しそうに研究している」ということでした.
金出先生が,研究に対してどのような哲学を持ち,取り組んでおられるか興味があり,この本を手に取りました.

参考になった箇所をいくつか抜粋したいと思います.

p.34 問題の発見方法について
A・ニューウェル教授は,学生たちに熱っぽく語るのが常であった.「そういう問題の一つ一つが『解いてくれ,解いてくれ』と,恋人を待っているようにわれわれ研究者を待っているのだ」と.

p.43 玄人としての実行方法について
プロとしていい仕事ができるか,できないか,アイデアを完成できるかどうかの分かれ道は,捨てて買える決断力,勇気があるかであろう.

p.82 研究が難航した時に
できるやつほど迷うものだ

p.180 異なるジャンルの人と触れ合う必要があるという文にて
世の中には,自分よりはるかに優れている人,自分のしらないことを知っている人,自分が思いもしないことを考えている人がいくらでもあり,驚かされる.

p.270 プレゼンについて
プレゼン資料は一目で内容がわからないように作る(略)
それだけで何を言いたいのかがわかると,聴衆は勝手なことを考え始める.(略)
それだけでは何を言いたいのかわからないが,講演者の説明とあわせると初めて,言いたいことがちょうどぴったりわかるように設計すべきである.(略)
すると聴衆は,何だろうかと思うから講演者の言う事を聞き始める.そして,講演者は聴衆の考えることをコントロールできるのである.

p.295 日本独自の~~というものについて
世界で売れている自動車や電気製品は「日の丸自動車」とか「日本人だからできたウォークマン」とは言わない.言う必要がないからである.




「素人のように考え、玄人として実行する」ということの何と難しいことか….ただ,これから心がけていきたいと思います.

切磋琢磨するアメリカの科学者たち

,
切磋琢磨するアメリカの科学者たち(菅 裕明 著)
を読みました.

この本を読むきっかけについてなのですが,
先日,僕の通っている大学院の講義にて,この本の著者がゲストとして呼ばれ,1コマ分の授業を持ちました.
その中で,著者が米国の大学のシステムについてお話をしてくださったのですが,その内容がとても興味深く,もっと知りたいと思い,この本を購入しました.

著者は,岡山大学大学院を卒業後,MITにてPh.D.を取得,ニューヨーク州立バッファロー大学のAssistant Professorを経て,現在は,東京大学先端科学技術研究センターの教授をされています.そのため,著者は,日米どちらの学生,教員も経験されており,その経験をもとにこの本を記されています.

この本では,まず,米国における学生側から見た大学システム(特にPh.D.について)や教員側のシステム(新人教員のスタートアップ費用やテニュアの審査法,大学の設備など)について述べられています.
さらに,科研費(著者がライフサイエンス分野の方なので,NIH… National Institute of Healthについて詳しく)の取得方法についても記載されています.

この本の中で,著者が言いたいことのひとつに,ピアレビューというものがあります.米国のアカデミックシステムは公平な評価のもとに成り立っているということです.例えば,Ph.D.の資格適性試験は,担当の教員以外にも同じ学科の教員複数人で審査する点や,教員のテニュア審査には,同じ学科の教員以外にも外部の大学の教員を審査に加えることが挙げられます(資格適性試験は,日本でも複数人の教員が審査すると思う.また,日本にはテニュアのような資格はない).

米国では,学生の間は,少しでもよい大学院(研究室)に入るために成績は当たり前のようによい点を取り,統一試験や資格適性試験などを受け,教員になったら,限られた予算や研究室のスペースから研究を初め,テニュアを取得する・・・つまり,常に競争の中に晒され続けます.この中で勝ち抜くためには,米国の研究者は,常にモチベーションを高く維持する必要があります.(もちろん,日本の研究者のモチベーションが低いわけではない)
私が思うに,米国のシステムの良い点は,簡単に言うと,「研究者としてダメなやつはさっさと諦めて,違う仕事を探しなさい」ということです.
年を取ってから研究者にはなれないと言うわけではないけども,若いうちの方が,他の求人に関しての幅も広く,チャンスも多いだろう.米国のシステムには,「ダメ」とはっきり言うことで,アカデミックポストを早い段階で諦めさせ,別の仕事に就くチャンスを多くするという優しさがあると思います.

最後に,著者は「では,日本のアカデミックシステムをどのように改革したらよいか?」について書かれています.興味が沸いた方は是非手に取ってお読みください.

決断力

,
決断力(羽生 善治著)

この本では棋士の羽生善治氏が決断力と題して,いかにビジネスや研究,勝負事において決断をするかについて記している.

感銘を受けた部分をいくつか紹介したい.

p.39 将棋をする上でなぜ新しい手を指すかについて
未知の世界に踏み込み,自力で考え,新しいルートを探し求める気迫こそ,未来を切り開く力になると私は考えている.

p.57 考える力について
私は,将棋を通して,そういう人間の本質に迫ることができればいいな,と思っている.

p.73 新しい手を指す際のリスクについて
私は,積極的にリスクを負うことは未来のリスクを最小限にすると,いつも自分に言い聞かせている.

p.131 新しいアイデアを発想することについて
自分で手を動かすことが知識に血肉を通わせることになる.

p.155 学びのプロセスについて
遠回りをすると目標に到達するのに時間はかかるだろうが,歩みの過程で思わぬ発見や出会いがあったりする.

p. 157 プロジェクトを組む,研究会に参加するということに関して
基本は,自分の力で一から考え,自分で結論を出す.それが必要不可欠であり,前に進む力もそこからしか生まれないと,私は考えている.
(誤解のないように言っておくが,この前の文章で「何人かの人と共同で検討すると,理解の度合いが二倍というよりも,二乗,三乗と早く進んでいくのは確かだ.」と述べている.)

p.165 コンピュータ将棋について
たとえコンピュータが必勝法を見つけ出したとしても,それを人間が理解することはできないだろう.

p.168 才能について
才能とは,同じ情熱,気力,モチベーションを持続することである.

p.169 頭のよさについて
たくさんの知識を活用できる,記憶力がいい,計算が速くできる,機転がきく…なども頭がいいといえよう.私は,ロジカルに考えて判断を積み上げる力も必要であると思うが,見切りをつけ,捨てることを決断する力も大事だと思っている.



将棋の世界は一般社会的に生きる人から見ると特異な世界と言える.しかし,この本を読む中で,私は,棋士が将棋を指す中で行う情報の取捨と次の一手の選択を行う上で必要な決断力は,一般社会に生きる人でも多いに参考にする箇所があると思った.

簡単に,単純に考える

,
簡単に,単純に考える(羽生 善治 著)

この本では棋士の羽生善治氏がスポーツジャーナリストの二宮清純氏,元ラグビー日本代表監督の平尾誠二氏,カーネギーメロン大学教授の金出武雄氏と対談した内容が記されている.

本書内で感銘を受けた箇所,共感を持てた箇所,考え深かった箇所をいくつか紹介したいと思う.

p.12 秀才について
二宮:秀才というのは相対的な能力評価だと,私は思うんですよ.周りとの比較でものを考える.たとえば,誰かが100メートルを9秒8で走ったら,自分は9秒7で走れば勝つことができるのだと.

p.43 記憶力と創造力について
二宮:「どうも記憶が悪くて」という人がいますが,そういう人にかぎって企画力や想像力では負けないと自負している.ですが,創造力やアイデアの源は,頭の中の記憶の組み合わせから生まれてくるような気がします.

p.46 将棋には非常によくできたルールがあることについて
羽生:制約や約束事があるから,工夫しよう,打破しようという気持ちになるのでしょうね.

p.116 理想の将棋について
羽生:私の将棋の理想は,一局の将棋が初手から終わりの一手まで,一本の線のようになっていることなんです.

p.156 羽生の目標について
金出:羽生さんは「いい棋譜を残したい」といわれていますね.

p.158 有限ゲームについて
金出:ものすごく賢い宇宙人が二人でやってきて,これからチェスを指そうと言う話になる.まずは駒を並べて,先手はじっと考えた末「勝った!」,相手は「参りました」といって,終わったという・・・

p.176 将棋の盤面の評価について
金出:つまり,盤面のよさを評価する関数は滑らかでない.

p.189 研究について
金出:研究というのは,自然の世界とか摂理に対して「こういうことをやらせてほしい」「いや,それは難しいからやってくれるな」と交渉しているんですよ.それがちょうどいいところで交渉できたら,研究は成功すると.

p.229 思考法について
羽生:最善手は一つである.過去の成功体験や決断を妨げている複雑な思いから脱却する勇気を持てば,どこに次の一手を打つべきかという本質も見えてくるはずである.

われはロボット(I, Robot)

,
われはロボット(I, Robot)アイザック・アシモフを読んだ

SFの名作中の名作ですね.
アシモフによって考えられたロボット工学三原則をご存じの方も多いのではないでしょうか?

第一条 ロボットは人間に危害を加えてはならない。また、その危険を看過することによって、人間に危害を及ぼしてはならない。

第二条 ロボットは人間にあたえられた命令に服従しなければならない。ただし、あたえられた命令が、第一条に反する場合は、この限りでない。

第三条 ロボットは、前掲第一条および第二条に反するおそれのないかぎり、自己をまもらなければならない。

この本の構成は短編集となっており,ロボット工学三原則を軸に話が展開されていきます.
基本的にロボットはロボット工学三原則に基づいて行動します.つまり,命令を与えられて行動を起こす必要がある場合,原則に最も適した行動を選択する必要があります.そこで,一定時間内に,無数の行動パターンの中からベストな解を探索する必要があるのですが,探索が同じ箇所を繰り返したり,探索が止まってしまうことがあります.このような状態に陥るとロボットは暴走したり停止してしまいます.

これを回避するために,人間はロボットに命令を与える際に,探索する必要がある空間をできるだけ限定し,命令の意図を明確にする必要があります.
(フレーム問題ってやつですね)

この本の中では,ロボットにこのような問題が起こり,人々に対して不利益をもたらすケースが記されています.

あーーーーーーーーーーーなるほど!!と推理小説を読んでいる気分になり,その度にアシモフが半世紀も前によくこれだけの話を考えられたなと驚愕しました.

英語学習法

,
勝手に僕の英語学習法を公開したいと思います.

タダで気軽に行うということがモットーですw

◆Reading
[VOA Special English]
毎日様々な分野のトピックが掲載され,購読することができます.
また,ゆっくりめに音読してくれる音楽ファイル(mp3)をダウンロードすることができます.
一度自分で読み,音声を聞きながらシャドーイングをしてはどうでしょうか.


◆Writing
[lang-8]
一言でいうと添削SNSです.ユーザは登録時に自分の学習したい言語と,母国語を登録します.そして,学習したい言語で日記を書きます.例えば今僕が英語で学習したいとしましょう.
そうすると,英語が母国語の人たちが僕の日記を修正してくれます.逆に彼らが日本語を学びたく,日記を書いたとすると,僕は彼らの日記を修正します.人々の善意で成り立つまさにWeb 2.0というサイトです.
もちろん,ネイティブとはいえ,一般の方なので,論文等のネイティブチェックに使えるわけではないのですが,気軽に日記を書いて修正してもらえるのは嬉しいです.


◆Listening
[YouTube EDU]
StanfordやHarvard, UCBerkeley, Carnegie Mellonなど名高い大学の講義の動画を無料で閲覧することができます.
Stanfordの卒業式でのスティーブ・ジョブズやHarvardでのビル・ゲイツ,CMUでのランディ・パウシュの最後の授業はとても有名ですね.


[TED]
Technology Entertainment Design conference (TED)での素晴らしいスピーチを聞くことができます.ビデオによっては,日本語を表示することも可能です.また,多くのビデオで英語の字幕を表示することができます.


◆Speaking
[EnglishCentral]
このサイトでは,スピーキングの練習をすることができます.
英語のビデオが流れるのですが,一文ずつ停止します.そして,マイクを通して今聞いた文を発声します.この発声に基づいて,ポイントを入手することができます.友人とポイントを競いあうことができますね.


◆Vocabulary
[smart.fm]
効率良く英単語を学習することができます.
良い点としては,iKnow(実際に単語を学習するアプリ)のインタフェースが良い点です.飽きずに楽しく学習することができます.
また,コンテンツ(smart.fm上ではコースと呼びます)も分野別に整理されており,また,多数用意されています.例えば,英語入門,TOEIC listening or writing,TOEFL,Business用などです.おもしろいコースとして恋愛の生英語などがあります.
僕はこのsmart.fmで6000ワード学習しました.


◆TOEIC
[TOEICデイリーミニテスト - 英語学習 - Yahoo!学習]
リスニングセクションのPart1-3,リーディングセクションのPart5から,毎日模擬TOEIC問題が掲載されます.
時間が5分余った時,やってみてはどうでしょうか.


[TOEIC Testプラス・マガジン]
こちらは書籍です.
今話題のニュースや覚えて欲しい単語などが掲載されたあと,TOEICの模擬問題1回分が掲載されています.TOEICテストを受ける前に,過去問をやるだけで点数がいくぶんが伸びると思います.

2ヶ月に1回発行されます.

◆余談
これは英語学習が目的ではないのですが,毎日Google Scholarで英語論文を1本検索し,アブストだけ目を通すようにしています.もちろん,アブストだけで論文の内容がしっかり伝わってくるわけではないので,英語もわからない上に,内容もわかならないことが多いのですが,英語アレルギーを少しでも減らすように,おまじない程度に行っています.(ただ,自分は毎日英語に触れているという意識を持つことは非常に重要だと思っています.)

また,上記のように日課として行うから,少し疲れた日でも頑張って続けるというのもありますが,基本的に自分の興味のある分野を学習する,ということを通して英語を学習する方法がよいと思います.
例えば,僕の場合,工学や科学技術に興味があるので,YouTube EDUやTED,VOA Special Englishなどでは,それらに関係ある内容しか見ません.また,lang-8では,旅行した時とか,月の写真を撮ったとか,僕自身の楽しかった思い出を書いています.(つらかった事をわざわざつらい英語で書きたくはないです)


みなさんも是非.