みんな電子工作初体験
流行っていますね、IoT。nanapiでも興味をもつメンバーが増えておりArduinoやRasberry PiでLEDをチカチカさせて遊んでいます。
でもそれだけじゃもったいない。よりIoT方向にできるることをふやすべく、nanapi IoT部として有志で部活動的なワークショップを行っています。完全に初心者の状態から、自力で調べながらプロトタイピングできるレベルになるのが目的のワークショップです。
メンバーのスキルレベルは「興味はあるけど電子工作したことも無いし、半田ごても持っていない」という程度。ほとんどのメンバーが今回のワークショップにあたり工具をゼロから揃えました。私も電子工作は趣味程度で、体系的に勉強した事はありません。なので間違いなどもあるかもしれませんのでご了承のほど。
このエントリでは第1回目のワークショップの内容をご紹介します。
ArduinoでキャラクタLCDという表示デバイスを制御するのが今回のワークショップのゴールです。内容はArduino公式サイトのチュートリアルページと同様で、入手したパーツに合わせて若干のアレンジを加えています。
予備知識
はじめにLCDについて少し調べてみましょう。
- LCDの制御方式には規格があり、ルネサステクノロジ社のHD44780というLCDコントローラの制御方式がデファクトスタンダード
- Arduinoにもこの規格に準じたライブラリがある
- パラレル接続で4bitモードと8bitモードがある
ということで、今回はHD44780互換のキャラクタLCDを入手して4bitモードで制御します。
4bitと8bitの違いは転送速度。今回は結線本数の少ない4bitで接続します。少ないとは言え2本の制御線(RS,E)と4本のデータ線(DB4-7)の合計6本+電源線が必要です。
使った部品
Arduinoとブレッドボードの他に下記のパーツを利用しました。
データシートって何を見ればいいの?
LCDには1枚紙のデータシートが入っています。色んな仕様が細かに記されていますが、その中でも重要なのがElectrical Charasteristics
とInterface Pin Connections
です。それ以外は寸法やプロトコルの仕様や文字コード表などが記されていますが、今回は気にしなくても大丈夫です。
Electrical Charasteristics
電気的な仕様について示されている諸元表です。とくに大切そうな部分を抜き取ると…
Suplly Voltage: 4.7V〜5.3V
Input Voltage: 2.2V〜Vdd
LCDの電源はArduinoの5V出力をそのまま繋げればOKで、信号線もArduinoのデジタル出力にそのまま繋げば大丈夫ということがわかります。
Interface Pin Connections
どのピンがどの信号に対応するのか(ピンアサイン)が示された表です。
液晶裏面の右側にある14個の穴が上記表の信号に対応しています。
完成形をイメージしよう
作業の前にデータシートのピンアサインを見ながら接続方法を確認し、完成イメージをふくらませましょう。
LCDのピン番号 | 機能 | 制作例でのケーブル色 | |
---|---|---|---|
1 | Vdd(電源) | Arduinoの5V出力へ | ■ 赤 |
2 | Vss(電源) | ArduinoのGNDへ | ■ 黒 |
3 | V0(コントラスト調整) | Vdd-Vssに接続された可変抵抗へ | ■ 黄 |
4 | RS(制御線) | Arduinoのデジタル出力へ | ■ 緑 |
5 | R/W(制御線) | GND(LCDの2番ピン)に接続 | ジャンパ線で接続(端材をつかう) |
6 | E(制御線) | Arduinoのデジタル出力へ | ■ 白 |
7 | DB0(データ線) | 今回は使わない(8bitモード時に利用) | |
8 | DB1(データ線) | 今回は使わない(8bitモード時に利用) | |
9 | DB2(データ線) | 今回は使わない(8bitモード時に利用) | |
10 | DB3(データ線) | 今回は使わない(8bitモード時に利用) | |
11 | DB4(データ線) | Arduinoのデジタル出力へ | ■ 青 |
12 | DB5(データ線) | Arduinoのデジタル出力へ | ■ 青 |
13 | DB6(データ線) | Arduinoのデジタル出力へ | ■ 青 |
14 | DB7(データ線) | Arduinoのデジタル出力へ | ■ 青 |
下図はArduinoとの接続イメージです。LCDのピン数やレイアウトが違いますが、なんとなくイメージできますね。Fritzingを使うとこんな図が簡単に作れます。
実際に組み立てよう
1. LCDのバックライトを有効にする
このLCDにはバックライトが付いていますが、初期状態では点灯しない設定になっています。そこでデータシートを参考に設定を変更しましょう。 J3
という2つに分かれたランド(金属が露出している部分)を接続して、 R9
に100Ωの抵抗を接続すれば完了。初期状態ではわざと断線させてあるので、そこを接続するのですね。
ちなみにJやRなどのアルファベットは ジャンパ(Jumper) と 抵抗(Registance) の意味。
2. ケーブルをハンダ付けする
ピンアサインを参考にしながらハンダ付けします。裏を見たり表を見たりしているとピンの位置を間違えがちなので注意しよう。
ハンダ付けのポイント
ハンダは多すぎても少なすぎても良くありません。横から見た時に富士山のような形になっているのが理想的。
そして裏面までハンダがまわるようにしっかりとハンダ付けしましょう。電気的にしっかり接続されるだけでなく、多少引っ張られたとしても外れにくくなります。
ハンダは熱い方へ流れるので、ランドとワイヤをきちんと熱してからハンダを供給するのがコツ。
ハンダ付けの様子はこの動画(YouTube)が参考になります。
3. ピンヘッダの接続
ブレッドボードに挿しやすいようにワイヤーにピンヘッダをハンダ付けします。熱収縮チューブで接続部を絶縁するのを忘れずに。熱収縮チューブはハンダ付け前にワイヤーに入れておかないと付けられなくなるので注意。(←よくやるミスです)
写真は透明な収縮チューブの作例と、黒の収縮チューブの作例。今回つくったのは黒の方。
4. 組み立て
今回はArduino Microで組み立てました。半固定抵抗は液晶のコントラスト調整用です。完成後に電源を入れて液晶の様子を見ながらドライバなどでやさしく回しましょう。
5. テスト
早くコンピュータに繋ぎたいところですが、ぐっと堪えてテストをしましょう。テスターを使ってショートや断線などが無いか確認します。
回路に問題が無ければいよいよ初通電です。
6. Arduinoにスケッチを書き込む
スケッチを書いて転送します。下記1-6行目のピン番号は配線したArduinoのピン番号にあわせて調整してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#define E_PIN 8 #define DB4_PIN 9 #define DB5_PIN 10 #define DB6_PIN 11 #define DB7_PIN 12 #include <LiquidCrystal.h>; LiquidCrystal lcd(RS_PIN, E_PIN, DB4_PIN, DB5_PIN, DB6_PIN, DB7_PIN); void setup() { lcd.begin(16, 2); lcd.print("hello, world!"); } void loop() { lcd.setCursor(0, 1); lcd.print(millis()/1000); } |
7. 完成!
きちんと動きましたか?
nanapiのワークショップでは一発で動いたメンバーはほとんど居ませんでしたが、トラブルシュートの後みな無事に動作しました。
LCDはちょっとした動作確認用として最適な出力デバイスなので、今後の工作にも役立ちますね。
次回ワークショップでは増幅回路を組んでセンサーからの微細信号を読み取ろうと計画中です。お楽しみに!
追記:LCDのピン番号とケーブル色の対応表の誤記を訂正しました(2014/11/21)