Arduinoでラリコン作る話(4)~ ATmega328Pに出戻った

<<前回のあらすじ>>
ATtiny44でラリコン作り出した気球人
そこにメモリ不足という魔の手が襲いかかる
最終兵器ATtiny85を取りだして見たものの、今度は速度不足という新たな敵が!

どうする、気球人!?
次回も(秋月に)サービスサービス!


三小スタンプ

詳しくは ↓ kikyujin.hatenablog.com

なんて引っ張ってみましたが

結局のところはTOKYO GAME SHOW 2022の帰りに秋葉原行ってATmega328Pを買ってきました^^;

ついでに2ピンのタクトスイッチもいっぱい買った

それにしても28ピンも必要ないんだけど。
まあUARTもI2Cも使えるし、値段も比較的安いですが・・・
akizukidenshi.com

しかしコスパで言うとPICのほうが良くないか?
akizukidenshi.com こんなんでいいじゃんよ

などと疑念もいだきつつ、とりあえずPICはまたいつか勉強することにしておいて、作業進行させようと思います(いつかって)

Arduino UNOを使ったATmega328Pへの書き込み

とりあえずはArduino UNOからスケッチを書き込まねばならぬ。

Arduino UNOもCPUはATmega328Pだから、スケッチ書いたそばからCPU外せばいいんじゃね?とも思うんですが、それではソケットがクタクタになりそうだし、そもそも俺のArduino UNOは互換品だからCPUがDIPじゃないんですよ。

Atmega 328P-AUというらしい(基板上◆部分)

ついでに言うと私はケチなので外部クロックは使わず内部クロックで動作させたい。

いろいろ調べてみたら本家ページこのあたりつなぎ方は載っていたので、そちらを参考にしつつ、ボードマネージャーのほうは同ページにあるリンクからbreadboard-1-6-x.zipをダウンロードして展開した得たフォルダを、hardwareフォルダに突っ込んでおけば、ATmega328Pの内部クロックを使ったボードを選択できるようになります。

なんかコンパイルする時にwarning出ますが、気にしなーい
そもそもIDEバージョン1.8だしな。

ついでにLチカも組んどく

つなぎ方はこちら↓

普通にスケッチ例にある「blink」が動きます。 youtube.com Lチカ、ヨシ!

さくさく移行

ATtiny44で動かしたI2CのLCDですが、とりあえずArduino UNOで動かした実績あるパラレル方式に変更します。 合わせてSoftwareSerialのテストまで進めます。


はいはい表示できたできた。


はいはいエコーバックエコーバック

書き込み部分を除いた回路はこちら↓ ※書き込み部分があっても動作します。

スケッチはこちら↓

#include <LiquidCrystal.h>
#include <SoftwareSerial.h>

// LCD ←→ Arduinoのピンの割り当て
// rs      →   D7
// rw      →   GND
// enable  →   D8
// d4      →   D9
// d5      →   D10
// d6      →   D11
// d7      →   D12
 // [構文]LiquidCrystal(rs, rw,  enable, d0, d1, d2, d3, d4, d5, d6, d7)
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

// RX - D5
// TX - D6
SoftwareSerial ss(5, 6);

void setup() {
  // debug serial
  ss.begin(9600);
  ss.print(F("Good morning!\r\n"));

  // LCD init
  lcd.begin(16, 2);          // LCDの桁数と行数を指定する(16桁2行)
  lcd.clear();               // LCD画面をクリア
  lcd.setCursor(0, 0);
  lcd.print("Hello world");
  lcd.setCursor(0, 1);
  // キョウハイイテンキ
  lcd.print(F("\xb7\xae\xb3\xca\xb2\xb2\xc3\xdd\xb7"));
}

void loop() {
  while (ss.available() > 0) {
    // echo back
    char c = ss.read();
    ss.write(c);
  }
}

D9-D12は実装の具合によっては逆順にしたほうが良いかもしれないなあ・・・
試作1号機Arduino UNOに対してLCDの実装が90度ひねられていたのでこれで良かったのですが🤔

さて次は

HW的にはArduino UNOとほぼ等価になるので、一旦はラリコン試作1号をそっくり移植してしまおうと思っています。 いくつか課題がありまして

  • 今回はケースに入れたいので、基板の大きさとかスイッチをどうすれば良いのか調査
  • 距離誤差の原因を確定するため、TinyGPSfloat演算自分ライブラリに代替

このあたり解決したいと思っとります。

やっと本筋に戻ってきた・・・^^;