工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 産業技術

Arduino Nanoで作るUSB給電LEDファンクロック:回路図・コード・時刻設定機能付き

USB LEDライトファンアナログ時計(Arduino NANO使用)─ プロジェクトコード・回路図・時刻設定機能付き

ミニUSB LEDライトファン時計の動画を見たことがあるなら、今回はArduino NANO、ホールセンサ、抵抗、電池、DCモータ、LEDを使って、同じLEDライトアナログ時計を自作してみましょう。

LEDが円運動し、プロペラ表示で時・分・秒の3針と、一般的な腕時計や壁掛け時計のような円形の文字盤を表示します。

このプロジェクトの最大の特徴は、Arduino NANOにUSBケーブルでソースコードを書き込むだけで、分と秒の時刻設定を変更できることです。早速作り方を見ていきましょう。

LEDライトファン時計のガジェット動画をチェック

Arduino Nanoで作るUSB給電LEDファンクロック:回路図・コード・時刻設定機能付き

必要な部品:

配線・回路図

以下はUSBプロペラLEDファンアナログ時計の回路図です。時刻設定機能付きバージョンの回路図は記事下部にあります。

Arduino Nanoで作るUSB給電LEDファンクロック:回路図・コード・時刻設定機能付き

組み立て手順:

  1. 回路に合わせて小さなPCB基板をカットする。
  2. 緑色LED(LED12〜LED16)を長い脚が左側になるよう挿入し、銅箔側で脚を一方に曲げる(R12〜R16、A5〜A1に接続)。
  3. 同様に赤色LED(LED1〜LED11)を挿入(R1〜R11、D2〜D12に接続)。
  4. 青色LED(LED17)を緑色LEDの上に配置し挿入(R17=2.2kΩ、A7)。このLEDのカソードを他のLEDのカソードと共通接続し、アノードをR17経由でArduino +5Vピンに接続。
  5. 全LEDのカソードを共通接続し、余分なリードをカット。
  6. 抵抗も同様に挿入・曲げ・カット。
  7. 回路図通りにはんだ付け。
  8. Arduino NANO用のコネクタをはんだ付け。
  9. LED共通カソードからArduino GNDピンへ配線。

抵抗からArduinoのデジタルピン「D」とアナログピン「A」へ以下の通り配線:

ホールセンサ接続:

仕上げ:

  1. 3.7V 240mAh電池を回路図通り接続し、プラス側にスライドトグルスイッチを入れてON/OFF制御。
  2. おもちゃ用DCモータを使ってチップボードに全体を固定。高速モータ使用時は9V〜12V電池を使用。
  3. プロジェクトコード(後述)をUSBケーブルで書き込み、スイッチON。ファン回転中にLEDが時計表示を行います。

プロジェクトコード

以下のソースコードを必要に応じて修正し、USBケーブルでArduino NANOに書き込んでください。

Code via: hobbyprojects

int LED1 = 2; int LED2 = 3; int LED3 = 4; int LED4 = 5; int LED5 = 6; int LED6 = 7; int LED7 = 8; int LED8 = 9; int LED9 = 10; int LED10 = 11; int LED11 = 12; int LED12 = A1; int LED13 = A2; int LED14 = A3; int LED15 = A4; int LED16 = A5; int sensorPin = A0; int minuteSensor = A7; int hourSensor = A6; unsigned int n,ADCvalue,propeller_posn; unsigned long previousTime = 0; byte hours = 12; // set hours byte minutes = 15; // set minutes byte seconds = 00; // set seconds int val; void setup() { pinMode(LED1,OUTPUT); pinMode(LED2,OUTPUT); pinMode(LED3,OUTPUT); pinMode(LED4,OUTPUT); pinMode(LED5,OUTPUT); pinMode(LED6,OUTPUT); pinMode(LED7,OUTPUT); pinMode(LED8,OUTPUT); pinMode(LED9,OUTPUT); pinMode(LED10,OUTPUT); pinMode(LED11,OUTPUT); pinMode(LED12,OUTPUT); pinMode(LED13,OUTPUT); pinMode(LED14,OUTPUT); pinMode(LED15,OUTPUT); pinMode(LED16,OUTPUT); pinMode(sensorPin,INPUT_PULLUP); if(hours == 12) hours = 0; //**************************************** // Uncomment these lines for IR sensor testing /* Serial.begin(9600); while(1) { ADCvalue = analogRead(minuteSensor); Serial.print("minuteSensor "); Serial.println(ADCvalue); ADCvalue = analogRead(hourSensor); Serial.print("hourSensor "); Serial.println(ADCvalue); Serial.println(); delay(1000); } */ //**************************************** } void loop() { val = digitalRead(sensorPin); while (val == LOW) { val = digitalRead(sensorPin); } if (millis() >= (previousTime)) { previousTime = previousTime + 1000; seconds = seconds+1; if (seconds == 60) { seconds = 0; minutes = minutes+1; } if (minutes == 60) { minutes = 0; hours = hours+1; } if (hours == 12) { hours = 0; } } propeller_posn=30; n=0; while(n < 60) { ADCvalue = analogRead(minuteSensor); if(ADCvalue < 500) { minutes = propeller_posn; seconds = 0; } ADCvalue = analogRead(hourSensor); if(ADCvalue < 500) { hours = propeller_posn/5; seconds = 0; } drawMinuteMarker(); if ((propeller_posn==0) || (propeller_posn==5) || (propeller_posn==10) || (propeller_posn==15) || (propeller_posn==20) || (propeller_posn==25) || (propeller_posn==30) || (propeller_posn==35) || (propeller_posn==40) || (propeller_posn==45) || (propeller_posn==50) || (propeller_posn==55)) drawHourMarker(); if ((propeller_posn==0) || (propeller_posn==15) || (propeller_posn==30) || (propeller_posn==45)) drawQuarterMarker(); if((propeller_posn == hours*5) || (( propeller_posn == 0 ) && (hours == 0))) drawHoursHand(); if(propeller_posn == minutes) drawMinutesHand(); if(propeller_posn == seconds) drawSecondsHand(); delayMicroseconds(100); // LEDピクセル幅(モータ速度に合わせて調整。低速なら増やす、高速なら減らす) displayClear(); drawInner_Circle(); delayMicroseconds(450); // LEDピクセル/分目盛り間のギャップ(モータ速度に合わせて調整) n++; propeller_posn++; if(propeller_posn == 60) propeller_posn=0; } val = digitalRead(sensorPin); while (val == HIGH) { val = digitalRead(sensorPin); } } //========================= void displayClear() { digitalWrite(LED1,LOW); digitalWrite(LED2,LOW); digitalWrite(LED3,LOW); digitalWrite(LED4,LOW); digitalWrite(LED5,LOW); digitalWrite(LED6,LOW); digitalWrite(LED7,LOW); digitalWrite(LED8,LOW); digitalWrite(LED9,LOW); digitalWrite(LED10,LOW); digitalWrite(LED11,LOW); digitalWrite(LED12,LOW); digitalWrite(LED13,LOW); digitalWrite(LED14,LOW); digitalWrite(LED15,LOW); digitalWrite(LED16,LOW); } void drawMinuteMarker() { digitalWrite(LED16,HIGH); } void drawHourMarker() { digitalWrite(LED15,HIGH); digitalWrite(LED14,HIGH); } void drawQuarterMarker() { digitalWrite(LED13,HIGH); digitalWrite(LED12,HIGH); } void drawHoursHand() { digitalWrite(LED1,HIGH); digitalWrite(LED2,HIGH); digitalWrite(LED3,HIGH); digitalWrite(LED4,HIGH); digitalWrite(LED5,HIGH); digitalWrite(LED6,HIGH); digitalWrite(LED7,HIGH); } void drawMinutesHand() { digitalWrite(LED1,HIGH); digitalWrite(LED2,HIGH); digitalWrite(LED3,HIGH); digitalWrite(LED4,HIGH); digitalWrite(LED5,HIGH); digitalWrite(LED6,HIGH); digitalWrite(LED7,HIGH); digitalWrite(LED8,HIGH); digitalWrite(LED9,HIGH); } void drawSecondsHand() { digitalWrite(LED1,HIGH); digitalWrite(LED2,HIGH); digitalWrite(LED3,HIGH); digitalWrite(LED4,HIGH); digitalWrite(LED5,HIGH); digitalWrite(LED6,HIGH); digitalWrite(LED7,HIGH); digitalWrite(LED8,HIGH); digitalWrite(LED9,HIGH); digitalWrite(LED10,HIGH); digitalWrite(LED11,HIGH); } void drawInner_Circle() { digitalWrite(LED1,HIGH); delayMicroseconds(30); digitalWrite(LED1,LOW); } 

LEDファンクロックの時刻設定方法

基本IR受信機をメイン回路に追加する場合

追加部品:

  • R19, R20 = 10kΩ
  • IRフォトトランジスタLED(LED#13付近:分設定用)
  • IRフォトトランジスタLED(LED#16付近:時設定用)

R19を第1IR LED(LED#13付近・分設定)と、R20を第2IR LED(LED#16付近・時設定)に接続。両IR LEDの共通端子と抵抗をそれぞれArduino NANOのGNDと5Vに接続。A7ピンからR19と第2IRの間へ、A6ピンからR20と第1IRの間へジャンパー線を接続。

Arduino Nanoで作るUSB給電LEDファンクロック:回路図・コード・時刻設定機能付き

基本IRリモコン送信機の作成

部品:

  • 9V電池
  • 電池スナップコネクタ
  • IR LED(赤外線LED)
  • 1kΩ抵抗
  • タクトスイッチ
  • PCB基板

9V電池、IR LED、1kΩ抵抗、タクトスイッチをプラス側で直列接続するだけで、シンプルなIRリモコン送信機が完成します。これをLED#13とLED#16に向けてボタンを押すことで時刻設定を行います。

以下のコードでアナログUSB LEDファン時計の時針・分針(普通の壁掛け時計やアナログ腕時計の針に相当)を調整・設定します。

ArduinoシリアルモニタでIR検出回路の出力を確認。例えば通常室内光で500以上、IR光で500未満など、使用センサに合わせてコードや閾値を調整してください。

 propeller_posn=30; n=0; while(n < 60) { ADCvalue = analogRead(minuteSensor); if(ADCvalue < 500) { minutes = propeller_posn; seconds = 0; } ADCvalue = analogRead(hourSensor); if(ADCvalue < 500) { hours = propeller_posn/5; seconds = 0; } 

分針設定:IRリモコンを分目盛り(LED#13付近)に向けてボタン押下。
時針設定:IRリモコンを時目盛り(LED#16付近)に向けてボタン押下。

動画をチェック:

リソース:

LEDライトファン時計のガジェット

このプロジェクト用キット・部品

このプロジェクト用Arduino NANO

産業技術

  1. Arduino POVクロック:残像効果で浮かび上がるLED時計を自作する
  2. 12メートル先から見える大型LEDマスタークロック(アラーム機能付き)を自作しよう
  3. Arduino三目並べ:MAX7219 LEDマトリクスと段ボールケースで自作
  4. スマートArduino四足歩行ロボットの製作:ステップバイステップガイド
  5. SparkFun 7セグメントディスプレイで作る信頼性の高いArduinoカウントダウンタイマー
  6. Arduino Nanoで作る8×8 LEDマトリックスのフリップクロック - 自作リアルタイムクロック
  7. Arduinoで自作RCポルシェカー:ステップバイステップガイド
  8. DIY Arduino USBトラックパッド – 古いノートPCのタッチパッドを現代的なUSB入力デバイスに変換
  9. Arduino NanoとTCS3200センサーによる物体の色検出
  10. 555タイマーと4017カウンタによるLEDシーケンサ構築:周波数分周とデバウンス
  11. プロ仕様LEDナイトランプ回路図:230V/50Hz・110V/60Hz主電源直結設計