SparkFun 7セグメントディスプレイで作る信頼性の高いArduinoカウントダウンタイマー
必要な部品と材料
| ブレッドボード(汎用) | ×1 |
| ジャンパーワイヤー(汎用) | ×1 |
| SparkFun 7セグメントシリアルディスプレイ - 赤 | ×1 |
| USB-A - Mini-USBケーブル | ×1 |
| Arduino Mega 2560 | ×1 |
使用するアプリとオンラインサービス
- Arduino IDE
このプロジェクトについて
手元にタイマーがなかったために考案されたプロジェクトです。どの種類のArduinoでも動作します。コードをアップロードするだけでカウントダウンが自動的に開始します。
カウントダウン時間を変更するには、コード内の以下の部分を書き換えてください:
long n = 60000; // 開始時間(ミリ秒) - 任意の時間に変更可能
重要: 1000 = 1秒です。例えば60秒にしたい場合は 60 × 1000 = 60000 を指定します。リセットボタンを押すとカウンターが自動的に再起動します。
回路図
以下の接続図を参照して、4桁ディスプレイをArduinoに接続してください。
ソースコード
以下のコードをArduinoにアップロードしてください。7セグメントディスプレイの各セグメントと桁を直接制御するマルチプレクシング方式で実装されています。
// 7セグメントピン配置 - 7セグメントLED - Arduinoピン番号
// pin 11 - A = 12
// pin 7 - B = 10
// pin 4 - C = 8
// pin 2 - D = 7
// pin 1 - E = 6
// pin 10 - F = 11
// pin 5 - G = 9
// pin 3 - 小数点
const int a = 12;
const int b = 10;
const int c = 8;
const int d = 7;
const int e = 6;
const int f = 11;
const int g = 9;
int p = 0;
int startStopReset = 13;
const int d1 = 1;
const int d2 = 2;
const int d3 = 3;
const int d4 = 4;
long n = 60000; // 開始時間 - 任意の時間に変更可能
int x = 100;
int del = 55; // ディレイ値
void setup() {
pinMode(d1, OUTPUT);
pinMode(d2, OUTPUT);
pinMode(d3, OUTPUT);
pinMode(d4, OUTPUT);
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
pinMode(p, OUTPUT);
pinMode(startStopReset, INPUT);
digitalWrite(startStopReset, HIGH);
}
void loop() {
digitalWrite(p, HIGH);
clearLEDs();
pickDigit(1);
pickNumber((n/x/1000)%10);
delayMicroseconds(del);
clearLEDs();
pickDigit(2);
pickNumber((n/x/100)%10);
delayMicroseconds(del);
clearLEDs();
pickDigit(3);
dispDec(3);
pickNumber((n/x/10)%10);
delayMicroseconds(del);
clearLEDs();
pickDigit(4);
pickNumber(n/x%10);
delayMicroseconds(del);
n--; // 'n++' でストップウォッチとしても使用可能
if (digitalRead(13) == LOW) {
n = 60000; // 再起動時間 - 元の設定値に変更してください
}
}
void pickDigit(int x) {
digitalWrite(d1, HIGH);
digitalWrite(d2, HIGH);
digitalWrite(d3, HIGH);
digitalWrite(d4, HIGH);
switch(x) {
case 1: digitalWrite(d1, LOW); break;
case 2: digitalWrite(d2, LOW); break;
case 3: digitalWrite(d3, LOW); digitalWrite(p, HIGH); break;
default: digitalWrite(d4, LOW); break;
}
}
void pickNumber(int x) {
switch(x) {
default: zero(); break;
case 1: one(); break;
case 2: two(); break;
case 3: three(); break;
case 4: four(); break;
case 5: five(); break;
case 6: six(); break;
case 7: seven(); break;
case 8: eight(); break;
case 9: nine(); break;
}
}
void dispDec(int x) {
digitalWrite(p, LOW);
}
void clearLEDs() {
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
digitalWrite(p, LOW);
}
void zero() { digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, HIGH); digitalWrite(g, LOW); }
void one() { digitalWrite(a, LOW); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, LOW); }
void two() { digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, LOW); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, LOW); digitalWrite(g, HIGH); }
void three(){ digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, HIGH); }
void four() { digitalWrite(a, LOW); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, HIGH); digitalWrite(g, HIGH); }
void five() { digitalWrite(a, HIGH); digitalWrite(b, LOW); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, LOW); digitalWrite(f, HIGH); digitalWrite(g, HIGH); }
void six() { digitalWrite(a, HIGH); digitalWrite(b, LOW); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, HIGH); digitalWrite(g, HIGH); }
void seven(){ digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, LOW); }
void eight(){ digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, HIGH); digitalWrite(g, HIGH); }
void nine() { digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, LOW); digitalWrite(f, HIGH); digitalWrite(g, HIGH); }
製造プロセス
- Arduinoで作るモニター用Ambilightシステム:没入感アップの自作ガイド
- Arduino UNOとOLEDディスプレイでクラシックPongゲームを自作:ステップバイステップチュートリアル
- Arduinoオーディオ周波数検出器 – 高感度サウンドモジュールで最大音量ピークの周波数を測定
- Arduinoで作る自作デジタルペット「Tamaguino」─ 3Dプリンター製ケース付き完全ガイド
- スマートワイヤレス照明スイッチコントローラー:Arduinoで物理スイッチを遠隔操作
- Arduino三目並べ:MAX7219 LEDマトリクスと段ボールケースで自作
- Arduino Nanoで作るスマートな動体検知水鉄砲
- Arduino手洗いタイマー:COVID-19対策のシンプルDIYツール
- Arduino向日葵:太陽を追尾する電子ヒマワリの製作
- Arduinoで自作RCポルシェカー:ステップバイステップガイド
- Arduinoで楽器演奏:音階生成のステップバイステップガイド