ATtiny85を使って電子工作しよう!

こんにちは!くのへ@MasazaneKunoheです

今日はATtiny85というICチップについて紹介します

ATtiny85はArduinoIDEでプログラミングが出来る小型ICチップです。
つまりArduinoが使える人は小型ICチップであるATtiny85をすぐに操れるようになります!!
これは熱い!!!
ArduinoUNOは3000円くらいしますが、このICチップは1個200円!!
ちょっとした工作に3000円は掛けられませんが、この値段なら色々作れますね!!

ATtiny85とは

ATtiny85とは、Atmel社が開発したAVRマイコンとよばれる書き込み可能なICチップです。

似たような製品に「PICマイコン」がありライバル関係です。私の感覚では、PICマイコンの方が有名であり、本なども多く出版されているような気がします。それに比べるとAVRマイコンは本やネット記事も少ないように感じます。

しかし、それはあくまで比べた場合のことであり、インターネット情報は十分あるので、そんなに困らないと思います。

そんなAVRマイコンの一つであるATtiny85ですが、こんな感じの8ピンICチップです。

写真:秋月電子HPより

サイズはこんな感じです。小さい!!!

写真:秋月電子HPより

こんな小型のICチップが1個200円(:2023年1月現在)で売ってます。秋月電子はこちら

これのすごいところは、Arduinoと全く同じようにArduinoIDEでプログラミングできます。
つまり、Arduinoのライブラリが使用できるんです!
私はPICマイコンも少し触りましたが、LCDディスプレイを使うために、LCDディスプレイのデータシートをしっかりと呼んだうえで超難しいコーディングをする必要があったため、途中で挫折しました。
しかし、ATtiny85はArduinoのライブラリが使えるので、かなり手軽に色んなことが出来ます!

例えばこちらはリモコンを作った時の動画です。これは、IRremote.hというArduinoのライブラリを使っています。

Arduinoはいっぱい本が出ていますし、インターネット上の記事もいっぱいあります。
学習コストをあまりかけずに動かせるので、ATtiny85はとても熱い、、、!!!

ATtiny85のピン配置

ATtiny85はこんなピン配置をしています。

右上8番ピンがVcc、左下4番ピンがGNDです。
なので+電源を8番ピン、-電源を4番ピンにつなぎます。これでATtiny85は動きます。

そして、ArduinoIDEでプログラムに記載するピン番号の割り当ては上記の通りです。
例えば、Arduinoで「digitalRead(1)」と書けば、6番ピンの電圧がHighかLowか読んでくれます。

このピン配列が覚えにくいんだよねぇ~
なんで右下から反時計回りにしたんだろう、、、

ちなみにResetピンは、、、使うのはあきらめた方が良い

Reset機能が割り当てられている1番ピンは「5」ピンとして動かせることになっています。
しかし、これは使わない方が良いと思います。クセが強すぎて「5」ピンとして使いこなすのはかなり難しいです。

まずResetと呼ばれる機能についてですが、この機能はGNDの電圧(すなわちLow信号)を与えると、起動中プログラムを停止させるというものです。そして、GNDの電圧を解除すると、最初から再びプログラムが最初から実行されます。つまり、ファミコンのリセットボタンを押してる感じの動作をします。ということで、このピンにLow信号を与えるとATtiny85が止まるので、基本的にLow信号を与えるのはNGです(意図して与えるようにするならOK)。

更に、このピンを出力に使っても「弱い電圧」しか発信されません。つまりdigitalWriteでHIGHにしても、Vcc電圧は供給されず中途半端な弱い電圧が出力されます。
これは、、、使いにくい、、、

このResetピンからReset機能を削除する技もある(*1)のですが、一度Reset機能を停止してしまうと後述のArduinoISPを使ってプログラムを書き換えることが出来なくなるらしい(*2)ので、お勧めできません。
(*1)ヒューズビットと呼ばれるICの中の特殊なメモリ領域を書き換えることでReset機能を停止できる
(*2)ArduinoISPを使うときにReset機能を使っているのでArduinoISPで書き込みできなくなる

ということで、実質的に使えるピンは5つのピンだけです。

ピンの特殊機能について

(この項は中級者向けなので、ピンと来なかったら飛ばし読み推奨。ピンだけに。)

上述の通り5つのピンを使うことが出来ますが、これらのピンはデジタル入出力だけではなく、アナログ入力、アナログ出力(PWM)、I2C通信、SPI通信、外部割込みピン機能を有しています。

これらの機能を整理するとこんな感じです。

SSを使うSPI通信を使う場合には、残りの3番ピンしか使えないのが残念ポイントです。
また、外部割込みとして7番ピンが割り当てられていますが、このピンはI2C通信にも割り当てられているため、I2C通信とバッティングします。ぐぬぬ。。。
割り込みとI2C通信を両立させたい時には、PCINT(ピンチェンジ割り込み)と呼ばれる技を使います。ATtiny85はどのピンにもPCINTを使うことが出来る機能を持たせています。ただ、PCINT機能に関するインターネット上の記事はとても少ないです。別途記事化しようと思います。

これらの若干の残念な点はありますが、そもそも8つのピンしかない小型マイコンなので、これは割り切りましょう!文句を言うならピン数が多い上位モデルを使うんだ!!

ちなみにResetピンはアナログ入力読み取り用のピン(A0ピン)として使うことが出来ます。Resetピンは、アナログ読み取りピンとして使うならば有効活用できると思います。
(ちなみに間違って電圧をLowにするとリセットされてしまうので、使う場合は注意しましょう!)

書き込み方法

PICマイコンにプログラムを書き込むためには、専用の機械が必要でした。

しかし、ATtiny85プログラムを書き込むためには専用の機械は必要ありません!
Arduinoを書き込み装置として使うことができます!

Arduinoのスケッチ例にある「Arduino ISP」というスケッチをArduinoに書き込むと、ArduinoがATtiny85のプログラム書き込み装置になるんです!不思議だ、、、!!

ArduinoにArduinoISPスケッチを書き込んだ後、以下の図のようにArduinoとATtiny85を接続し、初回だけATtiny85にブートローダと言うものを書き込めば、ATtiny85にスケッチを書き込むことが出来ます。

詳細はこちらのサイト様の記事に非常に詳しく解説されています。
非常に分かりやすいのでご参照ください。
私も初めてATtiny85を使う時に参考にさせて頂きました。すごく簡単にできましたよ。

Arduinoが書き込み装置になるなんて、すごいな~。

動作電圧について

ATtiny85の動作電圧は、2.7V~5.5Vです。(注:ATtiny85の上位モデルのATtiny85Vは1.8~5.5V)
なので電池はこんな感じで選定になります。

  • 単3/単4の乾電池:2~3本直列(1本で1.5Vのため)
  • 充電池(ニッケル水素充電池):3本直列(1本で1.2Vのため)
  • 小型のボタン電池(LR44とか):2つ直列(1個1.5Vのため)
  • コイン電池(CR2032とか):1個(1個で3Vのため)

ATtiny85は非常に小型のICチップなので、電池も小型のものと相性が良く、私はコイン電池を使ってます。

ちなみに、電池の種類の解説についてはこちらのモノタロウさんの記事がすごく良くまとまっていますので、ご参照ください。

ちなみに、コイン電池の「CR XXYY」という名前について、XXは直径、YYは高さだそうです。
なので良く売っているCR2032は、直径20mmで厚さが3.2mmと言う意味です。
私はこのCR2032をよく使っていますが、CR1220とかCR1632がより小型なので小さな回路を工作するときはこっちが良いと思います。

電圧と電流の許容値について

ATtiny85のデータシートを読むとこう書いてます。

なので、まず、6Vを超える電圧を掛けてはいけません。
次に、入出力ピンの出力電流は40mAまでです。
これが地味に重要です。LEDを光らせる時に抵抗を挟むと思いますが、100Ω以上が良いと思います。オームの法則E=RIの法則より、I=E/Rとなるので、電源電圧を3Vとし、LED抵抗+抵抗=100Ω(LED抵抗はゼロとして試算)すると、電流値Iは30mAになります。何気にギリギリ。

実際にはLEDにも抵抗値はあるのでもっと電流は少なくなりますが、いずれにせよ入出力ピンの許容電流値「40mA」はモータを動かしたりするのは難しいと思っておいた方が良いです。

下位モデル

ATtiny85にはATtiny25、ATtiny45という下位モデルがあります。
基本的に8ピンのマイコンで見た目は一緒です。

ATtiny25、ATtiny45の方がメモリなどの容量が小さく、その分ちょっと値段が安いです。
でも、1個数十円の差なので、趣味レベルで電子工作をやっている人はATtiny85が良いかな~と思います。

ピンが多いモデル

ATtiny85には、ピンが8本しかありません。複雑なことをやろうとするとピンが足りなくなります。

ATtiny85の兄弟に、ATtiny24/44/84というモデルがあります。
これらは14ピンのモデルで、ATtiny85と同じようにArduinoを使ってプログラムすることが出来ます!

ピンが物足りなくなったら、ピンが多いモデルを使いましょう!

ATtiny85のデータシート

ここにATtiny85(ATtiny25/45も含む)のデータシートの日本語版と英語版を貼っておきます。興味ある方はじっくり読んでみて下さい!

以上。ATtiny85の紹介でした~
小型のICチップが使えるようになると、電子工作の幅が一気に広がります。
ArduinoIDEでプログラミングできるので、かなり入門のハードルがとても低く、とても楽しいです!!