つくるもの
動画のように光るコースターをつくります.Arduino UnoやArduino Pro miniに搭載されているものと同じATMega 328pを利用して,Arduino Pro mini互換ボードとして動作させています.
点灯パターンを自由に設定することが可能です.
途中のAVRのヒューズビットの書き込みの方法は自作Arduinoを作るときにも役立ちます.
作り方
回路
必要な部品(すべて秋月電子で購入しました.未実装の部品は記載していません)
番号 | 部品名 |
---|---|
U1 | ATmega328P-AU |
J2 | スライドスイッチ 1回路2接点( P-15643) |
BT1 | CR2032用電池ホルダー CH28-2032LF |
R2~R13 | チップ抵抗 330Ω(1608M) |
R15 | チップ抵抗 10kΩ (1608M) |
D2~D13 | 好きな色のチップLED(1608M)(明るさは抵抗値を変えて調整してください) |
C3 | チップコンデンサ 0.1uF(1608M) |
スルホール用テストワイヤ TP-200(プログラムを書き込むときにあると便利です) | |
AVR ライター USBasp https://amzn.to/2O5GgxQ |
※ AVRライターはArduino Unoでも代用ができますが,ヒューズビットとブートローダの書き込みのコマンドが若干変わります(後述).
ポイント
- Arduinoのデジタルピンとして使えるポートの先にLEDがぶら下げた
- AVR-ISPはArduinoのヒューズビットの設定やブートローダを書き込むために利用します.
- 右上のTX,RX,リセットはArduinoIDEからプログラムを書き込むときに利用します.Reset端子も用意しておくことで,自動書き込みができるうえにRESETボタンを省略することも可能です.
備考
-
Y1,C1,C2はArduinoを動作させるための水晶発振器と発振させるためのCです.今回はAVRマイコン内蔵のクロックを利用していることから,実装していません.
-
今回はうまく行かなかったので記事には書いていませんが,U2の反射型フォトセンサでコップを検知して,コップがあるときだけ点灯するようにしようとしていました.その名残がU2,R14,R16,R17,R18です.(R17とR18はセンサの電源をマイコンのポートから必要なときだけ供給するか,バッテリーから常時供給するかを0Ω抵抗で選べるようにするためにあります)
PCB
PCBはこのような形で実装しました.
配置で意識したこと
- コースターなので,上から見たときに余分な部品が見えないようにする.(=LED以外の部品は裏面に配置)
- コップを置いたときにいい感じに見えるように中心から円弧状に配置する.(KiCadの部品プロパティで角度を直接を指定しました)
- 未使用のポートは裏面にパッドとして配置しました.万が一のときにはArduinoとしても利用できます.
- 使うかわからない部品はパッドだけ用意しておきました.(あとから付けたくなってもつけられるようにするため)
PCBの注文
PCBはPCBgogoに注文しました.
KiCadで設計したガーバーファイルをzipにまとめて送信しました.
基板の製造が500円,送料が2000円ほどでした.
PCBの色は注文時に選ぶことができます.
注文方法はこちらがわかりやすいです.
https://www.jp3cyc.jp/2017/pcbgogoの注文方法 pcbステンシル/
はんだ付け
頑張ってはんだ付けします.
おすすめのハンダゴテはHakkoのFX600です.
プログラム
コースターとAVR Writerの接続
コースターとAVR WriterのMISO,MOSI,SCK,RESET,VCC,GND端子をそれぞれ接続します.
このときにスルホール用テストワイヤ TP-200を利用すると,コースター側にピンをはんだ付けしなくても良くなり,完成形の見た目がよくなります.
動作確認はヒューズビットの読み出しを行い,なんらかの値が読み取れればOKとします.
avrdude -c usbasp -p m328p -U lfuse:r:con:h -U hfuse:r:con:h -U efuse:r:con:h
AVR WriterはArduino Unoでも代用できます.そのときは-c usbaspのところがわかります.(配線も変わります.結線はArduino AVR writerのソースコードの中にあります.)
このサイトが詳しく書かれていて,わかりやすかったです.https://synapse.kyoto/tips/ArduinoISP_AVRWriter/page001.html
AVRマイコンのヒューズビットの書き込み
Arduino IDEをインストールしたコンピュータでコマンドプロンプトを開き,以下のコマンドを実行します.
注意:書き込みに失敗するとAVR 高電圧ライターを使用しない限り,もとには戻りません.事前の読み出しで成功していることを確認してから行ってください.
avrdude -c usbasp -p m328p -U lfuse:w:0xe2:m -U hfuse:w:0xde:m -U efuse:w:0x07:m
Arduinoブートローダの書き込み
ArduinoIDEを起動し,プログラムを書きます.
コースターのプログラム例
#define NUM_LED 12
int pin_led[NUM_LED] = {2,3,4,5,6,7,8,9,10,11,12,13};
int cnt = 1;
void setup() {
// put your setup code here, to run once:
for(int i=0;i<NUM_LED;i++){
pinMode(pin_led[i],OUTPUT);
}
}
void loop() {
// put your main code here, to run repeatedly:
if(cnt > 0xfff) cnt = 0;
led_write(cnt);
cnt++;
delay(1000);
}
void led_write(int led_pattern){
for(int i=0;i<NUM_LED;i++){
digitalWrite(pin_led[i],(led_pattern>>i)&0x01);
}
}
ボードとプロセッサのところを図のように設定します.
ボードとしてはPro miniと同じで,クロックが内蔵の8MHzで動作するため以下のような設定になります.
ボード | Arduino Pro or Pro Mini |
---|---|
プロセッサ | Atmega328p 3.3V 8MHz |
つづけて,スケッチ→コンパイルしたバイナリを出力を選びます.
そうすると,保存する場所を訪ねられるので任意のフォルダを指定して保存します.
すると,以下のように3つのファイルが保存されます.
この中の,coaster-firmware.ino.with_bootloader.eightanaloginputs.hexを書き込みます.(PCの設定によっては最後の.hexが表示されないかもしれません)
coaster-firmware.ino.with_bootloader.eightanaloginputs.hexのあるフォルダまでコマンドプロンプトで移動して,ブートローダとファームウェアを書き込みます.(コマンドプロンプトでのフォルダの移動の仕方:https://eng-entrance.com/windows-command-cd)
avrdude -c usbasp -p m328p -U flash:w:coaster-firmware.ino.with_bootloader.eightanaloginputs.hex
Arduinoファームウェアのアップロード
初回は,ブートローダの書き込みと同時にファームウェアが書き込まれます.
2回目以降はブートローダの書き込みと同じ方法を行うことで書き込むことも可能ですし,Arduinoのように書き込む方法もあります.
Arduino Unoにあるマイコンを取り外して,図のように接続します.そして,Arduinoに書き込むときと同じようにして書き込みます.(このとき,ボードとプロセッサの設定はブートローダのときと同じです)
コースター | Arduino Uno |
---|---|
3V | 3.3V |
GND | GND |
TX | TX |
RX | RX |
RESET | RESET |
アクリルカバーの製作
最後にカバーをアクリル板をレーザ加工機で切り取って製作しました.基板の外形が内側に入るようにしています.
3mmのアクリル板と5mmのアクリル板の三枚を重ねています.
レジンなどで固めても楽しいかもしれません.(電池の交換とプログラムの書き込みができる穴は用意しておきたいですが)
データ
KiCad,ArduinoのデータはGitHubにアップロードしていますので,ご自由にお使いください.
https://github.com/jp3cyc/coaster
投稿者の人気記事
-
romes_cyc
さんが
2021/02/28
に
編集
をしました。
(メッセージ: 初版)
-
romes_cyc
さんが
2021/03/01
に
編集
をしました。
-
romes_cyc
さんが
2021/12/07
に
編集
をしました。
ログインしてコメントを投稿する