Maruduinoでラーメンタイマー、、、ただし6個いっぺんに作れます。 [アプリケーション]
いや、ほら、カップラーメンって全部3分と言うわけでなく、3分だったり、4分だったり、うどんは5分が多いかな。
逆に焼きそばは1分とか、もうまちまち。
一人なら問題無いけれど、多人数で一つのキッチンタイマーでは苦しすぎる。
で、
これでキッチンタイマーの奪い合いも無くなり、平和にラーメンをすすれますネ。
LCDの接続はスケッチをごらんいただくとして、スピーカー出力はDI13(DIGITAL13)をAUX1に接続します。2つのスイッチを使いますが、SW1はDI2、SW2はDI3に接続します。
※例の100円スピーカーを接続するのをお忘れなく。
※メロディ発生のスケッチはexamplesのdigitalのtoneMelodyから流用していますので、pitches.hをプロジェクトフォルダーにコピーして使ってください。
※色々と気になる点はありますが、まあ善しとしましょう。
※なんか気の抜けるネタばかりですいません。
/* LiquidCrystal Library - Hello World Demonstrates the use a 16x2 LCD display. The LiquidCrystal library works with all LCD displays that are compatible with the Hitachi HD44780 driver. There are many of them out there, and you can usually tell them by the 16-pin interface. This sketch prints "Hello World!" to the LCD and shows the time. The circuit: * LCD RS pin to digital pin 8 * LCD Enable pin to digital pin 9 * LCD D4 pin to digital pin 4 * LCD D5 pin to digital pin 5 * LCD D6 pin to digital pin 6 * LCD D7 pin to digital pin 7 * 10K resistor: * ends to +5V and ground Library originally added 18 Apr 2008 by David A. Mellis library modified 5 Jul 2009 by Limor Fried (http://www.ladyada.net) example added 9 Jul 2009 by Tom Igoe modified 25 July 2009 by David A. Mellis http://www.arduino.cc/en/Tutorial/LiquidCrystal */ // include the library code: #include <LiquidCrystal.h> #include "pitches.h" int int0_count,int1_count; unsigned char store_sw_status[3]; /*スイッチ状態の記録*/ /*SW1はDI2に接続し、割り込み0、SW2はDI3に接続し、割り込み1で処理する。*/ unsigned long guard1_time,guard2_time; int timers; struct RECORD { int minutes; unsigned long end_time; } rec[6]; const struct SCORE { int note; int dura; } score[] = { {NOTE_G4,4}, {NOTE_A4,4}, {NOTE_B4,2}, {NOTE_A4,4}, {NOTE_G4,8}, {0,8}, {NOTE_G4,4}, {NOTE_A4,4}, {NOTE_B4,4}, {NOTE_A4,4}, {NOTE_G4,4}, {NOTE_A4,1}, }; const struct POSITION { int x; int y; } pos[] = { {0,0}, {5,0}, {10,0}, {0,1}, {5,1}, {10,1}, }; // initialize the library with the numbers of the interface pins LiquidCrystal lcd(8, 9, 4, 5, 6, 7); void setup() { lcd.begin(16, 2); for( int i = 0; i < sizeof(pos) / sizeof(pos[0]); i++ ) { lcd.setCursor(pos[i].x,pos[i].y); lcd.print("0:00"); } attachInterrupt(0, sw1_int_handler, RISING); attachInterrupt(1, sw2_int_handler, RISING); } void loop() { int i; char buffer[16]; static int count1,count2; for( i = 0; i < sizeof(pos) / sizeof(pos[0]); i++ ) { /*表示位置の設定*/ lcd.setCursor(pos[i].x,pos[i].y); if( rec[i].end_time != 0 ) { if( rec[i].end_time <= millis() ) { rec[i].minutes = 0; rec[i].end_time = 0; play_melody(); lcd.print(millis2min(buffer,0)); } else lcd.print(millis2min(buffer,rec[i].end_time - millis())); } } if( count1 != int0_count ) /*割り込みカウントと不一致が検出された時*/ { count1 = int0_count; /*更新*/ /*レコードが空いているかの判断*/ for( i = 0; i < sizeof(pos) / sizeof(pos[0]); i++ ) { if( rec[ timers ].end_time == 0 ) break; if( ++timers >= sizeof(pos) / sizeof(pos[0]) ) timers = 0; } /*書き込み可能な場合*/ if( i != sizeof(pos) / sizeof(pos[0]) ) { rec[ timers ].minutes = rec[ timers ].minutes + 1; rec[ timers ].minutes %= 10; lcd.setCursor(pos[ timers ].x,pos[ timers ].y); lcd.print(millis2min(buffer,rec[ timers ].minutes * 60 * 1000UL)); } } if( count2 != int1_count ) /*割り込みカウントと不一致が検出された時*/ { count2 = int1_count; /*更新*/ /*レコードが空いているかの判断*/ for( i = 0; i < sizeof(pos) / sizeof(pos[0]); i++ ) { if( rec[ timers ].end_time == 0 ) break; if( ++timers >= sizeof(pos) / sizeof(pos[0]) ) timers = 0; } if( i != sizeof(pos) / sizeof(pos[0]) ) { rec[ timers ].end_time = (rec[ timers ].minutes * 60 * 1000UL) + millis(); if( ++timers >= sizeof(pos) / sizeof(pos[0]) ) timers = 0; /*レコード番号の更新*/ } } delay( 50 ); /*表示更新時間*/ } char *millis2min( char *dest, unsigned long milli ) { int minute,second,temp; if( milli > 10 * 60 * 1000UL ) return 0; temp = (int)(milli / 1000UL); minute = temp / 60; second = temp % 60; dest[0] = (minute % 10) + '0'; dest[1] = ':'; dest[2] = (second / 10) + '0'; dest[3] = (second % 10) + '0'; dest[4] = '\0'; return dest; } void play_melody() { for (int thisNote = 0; thisNote < sizeof(score) / sizeof(score[0]); thisNote++) { int noteDuration = 1000/score[thisNote].dura; tone(13, score[thisNote].note,noteDuration); int pauseBetweenNotes = noteDuration * 1.30; delay(pauseBetweenNotes); } } void sw1_int_handler() { if( millis() > guard1_time ) /*現在時刻がガードタイムを越した時のみ有効とする*/ { int0_count++; /*有効割り込み数*/ guard1_time = millis() + 300UL; /*不感帯時間の再設定*/ } } void sw2_int_handler() { if( millis() > guard2_time ) /*現在時刻がガードタイムを越した時のみ有効とする*/ { int1_count++; /*有効割り込み数*/ guard2_time = millis() + 300UL; /*不感帯時間の再設定*/ } }
ITRONプログラミング入門―H8マイコンとHOSで始める組み込み開発
- 作者: 濱原 和明
- 出版社/メーカー: オーム社
- 発売日: 2005/04/25
- メディア: 単行本
Prototyping Lab ―「作りながら考える」ためのArduino実践レシピ
- 作者: 小林 茂
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/05/27
- メディア: 大型本
Maruduino(Arduino)で簡易的なストップウオッチの製作 またかよ編 [アプリケーション]
今までの方式で最大の問題は、計測時間が正確ではなかった点です。
今までの時間の取得は50ms+内部処理時間周期でSW1の状態を監視していたので、ワーストケースでは50ms+LCD表示など内部処理に掛かる時間だけ実際のスイッチの変化から遅れて計測がスタート、ストップしていました。
これを解消するためには、スイッチの変化に対して即座に反応し、計測の開始時間や終了時間を記憶する必要があります。
そこで、Arduinoのライブラリの中のattachInterruptと言う割り込みハンドラの登録機能を利用します。
これは、スイッチの状態の変化が検出されると通常のloop処理以外の流れ(コンテキスト)にマイコンの処理を切り替え、そこで必要な処理を行おうというものです。
必要な処理はユーザーが自分で作成し、登録します。
つまりこのユーザーが登録した別のコンテキストの先頭で変化を検出した時間を記録しておき、その値を計測時間として利用します。
また、同時にチャタリング?対策もここで行ってしまいます。
※厳密に言えばこの方法でもスイッチの変化から割り込みハンドラが起動して時間が記録されるまでに数十とか数百μsくらいの遅延は発生しているのですが、10msの精度から見れば十分に許容範囲内です。
ただしattachInterruptで利用できる端子は限定されており、DIGITAL2またはDIGITAL3のみです。その為、Hello Worldで利用しているLCD端子の移動が必要です。
以下に掲載するスケッチのコメント部にも具体的な割付を書きましたが、DIGITAL2をLCDの制御線から移動し、代わりにSW1からの入力に利用しています。
と言う訳で、スケッチをここに掲載しておきます。
/* LiquidCrystal Library - Hello World Demonstrates the use a 16x2 LCD display. The LiquidCrystal library works with all LCD displays that are compatible with the Hitachi HD44780 driver. There are many of them out there, and you can usually tell them by the 16-pin interface. This sketch prints "Hello World!" to the LCD and shows the time. The circuit: * LCD RS pin to digital pin 8 * LCD Enable pin to digital pin 9 * LCD D4 pin to digital pin 4 * LCD D5 pin to digital pin 5 * LCD D6 pin to digital pin 6 * LCD D7 pin to digital pin 7 * 10K resistor: * ends to +5V and ground * wiper to LCD VO pin (pin 3) Library originally added 18 Apr 2008 by David A. Mellis library modified 5 Jul 2009 by Limor Fried (http://www.ladyada.net) example added 9 Jul 2009 by Tom Igoe modified 25 July 2009 by David A. Mellis http://www.arduino.cc/en/Tutorial/LiquidCrystal */ // include the library code: #include <LiquidCrystal.h> int mode; /*初期状態は0(計測スタート待ち)*/ /*初期状態→計測中→停止中→初期状態に戻る の状態遷移を行う*/ int int_count; unsigned long passed_time,latest_time; unsigned long int_time,guard_time; // initialize the library with the numbers of the interface pins LiquidCrystal lcd(8, 9, 4, 5, 6, 7); void setup() { // set up the LCD's number of rows and columns: lcd.begin(16, 2); // Print a message to the LCD. lcd.print("Play Stopwatch."); attachInterrupt(0, sw1_int_handler, RISING); } void loop() { static int count; if( count != int_count ) /*割り込みカウントと不一致が検出された時*/ { count = int_count; /*更新*/ switch ( mode ) { case 0 : /*初期状態から計測中に遷移*/ passed_time = int_time; /*計測開始時刻*/ mode = 1; break; case 1 : latest_time = int_time; /*計測停止時刻*/ mode = 2; break; default : lcd.setCursor(0, 1); lcd.print(" "); /*表示クリア*/ mode = 0; break; } } lcd.setCursor(0, 1); if( mode == 1 ) lcd.print((double)(millis() - passed_time) / 1000.0); /*0.1秒単位で出力*/ else if( mode == 2 ) lcd.print((double)(latest_time - passed_time) / 1000.0); /*計測完了*/ else lcd.print(0.0); /*表示を0に戻す*/ delay( 50 ); /*表示更新時間*/ } void sw1_int_handler() { if( millis() > guard_time ) /*現在時刻がガードタイムを越した時のみ有効とする*/ { int_count++; /*有効割り込み数*/ int_time = millis(); guard_time = int_time + 500UL; /*不感帯時間の再設定*/ } }
Maruduinoの基本パーツの組み立て4 [組み立て]
ITRONプログラミング入門―H8マイコンとHOSで始める組み込み開発
- 作者: 濱原 和明
- 出版社/メーカー: オーム社
- 発売日: 2005/04/25
- メディア: 単行本
大人の科学マガジン Vol.27(8ビットマイコン) (Gakken Mook)
- 作者: 大人の科学マガジン編集部
- 出版社/メーカー: 学習研究社
- 発売日: 2010/05/12
- メディア: ムック
Prototyping Lab ―「作りながら考える」ためのArduino実践レシピ
- 作者: 小林 茂
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/05/27
- メディア: 大型本
Maruduinoの基本パーツの組み立て3 [組み立て]
残っていたスイッチ、LEDの取り付けを終わらせてしまいます。手順は前々回の取り付けを参考に行ってください。 | |
実装位置は基板中央、上側、ちょうどLCDの真下になりますので、一旦LCDを外しておいてください。 | |
セオリー通りちっさい方の抵抗から実装します。 0Ωの抵抗は黒い帯が一本です。 10Ωの抵抗は茶黒黒金です。 300KΩの抵抗は橙黒黄金です。 |
|
おっきい方の抵抗を実装します。 | |
ICを実装しますが、新品のICは大概が足が広がった状態ですので、事前に平らなところで広がりを修正しておきます。 | |
かならずこの方向で実装してください。 | |
C16(1000pF、102と表記)とC15(0.047μF、473と表記)を実装します。頭の黒いのがC16です。 | |
オーディオ出力用のジャックを取り付けます。 | |
電解コンデンサを実装しますが、電解コンデンサには極性(プラスとマイナス)があります。これを間違えると、最悪は破裂とかしてしまいます。写真の様に白い帯が縦に入っている方がマイナスとなります。基板上には白い円の中で一部白く塗りつぶされているところがありますが、これがマイナスを示しています。 | |
立てて実装するとLCDとぶつかってしまいますので、写真の様に寝かせて実装します。本体から大体2mmくらいの位置を、ピンセットで折り曲げ加工してください。 ちょっと太いほうが220μF(C14)、細い方が100μF(C13)です。 |
|
最後に音量調整用の可変抵抗器を実装します。 | |
ちょっと何か鳴らしてみましょうか。写真は100均で買った、勿論100円のステレオスピーカーです。まともに部品屋さんでスピーカーを購入すると意外と高かったり、ほとんどがリードタイプで基板実装タイプが見つからなかったりと苦労します。3.5mmのジャックなのでこの様にダイレクトにスピーカーユニットを接続できると言う訳です。 | |
ArduinoのexampleのdigitalのtoneMelodyを開いて、DI8とAUX1を接続し、スケッチをArduinoに転送してみてください。なんだか力が抜けるメロディが流れてくるかと思われます。 音量が小さくて聞き取れないときは、VR2のVOLUMEで調整します。 |
ITRONプログラミング入門―H8マイコンとHOSで始める組み込み開発
- 作者: 濱原 和明
- 出版社/メーカー: オーム社
- 発売日: 2005/04/25
- メディア: 単行本
Prototyping Lab ―「作りながら考える」ためのArduino実践レシピ
- 作者: 小林 茂
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/05/27
- メディア: 大型本
Maruduino(Arduino)で簡易的なストップウオッチの製作2 [アプリケーション]
その一つは押下の検出にSW1の論理レベルを使っている事です。
もう一度スイッチの押下について考えてみます。
スイッチの情報を得る場合、2つの状態が考えられます。
1.今現在の状態の取得。つまり現在スイッチが押されているのか、それとも離されているのか?です。
2.スイッチの状態の変化の取得。つまり離されている状態から押された状態に変化したのか、それともその逆なのか?です。
実はこの2つの状態はよく組み合わせで使われます。スイッチを瞬間的に押された事を検出するなら2を、長押しを検出するなら1とかです。
前回のスケッチでは1の方法で検出をしていました。これはストップウオッチで1秒以上長押しされる事はあまり無い”だろう”と言う、あくまでもこちらの側の都合ですね。
で、今回は2の方法を実現してみます。
変化点を検出する為には、過去と現在の2つの状態が必要です。
スイッチが押された事を検出するなら、「過去は離されていたが、今見たら押されている!」と言う状態の検出です。
と言うわけで過去の状態を保存する変数と現在の状態を代入するbool型の変数の2つを用意してコーディングし直してみました。
この方法は、比較する論理レベルを逆にするとスイッチが離された事の検出に使えますし、bool型ではなく変数を整数型で複数ポートを一気に読み出し、代入を行うと、複数ポートの変化を論理だけで検出する事ができます。
※ITRON等で使う場合、変化点をXOR(排他的論理和)として検出し、その値をイベントフラグに代入すると、結構スマートな使い方が出来る。
/* LiquidCrystal Library - Hello World Demonstrates the use a 16x2 LCD display. The LiquidCrystal library works with all LCD displays that are compatible with the Hitachi HD44780 driver. There are many of them out there, and you can usually tell them by the 16-pin interface. This sketch prints "Hello World!" to the LCD and shows the time. The circuit: * LCD RS pin to digital pin 12 * LCD Enable pin to digital pin 11 * LCD D4 pin to digital pin 5 * LCD D5 pin to digital pin 4 * LCD D6 pin to digital pin 3 * LCD D7 pin to digital pin 2 * 10K resistor: * ends to +5V and ground * wiper to LCD VO pin (pin 3) Library originally added 18 Apr 2008 by David A. Mellis library modified 5 Jul 2009 by Limor Fried (http://www.ladyada.net) example added 9 Jul 2009 by Tom Igoe modified 25 July 2009 by David A. Mellis http://www.arduino.cc/en/Tutorial/LiquidCrystal */ // include the library code: #include <LiquidCrystal.h> const int sw1 = 13; /*スイッチ1の入力*/ int mode; /*初期状態は0(計測スタート待ち)*/ /*初期状態→計測中→停止中→初期状態に戻る の状態遷移を行う*/ int ignore_time; unsigned long passed_time,latest_time; boolean kako,ima; /*sw1の状態を過去の時点と今の時点で保存する変数*/ // initialize the library with the numbers of the interface pins LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { pinMode( sw1, INPUT ); // set up the LCD's number of rows and columns: lcd.begin(16, 2); // Print a message to the LCD. lcd.print("Play Stopwatch."); kako = (digitalRead( sw1 ) == HIGH) ? true : false; /*初期化時に過去の値を保存して置く*/ } void loop() { ima = (digitalRead( sw1 ) == HIGH) ? true : false; /*今の状態を取得*/ if( ignore_time == 0 && kako == false && ima == true ) /*つまり不感帯以外で過去に偽、今が真の時を探す*/ { ignore_time = 20; /*1秒の不感帯とする*/ switch ( mode ) { case 0 : /*初期状態から計測中に遷移*/ passed_time = millis(); /*計測開始時刻*/ mode = 1; break; case 1 : latest_time = millis(); /*計測停止時刻*/ mode = 2; break; default : lcd.setCursor(0, 1); lcd.print(" "); /*表示クリア*/ mode = 0; break; } } kako = ima; /*今の状態を過去に代入*/ lcd.setCursor(0, 1); if( mode == 1 ) lcd.print((double)(millis() - passed_time) / 1000.0); /*0.1秒単位で出力*/ else if( mode == 2 ) lcd.print((double)(latest_time - passed_time) / 1000.0); /*計測完了*/ else lcd.print(0.0); /*表示を0に戻す*/ if( --ignore_time <= 0 ) ignore_time = 0; /*スイッチを無視する時間の更新と上限*/ delay( 50 ); /*表示更新時間*/ }
ITRONプログラミング入門―H8マイコンとHOSで始める組み込み開発
- 作者: 濱原 和明
- 出版社/メーカー: オーム社
- 発売日: 2005/04/25
- メディア: 単行本
Prototyping Lab ―「作りながら考える」ためのArduino実践レシピ
- 作者: 小林 茂
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/05/27
- メディア: 大型本
Maruduino(Arduino)で簡易的なストップウオッチの製作1 [アプリケーション]
わりと判り易いと思われるストップウオッチです、、、既にArduinoの作例として何処かに登録されている様な気がしないでもないけれどネ。
機能としては一応100分の1秒表示。スイッチは一つ、その一つのスイッチで
1.計測待ち
2.計測
3.計測停止
の3状態を1~3に、また1に戻ると言った簡単な状態遷移で行います。
肝心の時間の計測には起動時からの時間をms単位で返すmillisライブラリを使用します。簡単ですから。
スイッチの押下の検出は自分でやらねばなりません。
ところでスイッチの入力となるといつも問題なるのがチャタリングでしょう。切り替えた時に接点がバウンス(はね返り)してONとOFFの状態が連続して表れるとか。
ですが、このストップウオッチのスイッチ入力に巨大なレバー式スイッチなど使いませんので、現実的にはバウンスが問題になる訳ではありません。
使用しているタクトスイッチは、上から押し込む事で離れていた導電ゴムの接点が押しつぶされる様に接触しますので、どっちかと言えば接触するかしないかの際での人間の指の状態とか、人によって長く押したり、短く押したりと言った時間的不確実性の方が問題です。
やっぱり何等かの不確実性を解消しないといけないのは事実ですので、もう少しこのストップウオッチにおけるスイッチの役目を考えてみると、
1.まず押された事を検出できれば良い、、、つまり離された事まで考慮する必要が無い。
2.ONとOFFが繰り返される事は時間のフィルターを用いる事で解消できる。
と言う訳で今回のストップウオッチにおけるスイッチ押下による状態遷移の条件として、前回の変化から一定以上の時間が経過している事。押下のみ検出とします。
LiquidCrystalのHell Worldを改造して以下の様なスケッチを書いて見ました。
しかし100分の1秒の精度は実に怪しいですね。
※一桁間違えたので修正(笑)
/* LiquidCrystal Library - Hello World Demonstrates the use a 16x2 LCD display. The LiquidCrystal library works with all LCD displays that are compatible with the Hitachi HD44780 driver. There are many of them out there, and you can usually tell them by the 16-pin interface. This sketch prints "Hello World!" to the LCD and shows the time. The circuit: * LCD RS pin to digital pin 12 * LCD Enable pin to digital pin 11 * LCD D4 pin to digital pin 5 * LCD D5 pin to digital pin 4 * LCD D6 pin to digital pin 3 * LCD D7 pin to digital pin 2 * 10K resistor: * ends to +5V and ground * wiper to LCD VO pin (pin 3) Library originally added 18 Apr 2008 by David A. Mellis library modified 5 Jul 2009 by Limor Fried (http://www.ladyada.net) example added 9 Jul 2009 by Tom Igoe modified 25 July 2009 by David A. Mellis http://www.arduino.cc/en/Tutorial/LiquidCrystal */ // include the library code: #include <LiquidCrystal.h> const int sw1 = 13; /*スイッチ1の入力*/ int mode; /*初期状態は0(計測スタート待ち)*/ /*初期状態→計測中→停止中→初期状態に戻る の状態遷移を行う*/ int ignore_time; unsigned long passed_time,latest_time; // initialize the library with the numbers of the interface pins LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { pinMode( sw1, INPUT ); // set up the LCD's number of rows and columns: lcd.begin(16, 2); // Print a message to the LCD. lcd.print("Play Stopwatch."); } void loop() { if( ignore_time == 0 && digitalRead( sw1 ) == HIGH ) /*スイッチが押されるとHIGHとなる*/ { ignore_time = 20; /*1秒の不感帯とする*/ switch ( mode ) { case 0 : /*初期状態から計測中に遷移*/ passed_time = millis(); /*計測開始時刻*/ mode = 1; break; case 1 : latest_time = millis(); /*計測停止時刻*/ mode = 2; break; default : lcd.setCursor(0, 1); lcd.print(" "); /*表示クリア*/ mode = 0; break; } } lcd.setCursor(0, 1); if( mode == 1 ) lcd.print((double)(millis() - passed_time) / 1000.0); /*0.1秒単位で出力*/ else if( mode == 2 ) lcd.print((double)(latest_time - passed_time) / 1000.0); /*計測完了*/ else lcd.print(0.0); /*表示を0に戻す*/ if( --ignore_time <= 0 ) ignore_time = 0; /*スイッチを無視する時間の更新と上限*/ delay( 50 ); /*表示更新時間*/ }
ITRONプログラミング入門―H8マイコンとHOSで始める組み込み開発
- 作者: 濱原 和明
- 出版社/メーカー: オーム社
- 発売日: 2005/04/25
- メディア: 単行本
大人の科学マガジン Vol.27(8ビットマイコン) (Gakken Mook)
- 作者: 大人の科学マガジン編集部
- 出版社/メーカー: 学習研究社
- 発売日: 2010/05/12
- メディア: ムック
Prototyping Lab ―「作りながら考える」ためのArduino実践レシピ
- 作者: 小林 茂
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/05/27
- メディア: 大型本
Maruduinoの基本パーツの組み立て2 [組み立て]
ITRONプログラミング入門―H8マイコンとHOSで始める組み込み開発
- 作者: 濱原 和明
- 出版社/メーカー: オーム社
- 発売日: 2005/04/25
- メディア: 単行本
Prototyping Lab ―「作りながら考える」ためのArduino実践レシピ
- 作者: 小林 茂
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/05/27
- メディア: 大型本
武蔵野電波のブレッドボーダーズ―誰でも作れる!遊べる電子工作
- 作者: スタパ齋藤
- 出版社/メーカー: オーム社
- 発売日: 2009/11
- メディア: 単行本
Maruduinoの基本パーツの組み立て1 [組み立て]
と、その前に、、、Maruduinoのパーツリストとかご覧いただければ判りますが、やたら部品が多い。フル実装だと私でも半日位は掛かってしまいます。
これはしんどいので、できれば必要な時に必要なだけ実装する事をお勧めします。
では、第一目標としてお約束のDIGITAL13のLEDチカチカから。
ITRONプログラミング入門―H8マイコンとHOSで始める組み込み開発
- 作者: 濱原 和明
- 出版社/メーカー: オーム社
- 発売日: 2005/04/25
- メディア: 単行本
Prototyping Lab ―「作りながら考える」ためのArduino実践レシピ
- 作者: 小林 茂
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/05/27
- メディア: 大型本
工具紹介 [ツール]
まず半田は0.6mmの鉛入り半田を使っています。細い半田の方が適切な量で済む事と、鏝先の温度を下げずに済みますので、1mm位の太い奴を使って悩んでいる人にはお勧めです。なお鉛の件ですが、ヨーロッパに輸出でもしない限り、個人の電子工作の範囲なら特に鉛フリーに拘る理由は無いでしょう。 今回はヘルパーハンドは使っていませんが、あると色々と便利です。 写真には写っていませんが、細身のプラスドライバーが必要です。 |
|
ちょっと拘りたい工具の一つがピンセットです。写真はHOZANのP-892です。肉厚があり、腰が強くて、しっかりと掴む事ができます。チップ部品のつまみも容易です。 | |
半田ごてはそれ程拘っていません。近所のホームセンターで買ってきた白光のN454です。 | |
ただし半田ごての鏝先は交換しています。N-454-T-2Cです。標準の円錐形の鏝先は使い難いですから。
基本的に、短時間で必要なところを十分加熱する必要があります。円錐形の鏝先では点、または線でしか接触できませんので、暖め方に斑が発生し、部分的に加熱してよい温度を超えてしまったりします。 写真を見れば判る様に、この鏝先は面で接触させる事が可能で、より効率的に熱を対象に伝える事が可能です。結果、均一に素早く暖める事が可能で、半田付けの能率も上がります。 |
|
おまけ 工具ではありませんが配線用に、ジャンプワイヤーの代わりにこの単芯線を使っています。今までは拠線の被覆を向いて予備半田して利用していましたが、これは被覆を向くだけでそのまま利用できるのでとても便利です。 専用のジャンプワイヤーも便利なのですが、どうしても配線長が余り気味で、それがイマイチ美観が良くないので、最低限の長さに調整できるこちらの方が、やっていて気持ちが良いです。 |
大人の科学マガジン Vol.27(8ビットマイコン) (Gakken Mook)
- 作者: 大人の科学マガジン編集部
- 出版社/メーカー: 学習研究社
- 発売日: 2010/05/12
- メディア: ムック
Prototyping Lab ―「作りながら考える」ためのArduino実践レシピ
- 作者: 小林 茂
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/05/27
- メディア: 大型本
超音波距離計の製作2 [アプリケーション]
作成した基板の表側?です。スピーカー、マイク、LEDがこちらを見ています。
裏側です。リード部品を所狭しと搭載しています。スピーカーと反対側にこれらの部品を実装したからなんとか収まった様なものです。
実際にブレッドボード上でプロトタイピングしたので大体は上手く動くのですが、基板化する事により発生した問題なんてのもあります。
ブレッドボード上にスピーカーを載せた時は、スピーカーの固定はゆるゆるです。あの穴にズボっと挿すだけですから。
ところが基板上に半田付けしてしまうとかなりかっちり固定される事となります。
超音波を発している時間は極短い時間ですし、周波数も40KHzと可聴領域の遥か上です。それなのに、なにやら音がポツッ!、ポツッ!と聞こえてきます。
そうです、どうも超音波を駆動した時、スピーカー自身がそのショックで振動してしまうようです。この振動が剛性のある基板を経由してマイク側に伝わるものですから、受信側は大変な事になってしまいます。
※耳にはっきりと聞き取れる位の音なので、可聴領域の周波数だとしても、その振動の継続時間がかなり長くなっていると思われ、これがゲート時間を超えています。
対策は色々あると思いますが、最も良いのはスピーカー側の固定をフローティングする事でしょう。但し機構的に難しいので妥協として出力レベルを押さえる事とします。
ADM3202の出力には最低300Ωの抵抗が入っています。これは短絡に対する保護だと思われますが、出力抵抗が300Ωだと考えれば、抵抗で分圧する事でスピーカーの入力を小さくできます。
今は240Ωの抵抗をスピーカーの2つの端子間に入れています。これだと2m弱位の測定距離となる様です。
まあ、まだまだカットアンドトライが必要みたいですが、一応完成と言う事で。
Prototyping Lab ―「作りながら考える」ためのArduino実践レシピ
- 作者: 小林 茂
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/05/27
- メディア: 大型本
Making Things Talk ―Arduinoで作る「会話」するモノたち
- 作者: Tom Igoe
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/11/17
- メディア: 大型本
大人の科学マガジン Vol.27(8ビットマイコン) (Gakken Mook)
- 作者: 大人の科学マガジン編集部
- 出版社/メーカー: 学習研究社
- 発売日: 2010/05/12
- メディア: ムック