DIYダーツボード[Arduino][Android]

この間、自作ダーツ板について、社内の勉強会で発表してきました。

そのときの資料をUPします。
http://prezi.com/njgjt9pye3a_/diy-darts-board-android-arduino-20121020/

ざっくり、説明すると
Android → PC → Arduino → ダーツ板
って感じで通信してます。

これで、ダーツの計算までしっかりできれば、完成なんですけど、
今のところは通信確認までできてる感じです。

gitにもUPしとくんで、hiko-t で探せば出てくると思います。

横浜Androidプラットフォーム部 22回 参加!!

2012/07/16にいってきました!!

社内の勉強会には参加してましたが、少人数の勉強会は初参加でした。
同僚と一緒に行って、ほんとに有意義な話が聞けました^^


内容は以下のとおりです。

@magoroku15 さん ADK2012の構造と解析
http://www.slideshare.net/magoroku15/adk2012
体験記等)
http://d.hatena.ne.jp/itog/20120709/1341801118
@tetsu_koba さん 初めてのパッチ投稿
 
http://events.linuxfoundation.org/images/stories/pdf/lcjp2012_kh_maintainer.pdf

@cooseezzz さん JBのマウント処理
@l_b__
JellyBeanのソースをとりあえず眺めてみた(手抜き)
http://www.slideshare.net/l_b__/jelly-bean

@roishi2j2 さん verilog-HDL 入門
http://www.ddna.is.tsukuba.ac.jp/lecture/lsi_design/text/verilog/verilog.html

@_handyfox さん
横浜Androidプラットフォーム部第22回勉強会 #yapf
http://handyfox.blog.fc2.com/blog-entry-26.html


すごく面白い話ばかりでした!
正直、わからないこともかなりあって、申し訳ない気持ちと
あせる気持ちがあって、モチベーションも上がりました!

これからも勉強会にいろいろと参加していきたいと思います!

Arduinoで74HC4051APを使う−その3−

その3です。

今回は4051を使って10個のボタン入力を制御したいと思います。
これはダーツ盤のマトリックス回路が7×10なので、
1個4051では8つの入出力までしか制御できないんです。

だから、2つの4051を使って10個のボタンを制御したいと思ったんです。

ではまずは回路図からです。

その1で作った回路を2つ作るイメージですね。
具体的には4051が1個につき、5個のボタンを制御します。

次はプログラムです。
プログラムは5個のボタン制御を2回連続で行うようなものです。

// 1個目の4051用
int OUT_PIN_0 = 2;
int OUT_PIN_1 = 3;
int OUT_PIN_2 = 4;

// 2個目の4051用
int OUT_PIN_3 = 5;
int OUT_PIN_4 = 6;
int OUT_PIN_5 = 7;

int IN_DATA_PIN_0 = A0;
int IN_DATA_PIN_1 = A1;

int HALF_MAX_COUNT = 4;

int r0 = 0;
int r1 = 0;
int r2 = 0;
int count = 0;

void setup() {
pinMode(OUT_PIN_0, OUTPUT);
pinMode(OUT_PIN_1, OUTPUT);
pinMode(OUT_PIN_2, OUTPUT);
pinMode(OUT_PIN_3, OUTPUT);
pinMode(OUT_PIN_4, OUTPUT);
pinMode(OUT_PIN_5, OUTPUT);

Serial.begin(9600);
}

void loop() {

for (count = 0; count <= HALF_MAX_COUNT; count++) {
r0 = bitRead(count, 0);
r1 = bitRead(count, 1);
r2 = bitRead(count, 2);

digitalWrite(OUT_PIN_0, r0);
digitalWrite(OUT_PIN_1, r1);
digitalWrite(OUT_PIN_2, r2);

Serial.print("0 : ");
Serial.print(count);
Serial.print(" : ");
Serial.println(analogRead(IN_DATA_PIN_0)/4);

delay(100);
}

for (count = 0; count <= HALF_MAX_COUNT; count++) {
r0 = bitRead(count, 0);
r1 = bitRead(count, 1);
r2 = bitRead(count, 2);

digitalWrite(OUT_PIN_3, r0);
digitalWrite(OUT_PIN_4, r1);
digitalWrite(OUT_PIN_5, r2);

Serial.print("1 : ");
Serial.print(count);
Serial.print(" : ");
Serial.println(analogRead(IN_DATA_PIN_1)/4);

delay(100);
}
}

Arduinoで74HC4051APを使う−その2−

前回に引き続き、Arduinoネタです。

前回は74HC4051AP(以後4051)を使って、8つのボタン入力を制御しました。
今回は4051を使って、8つのLEDの制御を行います。

前回は入力、今回は出力です。
これでマトリックス回路の準備ができるということです。

4051の使い方は前回とほとんど一緒です。
違うのはデータの入力をしていた z から
出力を行うことです。

LEDを8つ並べて、それぞれに出力していきます。

LEDを順番に0.1秒おきに点滅を繰り返すプログラムです。


// ポート番号を指定
int s0 = 2;
int s1 = 3;
int s2 = 4;

int led = 5;

// 変数宣言
int cal0 = 0;
int cal1 = 0;
int cal2 = 0;

int count = 0;

void setup() {
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(led, OUTPUT);

Serial.begin(9600);
}

void loop() {
for (count = 0; count <= 7; count++) {
cal0 = bitRead(count, 0);
cal1 = bitRead(count, 1);
cal2 = bitRead(count, 2);

digitalWrite(s0, cal0);
digitalWrite(s1, cal1);
digitalWrite(s2, cal2);

// 点滅を0.1秒おきに繰り返す
digitalWrite(led, HIGH);
delay(100);
digitalWrite(led, LOW);

Serial.println(count);

delay(100);
}
}

Arduinoで74HC4051APを使う−その1−

Arduino で自作ダーツ盤を作成するにあたって、
7×10のマトリックス回路を入力しなければならないことがわかりました。

そのためには Arduino ではポートが足りないので、
ロジックICを使って、複数のボタンを制御しようと考えました。

いろいろなサイトを見ていると
74HC4051AP というICが良いようなので、
いろいろと実践してみました。

参考にしたサイト

ArduinoMIDIアナログシーケンサー
http://dkylog.air-nifty.com/dkylog/2009/12/arduinomidi-9dc.html

Analog Multiplexer/Demultiplexer - 4051
http://www.arduino.cc/playground/learning/4051

そもそも、電子回路の知識ゼロなので
どういったものなのか。まったくわかりませんでしたw

4051の使い方について

s0, s1, s2 へそれぞれ、HIGH か LOW の信号をデジタルピンから送ります。

3箇所に同時に送信するので、2進数の考え方をすると、8種類の信号が送ることができます。

↓こんな感じ


s0 : s1 : s2
0 : 0 : 0
1 : 0 : 0
0 : 1 : 0
1 : 1 : 0
0 : 0 : 1
1 : 0 : 1
0 : 1 : 1
1 : 1 : 1

そして、y0 〜 y7 はボタンや可変抵抗などの入力を受け取ります。

4051は s0, s1, s2 で信号を元に y0 〜 y7 のどの入力を受け取るのか判断します。

Arduino のプログラムとしては
for文を用いて、高速で信号を送り出すことで、
あたかも、8つの入力を同時に受け取っているかのように動作します。

8つのボタンを入力できる回路図

ソースコード


/*
* 74HC4051 を使用して、8つのボタン入力を制御します。
*/

// 固定値を設定
int MAX_CNT = 4;

// 入出力ピンを指定
int led = 13;
int s0 = 2;
int s1 = 3;
int s2 = 4;
int input = A0;

// 各変数を宣言
int r0 = 0;
int r1 = 0;
int r2 = 0;
int val = 0;
int count = 0;

void setup(){
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
digitalWrite(led, HIGH);
Serial.begin(9600);
}

void loop () {
for (count=0; count<=MAX_CNT; count++) {
r0 = bitRead(count, 0);
r1 = bitRead(count, 1);
r2 = bitRead(count, 2);

digitalWrite(2, r0);
digitalWrite(3, r1);
digitalWrite(4, r2);

val = analogRead(input)/4;
if (val > 0) {
Serial.println(count*10);
}
delay (100);
}
}

これで基本的な使い方はわかると思います。

スキルアップとモチベーションと価値観について考えてみた。

あくまで、自分の考えを書きなぐったものなので、批判や文句は大歓迎ですw

誰でもスキルアップしたいと思うはず。

スキルアップするためには、学習が必要です。
勉強しなきゃ!! と思っている人は多いと思います。

ただし、学習するためにはその人のモチベーションが高く保てなければ、続きません。
学習をするための基礎知識は入社時の研修や学校などで学んでいるはずです。
あとは、ヤル気。モチベーションさえあれば、学習してスキルアップできるはず。

なら、どうやってモチベーションをあげるのか?

私の場合、三つのパターンがあると思います。
1.高いモチベーションを持つ身近な人と交流する
  特に同年代の人で、自分よりもスキルが高い人や同じ目標を持つ人と交流すると、
  その人たちのモチベーションに引き上げられていくと思います。
  負けたくないと思う気持ちが大事なので、あまりにもスキルが高い人では意味がないです。
  ただし、一度や二度交流があった程度では、すぐにモチベーションは下がります。

2.何かをアウトプットする(作る。発表する。)
  ここで重要なのは締切りを作ることだと思います。
  「誰かに、いつまでに○○を完成させます!」
  と宣言してしまえば、後に引けなくなりますw
  そうすれば、完成させるために、躍起になると思います。

3.モチベーションが上がって、何かを達成した(完成させた)ときの
  達成感でモチベーションが上がる。良いスパイラルが発生したとき。

私はこのパターンでモチベーションを上げています。

最近、同僚の人と「周りの人のモチベーションをあげるにはどうすればいいのか?」
という議論をすることがあります。

なぜみんな学習しないのか?
IT業界に入ったならば、ITに興味があったからじゃないのか?
興味があるなら、勉強してもいいじゃないか?
と思うのです。

でも、モチベーションがいくら高くても、
学習に対する価値観は人それぞれなわけです。
同じ時間、同じお金をかける時、
プライベートな時間や遊ぶお金のほうが学習よりも価値が高ければ、
学習に対してその対価は勿体無いと感じてしまうのではないかと思います。

だから、2千円の参考書を買うことにためらう人も
2千円の服を衝動買いしてしまうのだと思います。

1時間の学習をためらう人は
気がつくと1時間ゲームをしてしまうのだと思います。

モチベーションが高く、学習に対する価値観が高い時に
学習が行われると思います。

そこで、思ったことは

『モチベーションが上がった先にある価値観の変化』

これが、学習の糧になるのだと思いました。

「ヤル気はあるんだよ・・・」
という声がよく聞こえてきますけど、
ヤル気や焦りがあっても、その人の価値観や優先順位が
低ければ、学習まで到達しないような気がします。


脈絡の無い、文章で申し訳ありませんでした。
最後まで、読んでくださりありがとうございます。

Ruby on Rails

GWに向けて、「Railsによるアジャイルwebアプリケーション開発」を購入しました。

簡単に環境準備についてメモします。

Rubyインストール
 http://www.rubylife.jp/install/
 
Railsインストール
 http://www.rubylife.jp/railsinstall/
 
SQLite 3インストール
 http://www.rubylife.jp/railsinstall/other/index1.html