Arduinoでラリコン作る話(2)→ATtiny44でラリコン作る話(2)

Arduino UNOGPS使った簡易ラリコンを作った話を「Arduinoでラリコン作る話」としてまとめようと思っていたんですが、ATtiny44が来ちゃったのでこっちに載せ替えることにしました。

ほら、現在進行系でハマってるほうが楽しいでしょ?

構成要素と方針

基本同じです(ATtiny44+GPSモジュール+LCD1602+スイッチボード)。
ただ、Arduino UNOよりGPIOが少ないので、LCDはI2Cで制御してみます(今回)。
しかし、ここにGPSのソフトウェアシリアルとかタイマー割り込みかけると結構CPU負荷高そうだけど大丈夫かな・・・ もしダメそうなら、またその時に対応考えます(泥縄式)

ちなみに、それぞれCPUの違いなどはこのページが詳しいです↓
Arduinoで作った回路の小型化(Arduino互換機の製作)(10) - しなぷすのハード製作記

まずはArduino UNOでLCD1602を動かしてみる

これまでは4bitパラレルで接続して表示させていたので、I2Cで動かすのは初めてです。 とりあえず、Arduino UNOを使って、ちゃんと動作するか確認します。
ライブラリは"liquidcrystal-i2c"を使います。
普通にIDEの スケッチ|ライブラリをインクルード|ライブラリを管理 からインストールしてやればOK。 www.arduino.cc

ソースは適当に拾ってコピペします(苦笑)

#include <LiquidCrystal_I2C.h>

// I2C address 0x27 16x2
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
  lcd.init();
  lcd.backlight();
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Hello world");
  lcd.setCursor(0, 1);
  // キョウハイイテンキ
  lcd.print("\xb7\xae\xb3\xca\xb2\xb2\xc3\xdd\xb7");
}

void loop() {
}

Arduino UNOとの接続ですが、

  • SDA→A4
  • SCL→A5

としてあげれば良いようです(D4/D5ではありません!チューイせよ)

接続したらスケッチをコンパイルしてアップロード

動いた!

簡単ですね!
ライブラリがいろいろ揃っていると本当に楽です。

はい!次行ってみよー!(cv.いかりや長介)

ATtiny44でもLCD1602を動かしてみる

さて本日のメインイベント
ネット見てみたんですが、あんまりATtiny44でLCD1602動かしたみたいなページないんですよね・・・

ということはアレだ、むっちゃ簡単むっちゃ難しい2択だ!
多分むっちゃ簡単なんだろう(←楽観的)

まず配線ですが、ATtiny44の場合、

  • SDA→PA6
  • SCL→PA4

となっているようです(ピン配置などはここにデータシートがありますぶん投げ)。

スケッチの書き込みにはさっきのArduino UNOを使うので、ごちゃごちゃ配線する前にArduinoISPを書き込んでおかないと・・・ほらさっき試しにUNOで1602動かしたでしょ?
忘れるとハマりますよ!ハマるからね!ほらハマった!

配線は次のようにしました↓

UNOにArduinoISPを書いてから配線ヨシッ!

で、ソースはどうなんだろう・・・
なんか、このままコンパイルしたら動く気がする・・・ ていうか、きっと動く!
ライブラリの中の人が設定とかいい感じにしてくれるに違いない!

じゃ、そのままコンパイル・・・の前に、ボードの設定をUNOからATtiny44にしないと・・・
忘れるとハマ(以下略)

こんな設定ですな。

じゃあコンパイルしてアップロード(「書き込み装置を使って書き込む」)。

動いた!
SUGEEEEEEEEEE!!!
ほんとに動いた!

これ何気なく動いてますが、割りとスゴいことなんでは?
上位CPUのスケッチをコンパイルし直すだけで動かせるなんて・・・

本当にプロトタイピングに向いているんだな!Arduinoは!(富野話法)

次どうする?

今回表示が動いたので、最低限の情報が確認できるようになりました。
となればGPSモジュールを動かしてみるのになんの躊躇(ちゅうちょ)がありましょうか、いやない(反語)

ていうか、ソフトウェアシリアルがI2Cとバッティングしないのか?ちょっと心配^^;(←キモい絵文字)