USBプロペラLEDファンクロック–回路図とプロジェクトコード
ArduinoNANOを使用したUSBLEDライトファンアナログ時計–時間設定機能付きのプロジェクトコードと回路図
ミニUSB LEDライトファンクロックの有名なガジェットのビデオを見た場合は、Arduino NANO、ホールセンサーに基づいて同じLEDライトアナログクロックを設計するので、準備をしてください、抵抗器、バッテリー、DCモーター、LED。
LEDは円を描くように回転し、プロペラディスプレイにアナログ時計を表示します。3つの針すべてがそれぞれ時、分、秒で表示され、丸みを帯びた(円形の)形になります。通常の手首または壁掛け時計。
このプロジェクトで最も優れているのは、USBケーブルを介してソースコードをArduino NANOにアップロードすることで、分と秒の両方の時間設定を変更できることです。方法を見てみましょう。
LEDライトファンクロックのガジェットを確認する
必要なコンポーネント:
- Arduino NANO
- ホールセンサーW130
- R1からR16=330Ω
- R17=2.2kΩ
- R18=10kΩ
- LED1からLED11=赤色光
- LED12からLED16=緑色のライト
- LED17=ブルーライト
- バッテリー=3.7V、240mAh(高速動作用の強力なモーターの場合は9V〜12V)
- スイッチ=オン/オフ単極(スライドトグル)
- その他のコンポーネント:PCBボード、おもちゃのDCモーター、ワイヤーとケーブル、はんだごてなど
配線と回路図
以下は、USBプロペラLEDファンのアナログ時計の回路図です。時間設定機能を使用して同じプロジェクトを作成する場合は、この投稿の下部にある2番目の回路図を確認してください。
手順:
- 回路に応じてPCBボードの小片を切り取ります。
- 左側に長い脚がある穴に緑色のLEDを挿入します。次に、銅の側から、脚を片側に曲げます(緑色のLED、つまりLED 12 – LED 16はそれぞれR12からR16、A5からA1を経由します)。
- 同じ方法で、残りの赤色LEDを挿入します(LED 1 – LED 11はそれぞれR1からR11、D2からD12を経由します)。
- 図に示すように、緑色のLEDの上に青色LEDを挿入します(R17およびA7を介した青色LED 17)。 R17を2.2kΩとして接続し、このLEDのカソードを他のLEDのカソードに結合します。次に、このLEDの正のレッグを抵抗R17の一方の端に接続し、もう一方の端をArduino+5Vピンに接続します。
- LEDのすべてのカソード接続が結合されています。必要に応じて余分なリード線を切り取ります。
- 次に、LEDの場合と同じように、抵抗を挿入してリードを曲げます。それに応じて余分なリードをカットします。
- 回路図に従ってコンポーネントをはんだ付けします。
- 次に、コネクタをArduinoNANOにはんだ付けします。
- LEDコモンカソードからArduinoGNDピンにワイヤーを接続します。
抵抗器からのワイヤーを次のようにArduinoデジタルピン「D」とアナログピン「A」に接続します。
- R1からD2
- R2からD3
- R3からD4
- R4からD5
- R5からD6
- R6からD7
- R7からD8
- R8からD9
- R9からD10
- R10からD11
- R11からD12
- R12からA1
- R13からA2
- R14からA3
- R15からA4
- R16からA5
ホールセンサーを次のように接続します:
- ArduinoA0ピンへの出力ピン。
- VCCピンからArduino+5Vピンへ。
- センサーの接地ピンをArduinoGNDピンに接続します。
最後の仕上げとして:
- 回路に応じて3.7V、240mAhのバッテリーを接続し、回路のオンとオフの操作のために、プラスのリード線に単極トグルスライドスイッチを追加することを忘れないでください。
- 次に、おもちゃのDCモーターを使用して、プロジェクト全体をチップボードに取り付けます。高速用の強力なモーターを使用する場合は、代わりに9V〜12Vのバッテリーを使用できることに注意してください。
- 最後に、プロジェクトコード(以下に示す)viva USBケーブルをアップロードし、回路のスイッチをオンにします。プロペラが動いている間、ファンはLEDライトで時計を表示します。
プロジェクトコード
USB Ledファンクロックの次のソースコードに必要な変更を加え、必要に応じてUSBケーブルを介してArduinoNANOにアップロードできます。
コード経由: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); // for LED pixel width (change the value according to motor speed. Increase for low speed, decrease for high speed motor)
displayClear();
drawInner_Circle();
delayMicroseconds(450); // for the gap between LED pixels/minutes markers (change the value according to motor speed. Increase for low speed, decrease for high speed motor)
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を最初のIRLED(分設定の場合はLED#13の近く)に接続し、R20を2番目のIR(時間設定の場合はLED#16の近く)に接続するだけです。 IRLEDのコモンと両方の抵抗をArduinoNANOのGNDピンと5Vピンにそれぞれ接続します。最後に、ジャンパー線をA7ピンからR19と2番目のIRの間に接続します。 R20へのA6ピンと最初のIRについても同じようにします。
基本的なIRリモコンの場合 送信機
必要なコンポーネント:
- 9V電池
- バッテリースナップコネクタ
- IR LED(赤外線LED)
- 1kΩ抵抗
- タクトスイッチ
- PCBボード
USB LEDファンクロックの時間設定機能を設定および制御するためのシンプルなIRリモコン送信機を作成するには、すべてのコンポーネントを直列に接続するだけです(つまり、9Vバッテリー、IR LED 、1kオームの抵抗器とプラス端子のタクトスイッチ)。この送信機は、時間を調整するために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リモコンを分マーカーに向けてリモートボタンを押します。時針を設定するには、IRリモコンを時針メーカーに向け、リモコンボタンを押します。
ビデオを見る:
リソース:
LEDライトファンクロックのガジェット
このプロジェクトのキットとコンポーネント
このプロジェクトのArduino NANO
産業技術