初めての Arduino 入門 (中編)

生まれて初めて勉強してみる。目指せ、鉄道模型の自動制御システム!(^_^)
4
戸田プロダクション @TodaProduction

Specification for LCD Module 1602A-1 (V1.2) openhacks.com/uploadsproduct… 早速パーツ裏面の型番でググってデータシートらしきもの?を探してみた。このLCDモジュール、元はと言えば日立の HD44780 というLCDコントローラの互換品らしい。本家 HD44780 の解説はこれ ↓。 en.wikipedia.org/wiki/Hitachi_H…

2018-12-02 20:08:07
戸田プロダクション @TodaProduction

英語じゃ難しいので日本語ページもググりまくり、片っ端からザっと目を通した。 SC1602 LCDモジュール (HD44780コンパチブル) の使い方 http://219.117.208.26/~saka/ham/LCD2/ Arduino を用いてLCDに文字を表示 iot.keicode.com/arduino/arduin… 1602A I2C アダプターの利用 iot.keicode.com/arduino/arduin…

2018-12-02 20:09:03
戸田プロダクション @TodaProduction

ようやく 1.接続方式には8ビット、4ビット、I2C利用、などなど色々とある。 2.ゴリゴリとデータライトする時は、その都度「待ち時間」が重要そう。 3.LiquidCrystal というライブラリがあり、それを使えばラクが出来そう。 とボンヤリ判った。まずは8ビットのゴリゴリから試してみる。

2018-12-02 20:09:46
戸田プロダクション @TodaProduction

今日の Fritzing 絵はこれ。コマンド及びデータの信号線として8本、データ受け渡し制御の信号線として3本のデジタルIOピンを使う。あと電源が5Vと3.3Vの2本、GND で3本ピンを使うから、結局1602LCDのピン16本が全部 Arduino に繋がれた格好になった。なんとなく、理屈だけは判る。 pic.twitter.com/zDJuOjiSVq

2018-12-02 20:12:01
拡大
戸田プロダクション @TodaProduction

早速実行してみた結果がこの動画。結構キレイだなー。ひとつの文字は5×7ドットか。教本のサンプルスケッチにある「I am hongyi (ホンギュイ?)」って誰だろう? the admin らしいが、ひょっとして keyestudio の社長さんか? pic.twitter.com/9XWUvRQD51

2018-12-02 20:15:23
戸田プロダクション @TodaProduction

カナ文字も表示可能らしいが、試したら文字化けしたりしなかったりする。正しく表示させるためには、すべてのカナ文字をいちいち文字コードで指定しなきゃ駄目みたいだ。制御コマンドは複雑怪奇だし、出力文字の次に必ず「_」が表示される理由も判らん。こりゃ一筋縄ではいかんな。続きはまた明日。 pic.twitter.com/8RvPcvO5Ce

2018-12-02 20:17:02
拡大
戸田プロダクション @TodaProduction

本日の Arduino - Project 20: 1602 LCD (2) 教本に従い次の「4ビットモード/LiquidCrystal」を試す前に、番外編で昨日の8ビットモードのデータ転送を 74HC595 経由でやってみることにした。見事!自分で考えた通りの文字出力に成功した。この改造で Arduino 側の出力ピンを5本減らせた。 pic.twitter.com/6KX0S1LNGy

2018-12-03 09:51:30
拡大
戸田プロダクション @TodaProduction

改造した回路の Fritzing 絵はこれ。1602A の D0~D7 を 74HC595 の QA~QH に繋ぐだけ。74HC595 への電源供給はブレットボード上の5Vを流用した。厳密には電流とか気にすべきだろうが、74HC595 に必要な電流は微弱らしいから問題なかろう…という判断。なんたって出力ピン5本減らせるのは魅力的。 pic.twitter.com/BdAnZJc3aA

2018-12-03 09:54:33
拡大
戸田プロダクション @TodaProduction

データ書き込み部分のスケッチはこれ。教本スケッチの LcdCommandWrite と LcdDataWrite を 74HC595 経由で行なうよう一本化した。最初に8ビットデータだけ shiftOut しておき、DI と RW を出力したのち残りを一気にラッチして遅延を防いだつもり。効果のほどは判らんが、期待通りに動いて良かった。 pic.twitter.com/rBnud0ceTU

2018-12-03 09:58:20
拡大
戸田プロダクション @TodaProduction

本日の Arduino - Project 20: 1602 LCD (3) いよいよ「4ビットモード/LiquidCrystal」の実験。Arduino からのワイヤは全部で11本。密かに前回試した「8ビットモード/74HC595」の方が1本少ないはずだ… (勝ったw) と思っていたが、教本では 1602A の RW ピンが GND に落ちていた (^_^;)。 pic.twitter.com/bRWYMxGyxz

2018-12-03 14:07:04
拡大
戸田プロダクション @TodaProduction

さすがにスケッチ書くのは圧倒的にラク。4ビット転送と意識せず、単純に文字列出力に専念出来るのはとても有り難い。豊富なメソッド?も片っ端から試したが、慣れないせいであまり使いこなせなかった。結局このコードではハート?マークを外字設定してみただけ。出力時の文字列連結は出来ないのかな? pic.twitter.com/rOeqD2xSdM

2018-12-03 14:08:44
拡大
戸田プロダクション @TodaProduction

最終的な実験動画。今まで Arduino 内部のモニタはシリアル出力に頼ることしか出来なかったが、自分でも一応こんな上等な表示デバイスが使えるようになったので嬉しい (^_^)。ここまで来たら、この状態からさらに 74HC595 を使って Arduino からの出力ピン数を減らしたいが、それは今後の課題とする。 pic.twitter.com/SNOqw10nKS

2018-12-03 14:11:08
戸田プロダクション @TodaProduction

本日の Arduino - Project 20: 1602 LCD (4) fmalpartida / New LiquidCrystal / wiki / Home - Bitbucket bitbucket.org/fmalpartida/ne… シフトレジスタ 74HC595 を使って 1602A を制御する方法を調べていたら、大変興味深いサイトを見つけた。どうやら LiquidCrystal の上位互換ライブラリみたいだ。 pic.twitter.com/DCFY5mkqxp

2018-12-04 15:28:20
拡大
戸田プロダクション @TodaProduction

この NewLiquidCrystal は 1602A を繋ぐ方法として4ビット/8ビットパラレル接続、I2C接続、シフトレジスタ接続、その他接続など、さまざまな接続方式をサポートしているらしい。あいにく購入した学習キットにはI2Cは入ってなかったが、このライブラリを使えばシフトレジスタ接続が使えそう。

2018-12-04 15:29:32
戸田プロダクション @TodaProduction

シフトレジスタ接続では Arduino 側の信号線は3本で済み、さらに抵抗やコンデンサを追加するトリッキーな?方法を使えば、信号線を2本もしくは1本 (!) にまで減らすことすら可能らしい。俄然嬉しくなって必死でサイトを読み込み、とりあえず 74HC595 で使える「信号線3本方式」を試すことにした。

2018-12-04 15:30:30
戸田プロダクション @TodaProduction

サイトの中で指示された 1602A と 74HC595 の接続図。Arduino 側の信号線は Enable, Data, Clock の3本だけ。さらに信号線を減らす時は Enable/Data を共有したり、Enable/Data/Clock すべてを共有したりするみたいだ。なんでそんなことが可能なのか?ゲルマ坊やにはちょっと理解出来そうにないけど。 pic.twitter.com/0aZKIB3YDU

2018-12-04 15:34:12
拡大
戸田プロダクション @TodaProduction

とにかく言われた通りにやってみる。74HC595 のピン配置図と、先ほどの接続図とを何度も見比べながら Fritzing で描いた実体配線図がこれ。確かに Arduino 側の信号線は3本だ (黄色のワイヤ)。ここまでくれば、あとはライブラリの NewLiquidCrystal がやってくれる…と言うのだから有り難いお話だ。 pic.twitter.com/rC1vpPOOaF

2018-12-04 15:35:47
拡大
戸田プロダクション @TodaProduction

テストに用いたスケッチはこれ。LCD.h と LiquidCrystal_SR.h をインクルードしたあと、LiquidCrystal_SR のインスタンスを生成するだけ。あとは標準の LiquidCrystal メソッド?がそのまま使える。上位互換ライブラリゆえ、使い勝手の違和感は全然ない。こっちの方を常用ライブラリにしても良いかも? pic.twitter.com/i0mR1kzzBd

2018-12-04 15:36:43
拡大
戸田プロダクション @TodaProduction

実行させてみたら、シフトレジスタ 74HC595 を併用して見事に3本の信号線で 1602A に文字列を表示することが出来た! 当分の間、LCD制御はこの3線式で十分じゃないか? 学習キットにI2Cが入っていればそれを試すところだが、それよりシフトレジスタ 74LS164N を使う2線式を試したい気もする。 pic.twitter.com/LT6kXLcaPk

2018-12-04 15:48:53
拡大
戸田プロダクション @TodaProduction

ここ3日間で実験した 1602A の制御回路 1.教本8ビット接続 2.改造8ビットシフトレジスタ接続 3.教本4ビット接続 (LiquidCrystal 利用) 4.シフトレジスタ3ワイヤ接続 (NewLiquidCrystal 利用) 色々な方法があって面白かったなー (^_^)。本当に相当な勉強になったと思う。 pic.twitter.com/NnIV3gln8g

2018-12-04 16:18:43
拡大
戸田プロダクション @TodaProduction

本日の Arduino - Project 21: 9g Servo Control (1) wiki.keyestudio.com/index.php/Ks00… ついに Arduino でサーボモータを回す日がやってきた!(^_^) 学習キット同梱サーボは keyestudio 製ロゴシールが貼られた「MICRO SERVO 9G」という品だった。手に取ると意外と小さい。ちなみに左は昭和64年の1円玉。 pic.twitter.com/ucLuajruqA

2018-12-05 21:55:04
拡大
戸田プロダクション @TodaProduction

たぶんこれ、秋月電子で1個400円で売られている「SG-90」というサーボモータと同じ品物だろうと思う。大きさや重さ、教本に載ってる主要諸元なんかがSG-90とそっくりだ。SG-90のデータシートを貼っておく (↓)。 akizukidenshi.com/download/ds/to…

2018-12-05 21:56:36
戸田プロダクション @TodaProduction

世の中には鉄道模型のポイント制御などを Arduino とサーボモータでやってる人たちがたくさんいて、自分も数年前からそんな人たちのサイトやブログをたくさん拝見しているから、今日の実験は非常に興味深い。以前から是非試したかったこともあるので、早速教本のスケッチを打ち込むところから始めた。

2018-12-05 21:58:26
戸田プロダクション @TodaProduction

まずは教本通りPWMのパルス幅を自分で作ってサーボに与える方法、次いでこれまた教本通り標準ライブラリ Servo を用いて制御する方法、もちろんあれこれググりまくって片っ端から試してもみて、結局今日は終日おびただしい分量のコードを試した。最後はどれがどれだか?収拾がつかなくなるほど。 pic.twitter.com/kGdipFdQRD

2018-12-05 22:01:23
拡大
戸田プロダクション @TodaProduction

色々やって今日なるほどと理解したこと。 1.自分でパルス幅を作ってサーボに与える時は、移動角度を最小パルス幅と最大パルス幅の間の相当量に比例させて変換すれば良い。 2.delayMicroseconds は最大 16383μS しか待てないので、それ以上待つ時は1万μS と 残りμSの2回に分けて待つ必要がある。 pic.twitter.com/ME2YGu2Ih1

2018-12-05 22:06:48
拡大