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

プッシュボタンを使用したPWMによる調光ライト

コンポーネントと消耗品

>
Arduino Mega 2560
× 1
ブレッドボード(汎用)
× 1
ジャンパー線(汎用)
使用する量は、使用する方法によって異なる場合があります。
× 11
LED(汎用)
どの色でもかまいませんが、3つの異なる色をお勧めします。
× 3
SparkFunプッシュボタンスイッチ12mm
× 1
抵抗330オーム
× 4

アプリとオンラインサービス

>
Arduino IDE

このプロジェクトについて

このプロジェクトでは、Arduinoを使用してLED(発光ダイオード)をフェードする方法を紹介します。 3つのセクションに分かれています:

  • フェードライト
  • プッシュボタン付きのフェードライト
  • ボタン付きのフェードライト(遅延の改善)

フェードライト:

このセクションの最後では、プロジェクトは次のようになっているはずです。

ご覧のとおり、信号が明るくなり、信号の順に徐々に暗くなります。さあ、始めましょう。

回路図:

<図>

ご覧のとおり、LEDはピン3、6、9に接続されています。LEDは好きなピンに接続できますが、後でコードで変更することを忘れないでください。

コード:

まず、これをコードに追加します。どのコンポーネント、この場合はどのLEDがどのピンに入るのかを示します。

  int ledRed =9; int ledYellow =6; int ledGreen =3;  

さて、 void setup()で 機能、ピンが入力か出力かを記述します。

  void setup(){pinMode(ledRed、OUTPUT); pinMode(ledYellow、OUTPUT); pinMode(ledGreen、OUTPUT);}  

最後に、 void loop()に以下を追加します 関数。それはMCUに何をすべきかを伝えます。

  void loop(){//これは赤信号をフェードするだけです--ledRed // ledRed for(int i =0; i <=255; i ++){analogWrite(ledRed、i);遅延(30); } for(int i =255; i> =0; i-){analogWrite(ledRed、i);遅延(30); }}  

ここで起こっているのは、MCUが整数 'i' かどうかをチェックしていることです。 255未満かどうか。そうである場合、 'i' の値 1つ増えます。プロセスは30ミリ秒遅延し、その後再起動します。 'i' の値 が255以上の場合、チェックされるたびに1ずつ減算されます。値が0に達すると、プロセスが最初からやり直されます。

ただし、フェードにかかる時間を変更する場合は、すべての delay()を変更する必要があります。 あなたが望む量に機能します。それはあまり効率的ではありません。 delay()を変更したいときに、物事をより簡単かつ迅速に行うため 何度も、これをコードの先頭に追加します。

  const intおよびfade =30;  

デフォルト値を設定します。この場合は、デフォルトの時間です。ここで、すべての delay()を変更します (フェード)への価値 。必要に応じて、別の名前を付けることができます。その結果、 delay() 関数は次のようになります。

  delay(fade);  

そして、コードは次のようになります。

  int ledRed =9; int ledYellow =6; int ledGreen =3; const int feed =10; void setup(){pinMode(ledRed、OUTPUT); pinMode(ledYellow、OUTPUT); pinMode(ledGreen、OUTPUT);} void loop(){// ledRed for(int i =0; i <=255; i ++){analogWrite(ledRed、i);遅延(フェード); } for(int i =255; i> =0; i-){analogWrite(ledRed、i);遅延(フェード); } // ledYellow for(int i =0; i <=255; i ++){analogWrite(ledYellow、i);遅延(フェード); } for(int i =255; i> =0; i-){analogWrite(ledYellow、i);遅延(フェード); } // ledGreen for(int i =0; i <=255; i ++){analogWrite(ledGreen、i);遅延(フェード); } for(int i =255; i> =0; i-){analogWrite(ledGreen、i);遅延(フェード); } // ledYellow for(int i =0; i <=255; i ++){analogWrite(ledYellow、i);遅延(フェード); } for(int i =255; i> =0; i-){analogWrite(ledYellow、i);遅延(フェード); }}  

プッシュボタン付きフェードライト:

このセクションの後、プロジェクトにボタンを追加できるようになります。

ご覧のとおり、LEDはボタンを押した後にのみ変化します。それでは、始めましょう。

回路図:

<図>

すべてのLEDが同じ場所に保持されていることに気付いたかもしれませんが、プッシュボタンが追加されています。

コード:

まず、ボタンが接続されているピンをMCUに通知する必要があります。これを行うには、これをコードの先頭に追加します。

  int button =7;  

さて、 void setup() 関数、これを追加して、ボタンが出力の入力であるかどうかをMCUに通知します。

  pinMode(button、INPUT);  

これも関数に追加します。

  digitalWrite(ledRed、LOW); digitalWrite(ledYellow、LOW); digitalWrite(ledGreen、HIGH);  

スタートライトをセットします。今回は、開始LEDは緑色ですが、必要に応じて赤色または黄色に変更できます。

現在、 void loop()に大きな変更があります 関数。 loop()にあったすべてのもの およびfadeLights()という名前の関数に置き換えられました (名前は、必要に応じて異なる場合があります)。 loop()内 これで次のようになります:

  void loop(){if(digitalRead(button)==HIGH){delay(15); //ソフトウェアデバウンスif(digitalRead(button)==HIGH){//ボタンが押された場合、関数fadeLights(); // fadeLightsは}} else {digitalWrite(ledRed、LOW);と呼ばれます。 //ボタンが押されていない場合、緑色のLEDはdigitalWrite(ledYellow、LOW);です。 //オンになり、他はオンになりません。 digitalWrite(ledGreen、HIGH); }}  

前述のように、 void feedLights() 関数はループ内にあったものを持ちます。

  void decodeLights(){for(int i =255; i> =0; i-){//緑から開始するため、緑をフェードさせる必要がありますanalogWrite(ledGreen、i);遅延(フェード); } // ledYellow for(int i =0; i <=255; i ++){analogWrite(ledYellow、i);遅延(フェード); } for(int i =255; i> =0; i-){analogWrite(ledYellow、i);遅延(フェード); } // ledRed for(int i =0; i <=255; i ++){analogWrite(ledRed、i);遅延(フェード); } for(int i =255; i> =0; i-){analogWrite(ledRed、i);遅延(フェード); } // ledYellow for(int i =0; i <=255; i ++){analogWrite(ledYellow、i);遅延(フェード); } for(int i =255; i> =0; i-){analogWrite(ledYellow、i);遅延(フェード); } // ledGreen for(int i =0; i <=255; i ++){analogWrite(ledGreen、i);遅延(フェード); }}  

プロジェクトがビデオのように機能する場合は、正しく実行されています。順序が正しくない場合は、次を確認してください。

  • コードが正しく記述されている場合
  • LEDを正しいピンに接続した場合

ライトが点灯しない場合は、確認してください

  • LEDを正しいピンに接続した場合
  • ワイヤーを正しく接続した場合
  • 数式を正しく記述した場合

ボタン付きのフェードライト(遅延の改善):

お気づきかもしれませんが、ボタンを離すとライトが消えていきます。このセクションの後、ボタンが押されているときにのみLEDがフェードするようにコードを編集できるようになります。

ここでわかるように、ボタンを離すと、LEDはデフォルトの順序である:

に戻ります。

赤-オフ

黄色-オフ

緑-オン

回路図:

コンポーネントを追加したり、何か別のことをしたりする必要がないため、回路図は同じままです。LEDをフェードさせたいのです。

<図>

コード:

これ以上追加することはないので、最初に何も追加する必要はありません。ただし、遅延を変更しているため、これを削除する必要があります。

  const intおよびfade =10; //これはもう必要ありません 

setup()について変更することはありません 関数。 void loop()内 、その他を追加する必要があります ステートメント。

  void loop(){if(digitalRead(button)==HIGH){delay(15); if(digitalRead(button)==HIGH){fadeLights(); }} else {//ここに追加digitalWrite(ledRed、LOW); digitalWrite(ledYellow、LOW); digitalWrite(ledGreen、HIGH); }}  

これは、ボタンが押されていない場合、プログラムは fadeLights()を終了することを意味します その他に移動します デフォルトのLED順序を持つステートメント。以前とは異なります-以前は、ボタンは一度チェックされませんでした fadeLights() 呼び出されました。

ここで、すべての delay()を変更します これに対する機能:

  for(int y =0; y <1000; y ++){//ボタンが離された場合if(digitalRead(button)==LOW){return; }  

各ループで、マイクロプロセッサはボタンをチェックします。リリースされている場合は、返品 fadeLights()を停止するためにコマンドが呼び出されます 。私の見積もりによると、各forループが実行されると、おそらく約10マイクロ秒かかります。つまり、必要な速度にするために何度も実行する必要があります。

このチュートリアルを楽しんで、プロジェクトを頑張ってください。

コード

  • フェードライト
  • プッシュボタン付きのフェードライト
  • プッシュボタン付きのフェードライト(遅延の改善)
フェードライト Arduino
 int ledRed =9; int ledYellow =6; int ledGreen =3; const intおよびfade =10; void setup(){pinMode(ledRed、OUTPUT); pinMode(ledYellow、OUTPUT); pinMode(ledGreen、OUTPUT);} void loop(){// ledRed for(int i =0; i <=255; i ++){analogWrite(ledRed、i);遅延(フェード); } for(int i =255; i> =0; i-){analogWrite(ledRed、i);遅延(フェード); } // ledYellow for(int i =0; i <=255; i ++){analogWrite(ledYellow、i);遅延(フェード); } for(int i =255; i> =0; i-){analogWrite(ledYellow、i);遅延(フェード); } // ledGreen for(int i =0; i <=255; i ++){analogWrite(ledGreen、i);遅延(フェード); } for(int i =255; i> =0; i-){analogWrite(ledGreen、i);遅延(フェード); } // ledYellow for(int i =0; i <=255; i ++){analogWrite(ledYellow、i);遅延(フェード); } for(int i =255; i> =0; i-){analogWrite(ledYellow、i);遅延(フェード); }} 
プッシュボタン付きフェードライト Arduino
 int ledRed =9; int ledYellow =6; int ledGreen =3; int button =7; const int feed =10; void setup(){pinMode(ledRed、OUTPUT); pinMode(ledYellow、OUTPUT); pinMode(ledGreen、OUTPUT); pinMode(button、INPUT); digitalWrite(ledRed、LOW); digitalWrite(ledYellow、LOW); digitalWrite(ledGreen、HIGH);} void loop(){if(digitalRead(button)==HIGH){delay(15); if(digitalRead(button)==HIGH){fadeLights(); }} else {digitalWrite(ledRed、LOW); digitalWrite(ledYellow、LOW); digitalWrite(ledGreen、HIGH); }} void decodeLights(){for(int i =255; i> =0; i-){analogWrite(ledGreen、i);遅延(フェード); } // ledYellow for(int i =0; i <=255; i ++){analogWrite(ledYellow、i);遅延(フェード); } for(int i =255; i> =0; i-){analogWrite(ledYellow、i);遅延(フェード); } // ledRed for(int i =0; i <=255; i ++){analogWrite(ledRed、i);遅延(フェード); } for(int i =255; i> =0; i-){analogWrite(ledRed、i);遅延(フェード); } // ledYellow for(int i =0; i <=255; i ++){analogWrite(ledYellow、i);遅延(フェード); } for(int i =255; i> =0; i-){analogWrite(ledYellow、i);遅延(フェード); } // ledGreen for(int i =0; i <=255; i ++){analogWrite(ledGreen、i);遅延(フェード); }} 
プッシュボタン付きフェードライト(遅延の改善) Arduino
 int ledRed =9; int ledYellow =6; int ledGreen =3; int button =7; const int feed =10; void setup(){pinMode(ledRed、OUTPUT); pinMode(ledYellow、OUTPUT); pinMode(ledGreen、OUTPUT); pinMode(button、INPUT); digitalWrite(ledRed、LOW); digitalWrite(ledYellow、LOW); digitalWrite(ledGreen、HIGH);} void loop(){if(digitalRead(button)==HIGH){delay(15); if(digitalRead(button)==HIGH){fadeLights(); }} else {digitalWrite(ledRed、LOW); digitalWrite(ledYellow、LOW); digitalWrite(ledGreen、HIGH); }} void decodeLights(){for(int i =255; i> =0; i-){analogWrite(ledGreen、i); for(int y =0; y <1000; y ++){//ボタンが離された場合if(digitalRead(button)==LOW){return; }}} // ledYellow for(int i =0; i <=255; i ++){analogWrite(ledYellow、i); for(int y =0; y <400; y ++){//ボタンが離された場合if(digitalRead(button)==LOW){return; }}} for(int i =255; i> =0; i-){analogWrite(ledYellow、i); for(int y =0; y <400; y ++){//ボタンが離された場合if(digitalRead(button)==LOW){return; }}} // ledRed for(int i =0; i <=255; i ++){analogWrite(ledRed、i); for(int y =0; y <1000; y ++){//ボタンが離された場合if(digitalRead(button)==LOW){return; }}} for(int i =255; i> =0; i-){analogWrite(ledRed、i); for(int y =0; y <1000; y ++){//ボタンが離された場合if(digitalRead(button)==LOW){return; }}} // ledYellow for(int i =0; i <=255; i ++){analogWrite(ledYellow、i); for(int y =0; y <400; y ++){//ボタンが離された場合if(digitalRead(button)==LOW){return; }}} for(int i =255; i> =0; i-){analogWrite(ledYellow、i); for(int y =0; y <400; y ++){//ボタンが離された場合if(digitalRead(button)==LOW){return; }}} // ledGreen for(int i =0; i <=255; i ++){analogWrite(ledGreen、i); for(int y =0; y <1000; y ++){//ボタンが離された場合if(digitalRead(button)==LOW){return; }}}} 

回路図


製造プロセス

  1. MPU-6050を搭載したArduinoジャイロスコープゲーム
  2. PythonでArduinoとRFIDを使用した出席システム
  3. LEDとピエゾスピーカーを備えたDHT11センサー
  4. ARDUINOを使用した超音波浮揚機
  5. Unopad-Abletonを搭載したArduinoMIDIコントローラー
  6. Arduinoを使用した自動植物散水システム
  7. Arduinoを搭載したシンプルな障害物センサー
  8. Find Me
  9. Arduinoを使用して地球の質量を測定する方法
  10. arduinoを使用したソナーと処理IDEでの表示
  11. ArduinoUnoを使用した25kHz4ピンPWMファン制御