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

Arduinoキッチンタイマー

コンポーネントと消耗品

>
Arduino UNO
× 1
Adafruit標準LCD-16x2白地に青
× 1
SparkFunプッシュボタンスイッチ12mm
× 4
抵抗10kオーム
× 4
抵抗221オーム
まあ、220オーム...
× 2
シングルターンポテンショメータ-100kオーム
× 1
ブザー
× 1
ブレッドボード(汎用)
× 1
ジャンパー線(汎用)
× 1

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

初めに、神は天と地を創造されました。そして人間。そして、人間はこのようなデジタルキッチンタイマーを作成しました。

<図>

そして人間は言った、「かっこいいけど少し陰気だ。より良いものを作ろう!

そして神は言われた、私はあなたの呼びかけを聞いた、Arduinosがあるようにしましょう:そして世界中にArduinosがありました、そしてそれは良かったです。

そして、人間はArduinoを使用して、このようなより優れたキッチンタイマーを作成しました。

<図>

そして神は新しいキッチンタイマーを見て言った:私はあなたの新しいキッチンタイマーを見ました、そしてそれはひどい 、でも面白すぎる !そしてそれは良いことです 。 :-)

必要なもの

これらすべてがどこから来たのかがわかったので、詳しく見ていきましょう。

私が使用したすべてのコンポーネントは、 Arduinoスターターキットからのものでした 、写真やビデオにある小さなブレッドボードを含みます。プロジェクトをより大きなプロジェクトに自由に収容してください 、必要に応じて。

電源も必要です。遊んでいる間は、PCのUSBポートとケーブルで十分です。

あなたがする必要があること

まず、スターターキットまたはお好みのコンポーネントビンから必要なすべてのコンポーネントを収集してください。お持ちでない場合でも、慌てる必要はありません。 たくさんがあります インターネット上で。以下にコンポーネントリストがあります。

そして、まあ、あなたもコードが必要になります。再び下の箱に入っています。

仕組み

基本的に、他の同様のデバイスと同様に、近くの店舗で1ドルで購入できます。しかし、これ あなたの 。そして、これはあなたに方法を示します それらの小さなガジェットは実際に機能します。

ここでのキーワードは次のとおりです:現在のモード 。タイマー自体は、一度に4つのモードのうち1つだけで実行できます。

  • IDLE-タイマーは入力を待機しており、現在設定されている時間量を示しています。これは、電源投入またはリセット後の初期モードでもあります。
  • セットアップ-S4を長押しすることでこのモードに入ることができます(コードではこれは「リセットボタン」とも呼ばれます)。ここでは、S3(「開始停止ボタン」)を使用して、後でカウントダウンする経過時間を設定するために変更する値を選択できます。最後に、それぞれS2(「下ボタン」)とS1(「上ボタン」)を使用して、選択した値(時間、分、または秒)を増減できます。
  • 実行中-S3を押すとこのモードに入ることができますが、そのままにしておくとS3またはS4の両方が必要になります(これによりIDLEモードになります)。
  • リンギング-必要な時間が経過すると、このモードは自動的にアクティブになります。いずれかのスイッチを押すことで、そのままにしておくことができます(つまり、小さな男の子の呼び出し音を止めることができます)。

コード

まず、含める必要があります 適切なライブラリ:

  #include  
#include

まだお持ちでない場合は、ダウンロードしてインストールする必要があります:

  • ポール Stoffregenの 時間 ライブラリ ZIP をダウンロードしてください 緑色の[クローンまたはダウンロード]ボタンから)
  • ArduinoLiquidCrystalライブラリ

次に、初期化しましょう その素敵なLCDモジュール:

  LiquidCrystal lcd(12、11、5、4、3、2);  

素敵な配線レイアウトを得るために、自由にピンをスクランブルしてください。私はひどい配線計画をしたので、これに従わないでください! :Dたとえば、下の回路図に示されている黄色のワイヤの交差を回避するために、上記のステートメントの後半の4つのピンを逆にすることができます(明らかに、それに応じてボタンのピン定数を調整する必要があります。以下を参照してください)。遊んで、楽しんでください! Arduinosでの生活は、そのコピー/貼り付けの直後から始まります!

次の51コード行には、静的変数の宣言と初期化が含まれています。それらを自由に閲覧してください。それらの明確な名前といくつかの散在するコメントは、全体を理解するのに役立ちます。

setup()関数は、これまでのArduinoスケッチで何億回も見た通常の準備手順を実行します。唯一の注目すべきステートメントは最初のもので、これは最初のLCDディスプレイカーソルの位置を設定します。なぜなら、そうです。このモジュールでは、行と列に沿って位置を設定してから、その位置から表示される何かを「印刷」する必要があります。

それでは、loop()関数に移りましょう。

まず、スイッチの状態を調べてみましょう。これを実現するために、次のコードブロックがほぼに使用されます。 それぞれ:

  / * 
*開始/停止ボタンの管理
* /
startStopButtonPressed =false;
startStopButtonState =digitalRead(startStopButtonPin);
if(startStopButtonState !=startStopButtonPrevState)
{
startStopButtonPressed =startStopButtonState ==HIGH;
startStopButtonPrevState =startStopButtonState;
}

関連するピンに対してdigitalReadが発行され、結果が以前に読み取られた値と比較されます。何かが変更された場合、新しい値が将来の参照用に保存され、ボタンが押された場合、bool "xxxButtonPressed"静的変数がtrueに設定されます。

以下の回路図を見ると、対応するスイッチが押され、ピン自体が+ 5Vに直接接続されていない限り、各入力ピンが10kの抵抗によって強制的にLOWになっていることがわかります。かなり古典的なシナリオですね

以前、「ほぼ S4。そのコードブロックは、セットアップモードに入るために前述の長押しを検出することができます。

次に、モード管理ブロックスイッチがあります。各ケースでボタン状態トリガー( "xxxButtonPressed")を確認し、フローを適切な新しい状態にリダイレクトするか、適切なアクションを実行します。

  case MODE_IDLE:
if(resetButtonPressed)
{
Reset();
}
if(resetButtonLongPressed)
{
currentMode =MODE_SETUP;
}
if(startStopButtonPressed)
{
currentMode =currentMode ==MODE_IDLE? MODE_RUNNING:MODE_IDLE;
if(currentMode ==MODE_RUNNING)
{
//タイマーを開始します!
startTime =now();
}
}
break;

前のコードスニペットは、IDLEモードがどのように管理されるかを示しており、かなり自明です。別の例は、呼び出し中にボタンを押すとボタンが停止する方法を示しています。

  case MODE_RINGING:
if(resetButtonPressed || startStopButtonPressed || downButtonPressed || upButtonPressed)
{
currentMode =MODE_IDLE;
}
break;

簡単そうですね。 :-)そうです。

次のブロック「時間管理」は、実際の時間差の計算を実行し、RINGINGモードをトリガーし、実際にリングします。 そうするときの話題。

最後のブロックである「LCD管理」は、適切な文字列を適切な場所に印刷することにより、各モードのLCDディスプレイを管理します。

それだけです。

まとめて行動しましょう!

この小さな子犬にはもう秘密がないので、実際に見てみましょう。ご覧いただきありがとうございます。楽しんでください。


コード

  • ArduinoSketch
ArduinoSketch Arduino
 / ********************************************** **** * Arduino Kitchen Timer v1.0-2016 / 01/27 * Angelo Fiorillo(ローマ、IT)*この作品はGNU Generalの下で配布されています* Public Licenseバージョン3以降(GPL3 +)*このクレジットを含めてください*このスケッチの一部を再利用したい場合は注意してください。私の仕事を尊重してください*あなたの仕事と同じように。 *お気軽にご連絡ください:[email protected] * ************************************* *********** /#include  #include  //修正2018-08-12この修正«「今」はこのスコープで宣言されていません»errorLiquidCrystallcd( 12、11、5、4、3、2); const int buzzerPin =10; const int resetButtonPin =6; const int startStopButtonPin =7; const int downButtonPin =8; const int upButtonPin =9; int setupHours =0; // startint setupMinutes =0の場合にカウントダウンされる時間数; // startint setupSeconds =0のときにカウントダウンする分数。 // starttime_t setupTime =0; int currentHours =0; int currentMinutes =0; int currentSeconds =0; time_t currentTime =0; time_t startTime =0; time_tlapsedTime =0; int resetButtonState =LOW; longの場合にカウントダウンする秒数resetButtonLongPressCounter =0; int startStopButtonState =LOW; int upButtonState =LOW; int downButtonState =LOW; int resetButtonPrevState =LOW; int startStopButtonPrevState =LOW; int upButtonPrevState =LOW; int downButtonPrevState =LOW; bool resetButtonPressed =false; bool resetButtonLongPressed =false; bool startStopButtonPressed =false; bool upButtonPressed =false; bool downButtonPressed =false; const int MODE_IDLE =0; const int MODE_SETUP =1; const int MODE_RUNNING =2; const int MODE_RINGING =3; int currentMode =MODE_IDLE; // 0 =アイドル1 =セットアップ2 =実行中3 =呼び出し中//電源投入->アイドル//リセット->アイドル//開始/停止->開始または停止カウンター//上/下-> NOP //リセット(長押し)->セットアップに入る//開始/停止->データ選択//上->現在のデータ値を増やす//下->現在のデータ値を減らす//リセット->セットアップを終了(idle)int dataSelection =0; //編集用に現在選択されているデータ(セットアップモード、開始/停止で変更)// 0 =時間(00-99)1 =分(00-59)2 =秒(00-59)void setup(){//セットアップコードをここに入力して、1回実行します。lcd.begin(16、2); pinMode(resetButtonPin、INPUT); pinMode(startStopButtonPin、INPUT); pinMode(upButtonPin、INPUT); pinMode(downButtonPin、INPUT); pinMode(buzzerPin、OUTPUT); Serial.begin(9600);} void loop(){//メインコードをここに配置して、繰り返し実行します。startStopButtonPressed=false; upButtonPressed =false; downButtonPressed =false; / **ボタン管理をリセットします* / resetButtonPressed =false; resetButtonLongPressed =false; resetButtonState =digitalRead(resetButtonPin); if(resetButtonState!=resetButtonPrevState){resetButtonPressed =resetButtonState ==HIGH; resetButtonPrevState =resetButtonState; } else //長押し管理... {if(resetButtonState ==HIGH){resetButtonLongPressCounter ++; if(resetButtonLongPressCounter ==100){resetButtonPressed =false; resetButtonLongPressed =true; resetButtonLongPressCounter =0; }} else {resetButtonLongPressCounter =0; resetButtonPressed =false; resetButtonLongPressed =false; }} / **開始/停止ボタンの管理* / startStopButtonPressed =false; startStopButtonState =digitalRead(startStopButtonPin); if(startStopButtonState!=startStopButtonPrevState){startStopButtonPressed =startStopButtonState ==HIGH; startStopButtonPrevState =startStopButtonState; } / **下ボタンの管理* / downButtonPressed =false; downButtonState =digitalRead(downButtonPin); if(downButtonState!=downButtonPrevState){downButtonPressed =downButtonState ==HIGH; downButtonPrevState =downButtonState; } / **上ボタンの管理* / upButtonPressed =false; upButtonState =digitalRead(upButtonPin); if(upButtonState!=upButtonPrevState){upButtonPressed =upButtonState ==HIGH; upButtonPrevState =upButtonState; } / **モード管理* / switch(currentMode){case MODE_IDLE:if(resetButtonPressed){Reset(); } if(resetButtonLongPressed){currentMode =MODE_SETUP; } if(startStopButtonPressed){currentMode =currentMode ==MODE_IDLE? MODE_RUNNING:MODE_IDLE; if(currentMode ==MODE_RUNNING){//タイマーを開始します! startTime =now(); } } 壊す; case MODE_SETUP:if(resetButtonPressed){//セットアップモードを終了setupTime =setupSeconds +(60 * setupMinutes)+(3600 * setupHours); currentHours =setupHours; currentMinutes =setupMinutes; currentSeconds =setupSeconds; dataSelection =0; currentMode =MODE_IDLE; } if(startStopButtonPressed){//次のデータを選択してdataSelection ++を調整します; if(dataSelection ==3){dataSelection =0; }} if(downButtonPressed){switch(dataSelection){case 0://時間setupHours--; if(setupHours ==-1){setupHours =99; } 壊す;ケース1://分setupMinutes--; if(setupMinutes ==-1){setupMinutes =59; } 壊す;ケース2://秒setupSeconds--; if(setupSeconds ==-1){setupSeconds =59; } 壊す; }} if(upButtonPressed){switch(dataSelection){case 0://時間setupHours ++; if(setupHours ==100){setupHours =0; } 壊す;ケース1://分setupMinutes ++; if(setupMinutes ==60){setupMinutes =0; } 壊す;ケース2://秒setupSeconds ++; if(setupSeconds ==60){setupSeconds =0; } 壊す; } } 壊す; case MODE_RUNNING:if(startStopButtonPressed){currentMode =MODE_IDLE; } if(resetButtonPressed){Reset(); currentMode =MODE_IDLE; } 壊す; case MODE_RINGING:if(resetButtonPressed || startStopButtonPressed || downButtonPressed || upButtonPressed){currentMode =MODE_IDLE; } 壊す; } / **時間管理* / switch(currentMode){case MODE_IDLE:case MODE_SETUP:// NOP break;ケースMODE_RUNNING:currentTime =setupTime-(now()-startTime); if(currentTime <=0){currentMode =MODE_RINGING; } 壊す;ケースMODE_RINGING:analogWrite(buzzerPin、20); delay(20); analogWrite(buzzerPin、0); delay(40);壊す; } / * * LCD管理* / //lcd.clear(); lcd.setCursor(0、0); switch(currentMode){case MODE_IDLE:lcd.print( "タイマー準備完了"); lcd.setCursor(0、1); lcd.print(currentHours); lcd.print( ""); lcd.print(currentMinutes); lcd.print( ""); lcd.print(currentSeconds); lcd.print( "");壊す;ケースMODE_SETUP:lcd.print( "セットアップモード:"); switch(dataSelection){ケース0:lcd.print( "HRS");壊す;ケース1:lcd.print( "MINS");壊す;ケース2:lcd.print( "SECS");壊す; } lcd.setCursor(0、1); lcd.print(setupHours); lcd.print( ""); lcd.print(setupMinutes); lcd.print( ""); lcd.print(setupSeconds); lcd.print( "");壊す;ケースMODE_RUNNING:lcd.print( "カウントダウン..."); lcd.setCursor(0、1); if(hour(currentTime)<10)lcd.print( "0"); lcd.print(hour(currentTime)); lcd.print( ":"); if(minute(currentTime)<10)lcd.print( "0"); lcd.print(minute(currentTime)); lcd.print( ":"); if(second(currentTime)<10)lcd.print( "0"); lcd.print(second(currentTime));壊す;ケースMODE_RINGING:lcd.print( "RING-RING!"); lcd.setCursor(0、1); lcd.print( "");壊す; } delay(10);} void Reset(){currentMode =MODE_IDLE; currentHours =setupHours; currentMinutes =setupMinutes; currentSeconds =setupSeconds;} 

回路図

ここに示されているものよりも小さいスターターキットを含む、任意の汎用ブレッドボードを使用できます(ブザーは黄色のワイヤーの下に配置できます。ビデオと写真を参照してください)。

製造プロセス

  1. 喉の渇き警報プラント警報
  2. Nokia 5110LCDのDIYシンプル20kHzArduinoオシロスコープ
  3. スマートブラインド
  4. イタリア語の単語時計
  5. Arduinoカウントダウンタイマー
  6. SigfoxkWhメーター
  7. Bluetooth温度モニター
  8. ジェスチャー制御ロック
  9. コンパニオンIC
  10. Arduino用の絶縁アナログ入力
  11. 反応時間を測定する