Arduinoで作った回路の小型化(Arduino互換機の製作)(1)

このページをスマホなどでご覧になる場合は、画面を横長にする方が読みやすくなります。
目次へ  前のページへ (1) (2) (3) (4) (5) (6) (7) (8) (9) 次のページへ
2016年12月20日 公開。

8ビットのArduinoを使って作った回路を、Arduino互換機を自作し、回路基板に内蔵する事により小型化する方法について説明します。

ATtiny13AにArduinoのスケッチを書き込んで作った電子サイコロ
↑ 画像をクリックすると拡大
ATtiny13AにArduinoのスケッチを書き込んで作った電子サイコロ

この回路の作り方の解説は、10ページにあります。

目次

1. はじめに … 1ページ
2. 小型化する回路の題材 … 1ページ
2-1. 電子サイコロの回路図とスケッチ … 1ページ
2-2. 電子サイコロの動作の説明 … 1ページ
3. Arduino Unoの回路構成 … 2ページ
4. ATmega328Pを用いたArduino互換機の基本形 … 2ページ
5. Arduino互換機を電子サイコロに搭載する … 3ページ
5-1. 回路の組み立て … 3ページ
5-2. スケッチの書き込み … 3ページ
5-2-1. スケッチの書き込みに必要な機材 … 3ページ
5-2-2. Arduino用ブートローダ/スケッチライタを使用するスケッチの書き込み … 3ページ
5-2-3. Arduino用ブートローダ/スケッチライタを使用するスケッチの書き込み … 3ページ
5-3. 電子サイコロを動作させる … 3ページ
6. Arduino互換機のクロック周波数を8MHzに落とし、3Vで動作させる … 4ページ
6-1. ATmega328Pの電源電圧とクロック周波数の関係 … 4ページ
6-2. Arduino互換機のクロック周波数を8MHzに変更する方法 … 4ページ
6-3. ArduinoのスケッチをArduino互換機に書き込む方法 … 4ページ
6-3-1. ATmega88/88V/168P/328Pサポートファイルのインストール … 4ページ
6-3-2. Arduino Uno用ブートローダライターシールドを使う場合のスケッチの書き込み … 4ページ
6-3-3. Arduino用ブートローダ/スケッチライタを使う場合のスケッチの書き込み … 4ページ
6-3-4. 3Vで電子サイコロを動作させてみる … 4ページ
6-3-5. 5V・16MHzから3V・8MHzに変更してどの程度省電力化できるか確認する … 4ページ
7. 内蔵CR発振器でArduino互換機を動かす … 5ページ
7-1. 内蔵CR発振器について … 5ページ
7-2. 内蔵CR発振器を使用する場合のArduino互換機の基本回路 … 5ページ
7-3. 内蔵CR発振器を利用した電子サイコロの回路図とスケッチ … 5ページ
7-4. スケッチの書き込み方 … 5ページ
7-4-1. Arduino Uno用ブートローダライタシールドを使う場合のスケッチの書き込み … 5ページ
7-4-2. Arduino用ブートローダ/スケッチライタを使う場合のスケッチの書き込み … 5ページ
7-4-3. 内蔵CR発振器を使って電子サイコロを動作させてみる … 5ページ
8. メモリ容量が少ないマイコンを使ってコストダウンする … 6ページ
8-1. ATmega88VとATmega168P … 6ページ
8-2. ATmega88VやATmega168Pにスケッチを書き込む方法 … 6ページ
8-2-1. Arduino Uno用ブートローダライタシールドを使う場合のスケッチの書き込み … 6ページ
8-2-2. Arduino用ブートローダ/スケッチライタを使う場合のスケッチの書き込み … 6ページ
9. ICSP書き込みにより、マイコンを取り外さずにスケッチを書き込む … 7ページ
9-1. ICSP端子によるスケッチの書き込みの概要 … 7ページ
9-2. ICSP端子のあるArduino互換機の作り方 … 7ページ
9-3. ICSP端子を備えた電子サイコロの製作 … 7ページ
9-4. ICSP端子に接続するケーブルについて … 7ページ
9-5. ICSP端子経由でスケッチを書き込む方法 … 7ページ
9-5-1. Arduino Uno用ブートローダライタシールドを使う場合のスケッチの書き込み … 7ページ
9-5-2. Arduino用ブートローダ/スケッチライタを使う場合のスケッチの書き込み … 8ページ
9-6. 内蔵CR発振器を使っている場合の注意点 … 8ページ
9-7. ターゲット基板の消費電流が多い場合の注意点 … 8ページ
10. ブートローダを使ってUARTからスケッチを書き込む … 9ページ
10-1. UART経由でスケッチを書き込むArduino互換機について … 9ページ
10-2. UART経由でスケッチを書き込むArduino互換機の基本回路 … 9ページ
10-3. UART経由でスケッチを書き込む電子サイコロの製作 … 9ページ
10-4. UART経由でスケッチを書き込む方法 … 9ページ
10-5. printデバッグの方法 … 9ページ
10-6. UARTを使用するプロジェクトを開発する場合の注意点 … 9ページ
11. ピン数の少ないAVRマイコン(ATtiny13Aなど)でArduino互換機を作る … 10ページ
11-1. Arduino互換機を作るのに使える主な8ピンまたは14ピンのAVRマイコン … 10ページ
11-2. ATtiny13AでArduino互換機を作る(ハードウェア編) … 10ページ
11-2-1. ATtiny13Aを使ったArduino互換機の基本回路 … 10ページ
11-2-2. ATtiny13Aを使った電子サイコロのハードウェア … 10ページ
11-3. ATtiny13AでArduino互換機を作る(ソフトウェア編) … 10ページ
11-3-1. ATtiny13A用の電子サイコロのスケッチ … 10ページ
11-3-2. ATtiny13用定義ファイルのインストール法 … 10ページ
11-3-3. ATtiny13へスケッチを書き込む方法 … 10ページ
11-4. ATtiny44/84/45/85を使ってArduino互換機を作る … 10ページ

1.はじめに

Arduinoを使うと、マイコン制御の回路を簡単に試作できるのが利点ですが、製作した回路は、当然ながらArduinoより大きくなります。またArduino込みの回路の価格も、当然Arduinoよりも高くなります。

ArduinoにはUSB経由でスケッチを書き込む機能など、最終的な作品を利用する際には利用しない回路が内蔵されており、これがArduinoを大きくし、価格を高くする原因となっています。Arduinoの互換機を自分で作り、その際に、最終的な作品で使う機能だけを実装すれば、元々のArduinoよりも小型で安価なマイコンを作る事も可能です。

この連載では、Arduinoの互換回路を回路に組み込んで、作品を小型化あるいはコストダウンする方法について説明します。

2.小型化する回路の題材

漠然とArduinoを使った回路の小型化の方法を説明しても、説明が抽象的になって分かりにくくなりますので、何か適当なArduino応用回路を例に挙げ、その回路を小型化する方法について説明する事にします。

なるべく簡単で動作が理解しやすく、かつ実用性のある回路という事で、次の動画と写真に示す様な電子サイコロを作りました。この連載では、この電子サイコロを改良し、小型化やコストダウンしていきます。

この電子サイコロはArduino Unoに、ユニバーサル基板上にサイコロの目の表示用のLEDとサイコロを振るためのスイッチを実装した物を接続して作ってあります。本来は、ユニバーサル基板ではなくブレッドボードで回路を組みたかったのですが、ユニバーサル基板では同じ列に複数のLEDを配置すると電気的に並列接続になってしまい、うまくサイコロの目状にLEDを配置できなかったため、ユニバーサル基板を使って回路を作りました。

写真1、小型化の題材となる電子サイコロ
↑ 画像をクリックすると拡大
写真1、小型化の題材となる電子サイコロ
広告

2-1.電子サイコロの回路図とスケッチ

製作した電子サイコロの回路図を図1に、作った基板の写真を写真2と写真3に示します。

図1、電子サイコロ(Arduino Uno利用版)の回路図
↑ 画像をクリックするとPDFファイルで表示
図1、電子サイコロ(Arduino Uno利用版)の回路図
写真2、電子サイコロ基板(Arduino Uno利用版)の表面
↑ 画像をクリックすると拡大
写真2、電子サイコロ基板(Arduino Uno利用版)の表面
写真3、電子サイコロ基板(Arduino Uno利用版)の裏面
↑ 画像をクリックすると拡大
写真3、電子サイコロ基板(Arduino Uno利用版)の裏面

電子サイコロのスケッチをリスト1に示します。

リスト1、電子サイコロ(Arduino Uno 利用版)のスケッチCOPY
void display(int n)
{
  switch(n) {
    case 0:
      digitalWrite(2,LOW );
      digitalWrite(3,LOW );
      digitalWrite(4,LOW );
      digitalWrite(5,HIGH);
      break;
    case 1:
      digitalWrite(2,HIGH);
      digitalWrite(3,LOW );
      digitalWrite(4,LOW );
      digitalWrite(5,LOW );
      break;
    case 2:
      digitalWrite(2,HIGH);
      digitalWrite(3,LOW );
      digitalWrite(4,LOW );
      digitalWrite(5,HIGH);
      break;
    case 3:
      digitalWrite(2,HIGH);
      digitalWrite(3,LOW );
      digitalWrite(4,HIGH);
      digitalWrite(5,LOW );
      break;
    case 4:
      digitalWrite(2,HIGH);
      digitalWrite(3,LOW );
      digitalWrite(4,HIGH);
      digitalWrite(5,HIGH);
      break;
    case 5:
    default:
      digitalWrite(2,HIGH);
      digitalWrite(3,HIGH);
      digitalWrite(4,HIGH);
      digitalWrite(5,LOW );
      break;
  } // switch
} // display

void setup()
{
  // used pins
  pinMode( 2,OUTPUT      ); // LED A
  pinMode( 3,OUTPUT      ); // LED B
  pinMode( 4,OUTPUT      ); // LED C
  pinMode( 5,OUTPUT      ); // LED D
  pinMode( 6,INPUT_PULLUP); // switch
  
  // unused pins
  pinMode( 0,INPUT_PULLUP);
  pinMode( 1,INPUT_PULLUP);
  pinMode( 7,INPUT_PULLUP);
  pinMode( 8,INPUT_PULLUP);
  pinMode( 9,INPUT_PULLUP);
  pinMode(10,INPUT_PULLUP);
  pinMode(11,INPUT_PULLUP);
  pinMode(12,INPUT_PULLUP);
  pinMode(13,INPUT_PULLUP);
  pinMode(A0,INPUT_PULLUP);
  pinMode(A1,INPUT_PULLUP);
  pinMode(A2,INPUT_PULLUP);
  pinMode(A3,INPUT_PULLUP);
  pinMode(A4,INPUT_PULLUP);
  pinMode(A5,INPUT_PULLUP);

  display(0);
} // setup

void loop()
{
  static int pip=0;

  delay(8);  

  if(digitalRead(6)==LOW) {
    pip++;
    if(pip>=6) pip=0;
    display(pip);
  } // if
} // loop

2-2.電子サイコロの動作の説明

製作した電子サイコロの動作について簡単に説明しておきます。

電子サイコロの7つのLEDの配置を図2に示します。各LEDに、それぞれa、b、c、d、a'、b'、c'という記号を付けました。

図2、電子サイコロのLEDの配置
↑ 画像をクリックすると拡大
図2、電子サイコロのLEDの配置

1~6の各目が出た時の発光パターンを図3に示します。

図3、1~6の目のLEDの発光パターン
↑ 画像をクリックすると拡大
図3、1~6の目のLEDの発光パターン

赤く塗りつぶしたLEDが発光している。白いLEDは発光していない。

この図を見れば分かりますが、aのLEDが発光している時は、a'のLEDも必ず発光しています。逆にaのLEDが発光していない時は、a'のLEDも必ず発光していません。このことから、aのLEDとa'のLEDは、ひとつのI/Oピンで制御できる事が分かります。

同様の理由で、bとb'のLED、およびcとc'のLEDの組み合わせも、それぞれひとつのI/Oピンで制御できます。よって、7つのLEDは合計4つのI/Oピンで制御できます。

スイッチに使うひとつのI/Oピンを含めて、全体で5つのI/Oピンが必要な事が分かります。図1の回路図を見て分かる様に、2番ピンから6番ピンまで、5つのArduinoのI/Oピンを使っています。

スイッチのボタンを押している間は、1、2、3、4、5、6、1、2、…と循環的に次々と目を表示し、ボタンから指を話すと表示が停止します。目の切り替えの時間をある程度速くすると、出る目がランダムになり、サイコロとして使用できる様になります。リスト1では、表示が変わっている様子が分かる事と目がランダムになる事のバランスを考えて、目を切り替える際に、delay関数で8msの時間をおいています。

次のページでは、Arduino互換機の基本的な回路について説明します。

目次へ  前のページへ (1) (2) (3) (4) (5) (6) (7) (8) (9) 次のページへ

このページで使われている用語の解説

関連ページ

関連製品

Arduino Uno用ブートローダスケッチライタシールドキット 商品名 Arduino Uno用ブートローダスケッチライタシールドキット
税抜き小売価格 1440円
販売店 スイッチサイエンス
サポートページ
Arduino用ブートローダ/スケッチライタキット 商品名 Arduino用ブートローダ/スケッチライタキット
税抜き小売価格 3000円
販売店 スイッチサイエンス
サポートページ
Arduino用ブートローダ/スケッチライタ(完成品) 商品名 Arduino用ブートローダ/スケッチライタ(完成品)
税抜き小売価格 3600円
販売店 スイッチサイエンス マルツ
サポートページ
Arduino 電子工作
このサイトの記事が本になりました。
書名:Arduino 電子工作
ISBN:978-4-7775-1941-5
工学社の書籍の内容の紹介ページ
本のカバーの写真か書名をクリックすると、Amazonの書籍購入ページに移動します。