ピカピカ光るクリスマスツリーおばけの製作(4)

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

4.ソフトウェアについて

4-1.ATtiny85のスケッチのArduino IDE上での開発

今回はATtiny85のスケッチArduino IDEで開発します。Arduino IDEは、標準ではATtiny85のスケッチの開発に対応していませんので、MITメディアラボHigh-Low Techグループが配布しているATtinyサポートファイルを利用します。

また、ATtiny85へのスケッチの書き込みは、Arduino用ブートローダ/スケッチライタを使って書き込みます。

Arduino用ブートローダ/スケッチライタキット 商品名 Arduino用ブートローダ/スケッチライタキット
税抜き小売価格 3000円
販売店 スイッチサイエンス
サポートページ

Arduino IDEへのATtinyサポートファイルのインストール方法や、ATtiny85へのスケッチの書きこみ方法については、Arduino用ブートローダ/スケッチライタの製作(8)の記事に説明がありますので、そちらをご覧ください。

4-2.点滅版のスケッチについて

最初にも説明したとおり、今回は、同じ回路に対し、2種類のスケッチを作りました。1つ目は、LEDを単に点滅させるだけの点滅版で、2つ目は、PWM制御で光量をなめらかに変化させるPWM調光版です。この節では、点滅版について説明します。

点滅版のスケッチを次に示します。

void setup()
{
  pinMode(0,OUTPUT);
  pinMode(1,OUTPUT);
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);  
} // setup

void loop()
{
  digitalWrite(0,HIGH);
  digitalWrite(2,LOW);
  digitalWrite(4,HIGH);
  delay(500);
  digitalWrite(1,HIGH);
  digitalWrite(3,LOW);
  digitalWrite(4,LOW);
  delay(500);
  digitalWrite(0,LOW);
  digitalWrite(2,HIGH);
  delay(500);
  digitalWrite(1,LOW);
  digitalWrite(3,HIGH);
  delay(500);
} // loop

このスケッチをATtiny85に書き込み、そのATTiny85をICソケットに装着して、LED制御基板のCN1に電池ボックスを接続すると、クリスマスツリーのLEDが点滅を始めます。

なお、ATtiny85にスケッチを書き込む際には、クロック周波数の設定は、内部クロックの1MHzにしてください。(内部クロックの8MHzでも動作しますが、消費電力がわずかに増えます。外部クロックを選択すると、動作しないばかりか、それ以降、そのATtiny85のスケッチを書きかえる事ができなくなります)

LEDの点灯の様子は、次の動画で紹介しています。

このスケッチで使っている関数はpinMode関数digitalWrite関数、およびdelay関数の3種類のみで、動作を理解するのはあまり難しくないと思います。

このスケッチでは、D0~D4までの5つのI/Oピンを全て出力(OUTPUT)として用いています。D0~D3の4つのI/Oピンは、クリスマスツリーに付けるLED_A~LED_Hの8つのLEDを制御しています。I/OピンとLEDの対応については、表2を参照してください。

D4ピンは、LED制御基板上のLED1の制御をしています。LED1は、マイコンが動作している事をはっきり分かる様に設けたLEDです。

マイコンのI/Oピンと、制御対象のLEDとの関係を分かり易い様にまとめた図を、次に示します。赤色で書いてあるのが、制御対象のLEDです。

図5、マイコンのピンと制御対象のLED
図5、マイコンのピンと制御対象のLED

D0~D3に接続されたLED(クリスマスツリーのLED)は、点灯している時間と、消灯している時間が共に1000ms(1秒)です。D0~D3で、順に点灯タイミングを500ms(0.5秒)ずつずらしています。

また、D4に接続されたLED1(LED制御基板上のLED)は、250ms(0.25秒)点灯して、750ms(0.75秒)消灯するのを繰り返します。

ここで、各LEDの点滅のタイミングを、ロジックアナライザで観察してみましょう。

ロジックアナライザは、デジタル回路の信号波形を観察するための測定器です。電圧は、HかLの区別しかできず、オシロスコープの様にアナログ的な変化を観察できませんが、オシロスコープよりも多くのチャンネルの信号波形を同時に観測できます。私の使っているLAP-C(16064)というロジックアナライザは、16チャンネルの信号を観測できます。

ロジックアナライザで信号が観察しやすい様に、LED制御基板には、D0~D3までの信号を出力するピンヘッダ(CN2)があります。D4の信号はCN2に出ていないので、R1のリードから取ります。

LED1制御基板へのロジックアナライザのプローブの取り付けの様子を写真35に示します。

写真35、LED制御基板へのロジックアナライザのプローブの取り付け
↑ 画像をクリックすると拡大
写真35、LED制御基板へのロジックアナライザのプローブの取り付け

右側に写っている茶色い基板がLED制御基板です。また、左側に写っている白い箱が、ロジックアナライザです。この写真を見ると、ロジックアナライザのプローブを、LED制御基板にどのように取り付けているかが分かります。

ロジックアナライザで得られたD0~D4の信号波形を図6に示します。

図6、LEDの制御信号波形
図6、LEDの制御信号波形

図6の波形を見ると、各LEDが、おおむね2000ms(2秒)周期で点滅している様子が分かります。D0~D3の波形は、約1000ms(1秒)の間Hになり(LED点灯)、約1000ms(1秒)の間Lになります(LED消灯)。また、D4に関しては、約500ms(0.5秒)の間Hになり、約1500ms(1.5秒)の間Lになります。なお、ロジックアナライザの画面に表示されている時間が、スケッチで指定した時間より1~2%少ないのは、ATtiny85の内蔵クロック発振器の周波数の誤差(規格上は10%以内)によるものです。

図6の下側には、スケッチのどの部分が実行されているかを示す、1~4の番号を、赤色で書き入れておきました。(本当は1~4の数字が丸で囲まれていますが、丸付きの数字を本文中に使うと、環境によっては正しく表示できないので、丸なしの表記になっています) 1~4が、loop関数中のどの部分を指すかは、次の図7をご覧ください。

図7、1~4の番号とloop関数中の位置の関係
図7、1~4の番号とloop関数中の位置の関係

図7を見ると、1の部分ではdigitalWrite関数で、D0にH、D2にL、D4にHを出力しています。

一方で、図6の1の部分を見ると、確かにD0がL→H、D2がH→L、D4がL→Hと変化しています。また、digitalWrite関数で何も出力されなかったD1とD3については、図6の1の部分では、信号電圧に変化はありません。

同様に、2~4の部分でも、図7と図6とを見比べると、スケッチと波形の変化とが、ちゃんと対応しているのが分かると思います。

次のページでは、PWM制御の原理と、PWM調光版のスケッチについて説明します。

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

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

関連ページ

関連製品

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