M.C.P.C. (Mamesibori Creation Plus Communication)

印刷屋から五反田のWeb屋に転職したCLのブログです。

LED18チカをArduino Uno→Pro Mini→ATmega328で作る

みんなArduinoのことを「高い、高い!」と言うのだけれども、Arduinoでの開発の目標をATmega328で作ることにすると安くなるよー、ていうのをやります。

Arduino Unoによる18LEDチカ

現在標準的なArduinoとされているArduino Unoで18個のLEDによるLチカをします。

部品リスト

価格は執筆時点での価格です。基本的に秋月電子通商信販売で購入できるパーツを選定しています(送料に注意)。大田区から秋葉原に行くと運賃が送料よりも高くなるのでビバ通販、ヤマト運輸バンザイです!

部品名 価格(税込)
ブレッドボード EIC-102J ジャンプワイヤー付 600
ブレッドボード・ジャンパーコード(オス-オス)セット 220
ブレッドボード用マイクロBメスUSBコネクタDIP化キット 200
USBケーブル Aオス-マイクロBオス 1.5m A-microB 120
カーボン抵抗(炭素皮膜抵抗) 1/4W 470Ω (100本入) 100
小型赤色LED BR2222S(200個入) 200
Arduino Uno Rev3 2,940
------------- ----
4,380

akizukidenshi-ogp-injector.dtpwiki.jp

akizukidenshi-ogp-injector.dtpwiki.jp

akizukidenshi-ogp-injector.dtpwiki.jp

akizukidenshi-ogp-injector.dtpwiki.jp

akizukidenshi-ogp-injector.dtpwiki.jp

akizukidenshi-ogp-injector.dtpwiki.jp

プログラム

const int pins[] = {
   0,  1,  2,  3,  4,  5,  6,
   7,  8,  9, 10, 11, 12, 13,
  A0, A1, A2, A3,
};
  
void setup() {
  for ( int i = 0; i < 18; i++ ) {
    pinMode( pins[i], OUTPUT);
  }
}

void loop() {
  for ( int i = 0; i < 18; i++ ) {
    digitalWrite( pins[i], HIGH);
    delay(100);
  }
  for ( int i = 0; i < 18; i++ ) {
    digitalWrite( pins[i], LOW);
    delay(100);
  }
}

ブレッドボード上での実体配線図

この配線では、電源はブレッドボードに配置してあるMicroUSBから取り、Arduino側には電源をつなぎません。Arduinoの5VピンにUSBのVBUS(5V)、GNDピンにUSBのGNDをつなげてあげることで、Arduinoが動きます。

Arduinoへプログラムを転送する場合は、安全のためブレッドボード側のUSBケーブルはいったん外しましょう。

プログラムを転送してLチカが確認できたら、ArduinoのUSBケーブルを外し、ブレッドボード側のMicroUSBコネクタに電源を供給し、PCが無くてもLチカが動くことを確認できればOKです。

f:id:C_L:20150315010919p:plain

作例

Arduino Unoは持っておらず、その前のバージョンのArudino Duemilanoveで作例となります。

Arduino UnoをArduino Pro Miniに置き換えて18LEDチカ

ブレッドボード上でプロトタイピング(試作品を作ること)するためのArduino Pro Miniで、実際にブレッドボード上でプロトタイピングしてみました。

Arduino Pro Miniは、Arduino Unoなどで使われているMCU、ATmega328の表面実装タイプが使われており、標準的なArduinoで作られたアプリケーションのArduino部分を置き換える用途に最適です。

Arduino Pro Mini 328 5V 16MHz

Arduino Pro Mini 328 5V 16MHz

ただし、小型化するために、PCとのUSB通信を担う部分はオミットされていますので、試作中は、別途FTDI USBシリアル変換アダプターなどを使って、プログラムを転送する必要があります。

FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き)

FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き)

アプリケーションとして完成してしまえば、通信アダプターの部分を取り外して、そのまま実用使用してもよいです。

部品リスト

価格は執筆時点での価格です。なお、秋月電子には純正のArduino Pro Mini 5Vが売っていなかったので、スイッチサイエンスからの調達となります。

部品名 価格(税込)
ブレッドボード EIC-102J ジャンプワイヤー付 600
ブレッドボード・ジャンパーコード(オス-オス)セット 220
ブレッドボード用マイクロBメスUSBコネクタDIP化キット 200
USBケーブル Aオス-マイクロBオス 1.5m A-microB 120
カーボン抵抗(炭素皮膜抵抗) 1/4W 470Ω (100本入) 100
小型赤色LED BR2222S(200個入) 200
Arduino Pro Mini 328 5V 16MHz 1,243
FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き) 1,512
------------- ----
4,195

ブレッドボード上での実体配線図

f:id:C_L:20150314200432p:plain

作例

Arduino Pro MiniをATmega328に置き換えて18LEDチカ

Arduinoを使った工作の最終目標の一つとして、ArduinoをATmega328に置き換えてしまうというものがあります。だって、みんな「高い、高い」と言っているArduinoですが、工作ごとに3,000円ぐらいするArduino製品を組み込んでいたら、そりゃあ高いですよね。一方、ArduinoではなくてATmega328を使えば、250円で済んじゃいます。

なお、Pro MiniからATmega328に置き換える場合は、GPIO11ピンから13ピン(SPIで使うピン)の位置が同じ位置になるように置き換えると置き換えがしやすいです。

プログラムの書き込みについて

ATmega328をArduino化してプログラムを書き込む方法は複数ありますが、別のArduinoに書き込み用プログラムを書き込んで、それを使ってATmega328に書き込む方法もあります。

「びんぼうでいいの」に生AVRマイコンを載せたままArduino化(ICSP) - M.C.P.C. (Mamesibori Creation Plus Communication)

なお、ATmega328のArduino化する場合、「8MHz(内部RC発振)」というモードで書き込むと、余計なパーツが必要なくなるのでお勧めです。

部品表

部品名 価格(税込)
ブレッドボード EIC-102J ジャンプワイヤー付 600
ブレッドボード・ジャンパーコード(オス-オス)セット 220
ブレッドボード用マイクロBメスUSBコネクタDIP化キット 200
USBケーブル Aオス-マイクロBオス 1.5m A-microB 120
カーボン抵抗(炭素皮膜抵抗) 1/4W 470Ω (100本入) 100
小型赤色LED BR2222S(200個入) 200
AVRマイコン ATMEGA328P-PU 250
積層セラミックコンデンサー0.1μF10個入2.54mm 100
------------- ----
1,830

※これものすごいマジックが含まれていて、ATmega328を書き込むための機材の値段が入っていないことに注意! でも、ATmega328の書き込みには、Arduino UNO/Arduino Pro MiniなどのArduinoとして動いている製品が利用できます(この過程に進む人は当然持っているはずなんで……)。

ブレッドボード上での実体配線図

f:id:C_L:20150315010936p:plain

ATmega328のDIP版は、28ピンの300milパッケージとなっていて、表面実装パッケージを使っているArduino Pro Miniよりも専有面積は小さい。実はATmega328でArduino Pro Miniの機能のほとんどを持っているのです。では、Arduino Pro Miniの基板上では何をやっているのかといえば、安定した電圧の電源の生成、セラミック発振子によるクロックの提供、リセットスイッチの実装などです。これらをオミットしたり別回路で解決できれば、ATmega328に置き換えることができます。

akizukidenshi.com

今回の場合は、リセットスイッチとセラミック発振子をオミット、定電圧電源はUSBコネクタからの定電圧5V電源の供給、となり、置き換えられる条件がそろったことになります。

ATmega328のVCCGNDの間に配置している積層セラコン0.1μFは、おまじないのバイパスコンデンサ(パスコン)ですが、これがないとノイズで動作が狂ってくることがほんとによく発生するので、兎に角これをやっておくことをお勧めします。

作例

まとめ

  • Arduinoのシールドが使えるタイプは、シールドを使ったり作ったりするときに使おう
  • ブレッドボード上で試作するときは、ブレッドボード上に載せる用途で作られているArduino Pro Miniを使おう
  • 試作してうまく動いたら、ATmega328に置き換えてみよう

番外編

Intel Edison kit Arduinoでもやってみました。

youtu.be

この場合、Intel Edison kit for Arduinoの5Vに外部から電圧を入れても、Edisonは稼働しません!

作例の場合、ブレッドボード側のMicroUSBコネクタを外して、Edison側から給電しています。