Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

minuterie de cuisine Arduino

Composants et fournitures

Arduino UNO
× 1
Adafruit Standard LCD - 16x2 Blanc sur Bleu
× 1
Interrupteur à bouton-poussoir SparkFun 12mm
× 4
Résistance 10k ohm
× 4
Résistance 221 ohm
Eh bien, 220 ohms...
× 2
Potentiomètre à un tour - 100k ohms
× 1
Sonnerie
× 1
Planche à pain (générique)
× 1
Câbles de raccordement (générique)
× 1

À propos de ce projet

Au commencement, Dieu créa le ciel et la terre. Et les êtres humains. Et les êtres humains ont créé des minuteries de cuisine numériques, comme celle-ci.

Et les êtres humains ont dit, Cool mais un peu lugubre. Faisons-en un meilleur !

Et Dieu dit, j'ai entendu ton appel, qu'il y ait des Arduinos :et il y avait des Arduinos sur toute la terre, et c'était bien.

Et les êtres humains ont pris un Arduino et ont créé une meilleure minuterie de cuisine, comme celle-ci.

Et Dieu a vu le nouveau minuteur de cuisine et a dit :j'ai vu votre nouveau minuteur de cuisine et il a l'air affreux , mais cela semble trop amusant ! Et c'est bien . :-)

Ce dont vous avez besoin

Maintenant que vous savez d'où vient tout cela, approfondissons-y.

Tous les composants que j'ai utilisés proviennent du Kit de démarrage Arduino , y compris la petite maquette que vous voyez sur les photos et dans la vidéo. N'hésitez pas à intégrer le projet dans un plus grand , si vous le souhaitez.

Vous aurez également besoin d'une source d'alimentation :pour jouer, le port USB et le câble du PC suffiront.

Ce que vous devez faire

Premièrement :veuillez rassembler tous les composants nécessaires dans le kit de démarrage ou dans votre bac à composants préféré ; si vous n'en avez pas, ne paniquez pas. Il y a beaucoup de sur Internet. Vous pouvez trouver la liste des composants ci-dessous.

Et bien, vous aurez aussi besoin du code. C'est dans sa boite, encore en dessous.

Comment ça marche

Fondamentalement, comme tout autre appareil similaire, vous pouvez acheter pour un dollar dans n'importe quel magasin près de chez vous. Mais ce est le vôtre . Et cela vous montrera comment ces petits gadgets fonctionnent réellement.

Le mot-clé ici est :mode actuel . Le minuteur lui-même ne peut fonctionner que dans un des quatre modes à la fois :

  • IDLE - la minuterie attend votre entrée, indiquant la durée actuellement définie ; c'est également le mode initial après la mise sous tension ou la réinitialisation.
  • SETUP - vous pouvez entrer dans ce mode en appuyant longuement sur S4 (dans le code, cela s'appelle également "bouton de réinitialisation"); ici, en utilisant S3 ("bouton start stop"), vous pouvez choisir la valeur à modifier afin de régler le temps écoulé à décompter ultérieurement ; enfin, en utilisant respectivement S2 ("bouton bas") et S1 ("bouton haut"), vous pouvez diminuer ou augmenter la valeur choisie (heures, minutes ou secondes).
  • RUNNING - Vous pouvez entrer dans ce mode en appuyant sur S3, tout en le quittant, il faudra à la fois S3 ou S4 (ce qui vous mènera au mode IDLE).
  • SONNERIE - Lorsque la durée souhaitée est écoulée, ce mode est automatiquement activé ; vous pouvez le quitter (c'est-à-dire faire en sorte que le petit garçon arrête de sonner) en appuyant sur n'importe quel interrupteur.

Le code

Tout d'abord, nous devons inclure les bibliothèques appropriées :

#include 
#include

Si vous ne les avez pas déjà, vous devrez les télécharger et les installer :

  • Paul Stoffregen's Temps Bibliothèque (veuillez télécharger le ZIP à partir du bouton vert "Cloner ou télécharger")
  • Bibliothèque Arduino LiquidCrystal

Ensuite, initialiser ce joli module LCD :

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

N'hésitez pas à brouiller les broches à votre guise afin d'obtenir un joli schéma de câblage :ne me suivez pas là-dedans, j'ai fait un terrible plan de câblage ! :D Par exemple, vous pouvez inverser les quatre dernières broches dans la déclaration ci-dessus afin d'éviter le croisement des fils jaunes que vous pouvez voir dans le schéma ci-dessous (évidemment, vous devrez ajuster les constantes des broches du bouton en conséquence, voir ci-dessous). Jouez, amusez-vous ! La vie avec Arduinos commence juste après ce copier/coller !

Les 51 lignes de code suivantes contiennent la déclaration et l'initialisation des variables statiques. N'hésitez pas à les parcourir, leurs noms clairs comme du cristal et quelques commentaires épars vous aideront à comprendre le tout.

La fonction setup () exécute les étapes préliminaires habituelles que vous avez vues des milliards de fois dans n'importe quel croquis Arduino et jusqu'à présent. La seule déclaration notable est la première, qui définira la position initiale du curseur de l'écran LCD. Parce que, oui :ce module vous demande de configurer une position le long de ses lignes et de ses colonnes, puis d'"imprimer" quelque chose, qui apparaîtra à partir de cette position.

Passons maintenant à la fonction loop().

Tout d'abord, découvrons les statuts des switchs. Pour ce faire, le bloc de code suivant est utilisé pour presque chacun d'eux :

/*
* Gestion des boutons Start/Stop
*/
startStopButtonPressed =false;
startStopButtonState =digitalRead(startStopButtonPin);
if(startStopButtonState !=startStopButtonPrevState)
{
startStopButtonPressed =startStopButtonState ==HIGH;
startStopButtonPrevState =startStopButtonState;
}

Un digitalRead est émis contre la broche associée et le résultat est comparé à une valeur précédemment lue :si quelque chose a changé, la nouvelle valeur est stockée pour référence future et la variable statique booléenne "xxxButtonPressed" est définie sur true si le bouton est enfoncé.

En regardant le schéma de circuit ci-dessous, vous remarquerez que chaque broche d'entrée est forcée à LOW par une résistance de 10k à moins que l'interrupteur correspondant ne soit enfoncé et que la broche elle-même soit directement connectée à +5V. Un scénario assez classique, hein ?

Auparavant, je disais "presque chacun d'eux" car il y a un bouton qui agit d'une manière différente des autres :S4. Son bloc de code est capable de détecter l'appui long susmentionné afin d'entrer en mode SETUP.

Vient ensuite le commutateur de bloc de gestion de mode :chaque cas examine les déclencheurs d'état du bouton ("xxxButtonPressed") et redirige le flux vers le nouvel état approprié, ou effectue l'action appropriée.

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)
{
// DÉMARRAGE DE LA MINUTERIE !
startTime =now();
}
}
pause ;

L'extrait de code précédent montre comment le mode IDLE est géré, et il est assez explicite. Un autre exemple montre comment appuyer sur n'importe quel bouton pendant la sonnerie l'arrêtera :

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

Ça a l'air facile, n'est-ce pas ? :-) Ça l'est.

Le bloc suivant - "Gestion du temps" - effectue le calcul du décalage horaire réel, déclenche le mode SONNERIE et sonne le buzz quand il est temps de le faire.

Le dernier bloc - "Gestion LCD" - gère l'affichage LCD pour chaque mode en imprimant les chaînes appropriées à leurs emplacements appropriés.

C'est tout.

Conclusion et action !

Maintenant que ce petit chiot n'a plus de secrets pour vous, voyons-le en action. Merci d'avoir regardé et amusez-vous bien !


Code

  • ArduinoSketch
ArduinoSketchArduino
/************************************************ **** * Arduino Kitchen Timer v1.0 - 2016/01/27 * Par Angelo Fiorillo (Rome, IT) * Ce travail est distribué sous GNU General * Public License version 3 ou ultérieure (GPL3+) * Veuillez inclure ce crédit notez si vous souhaitez * réutiliser n'importe quelle partie de ce croquis. Respectez mon travail* comme je le ferai avec le vôtre. * N'hésitez pas à me contacter :[email protected] * ************************************* ***********/#include #include // FIX 2018-08-12 Ce correctif « maintenant n'a pas été déclaré dans cette étendue » errorLiquidCrystal lcd( 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; // Combien d'heures seront décomptées au démarrageint setupMinutes =0; // Combien de minutes seront décomptées au démarrageint setupSeconds =0; // Combien de secondes comptera à rebours quand starttime_t setupTime =0;int currentHours =0;int currentMinutes =0;int currentSeconds =0;time_t currentTime =0;time_t startTime =0;time_t elapsedTime =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 resetLboongPress =LOW;bool false; 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=inactif 1=setup 2=running 3=ringing // Power up --> inactif // Reset --> inactif // Start/Stop --> start or stop counter // Up/Down --> NOP // Réinitialiser (appui long) --> entrer dans la configuration // Démarrer/Arrêter --> sélectionner les données // Haut --> augmenter la valeur des données actuelles // Bas --> diminuer la valeur des données actuelles // Réinitialiser --> quitter la configuration (inactif)int dataSelection =0; // Données actuellement sélectionnées pour modification (mode de configuration, changements avec Start/Stop) // 0=heures (00-99) 1=minutes (00-59) 2=secondes (00-59)void setup() { // mettez votre code d'installation ici, à exécuter une fois :lcd.begin (16, 2); pinMode(resetButtonPin, INPUT); pinMode(startStopButtonPin, INPUT); pinMode(upButtonPin, INPUT); pinMode(downButtonPin, INPUT); pinMode(buzzerPin, SORTIE); Serial.begin(9600);}void loop() { // mettez votre code principal ici, pour l'exécuter à plusieurs reprises :startStopButtonPressed =false ; upButtonPressed =false; downButtonPressed =false; /* * Gestion des boutons de réinitialisation */ resetButtonPressed =false; resetButtonLongPressed =false; resetButtonState =digitalRead(resetButtonPin); if(resetButtonState !=resetButtonPrevState) { resetButtonPressed =resetButtonState ==HIGH; resetButtonPrevState =resetButtonState; } else // Gestion des appuis longs... { if(resetButtonState ==HIGH) { resetButtonLongPressCounter++; if(resetButtonLongPressCounter ==100) { resetButtonPressed =false; resetButtonLongPressed =true; resetButtonLongPressCounter =0; } } else { resetButtonLongPressCounter =0; resetButtonPressed =false; resetButtonLongPressed =false; } } /* * Gestion des boutons Start/Stop */ startStopButtonPressed =false; startStopButtonState =digitalRead(startStopButtonPin); if(startStopButtonState !=startStopButtonPrevState) { startStopButtonPressed =startStopButtonState ==HIGH; startStopButtonPrevState =startStopButtonState; } /* * Gestion des boutons bas */ downButtonPressed =false; downButtonState =digitalRead(downButtonPin); if(downButtonState !=downButtonPrevState) { downButtonPressed =downButtonState ==HIGH; downButtonPrevState =downButtonState; } /* * Gestion des boutons haut */ upButtonPressed =false; upButtonState =digitalRead(upButtonPin); if(upButtonState !=upButtonPrevState) { upButtonPressed =upButtonState ==HIGH; upButtonPrevState =upButtonState; } /* * Gestion des modes */ 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) { // DEMARRAGE DE LA MINUTERIE ! startTime =now(); } } Pause; case MODE_SETUP:if(resetButtonPressed) { // Quitter le mode de configuration setupTime =setupSeconds + (60 * setupMinutes) + (3600 * setupHours); currentHours =setupHours; currentMinutes =setupMinutes; currentSeconds =setupSeconds; dataSelection =0; currentMode =MODE_IDLE; } if(startStopButtonPressed) { // Sélectionnez les données suivantes pour ajuster dataSelection++; if(dataSelection ==3) { dataSelection =0; } } if(downButtonPressed) { switch(dataSelection) { case 0 :// heures setupHours-- ; if(setupHours ==-1) { setupHours =99; } Pause; cas 1 :// minutes setupMinutes--; if(setupMinutes ==-1) { setupMinutes =59; } Pause; case 2:// secondes setupSeconds--; if(setupSeconds ==-1) { setupSeconds =59; } Pause; } } if(upButtonPressed) { switch(dataSelection) { case 0 :// heures setupHours++ ; if(setupHours ==100) { setupHours =0; } Pause; cas 1 :// minutes setupMinutes++ ; if(setupMinutes ==60) { setupMinutes =0; } Pause; case 2 :// secondes setupSeconds++ ; if(setupSeconds ==60) { setupSeconds =0; } Pause; } } Pause; case MODE_RUNNING :if(startStopButtonPressed) { currentMode =MODE_IDLE ; } if(resetButtonPressed) { Reset(); currentMode =MODE_IDLE; } Pause; case MODE_RINGING:if(resetButtonPressed || startStopButtonPressed || downButtonPressed || upButtonPressed) { currentMode =MODE_IDLE; } Pause; } /* * Gestion du temps */ switch(currentMode) { case MODE_IDLE:case MODE_SETUP:// NOP break; case MODE_RUNNING :currentTime =setupTime - (now() - startTime); if(currentTime <=0) { currentMode =MODE_RINGING; } Pause; cas MODE_RINGING:analogWrite(buzzerPin, 20); retard(20); analogWrite(buzzerPin, 0); retard (40); Pause; } /* * Gestion LCD */ //lcd.clear(); lcd.setCursor(0, 0); switch(currentMode) { case MODE_IDLE:lcd.print("Timer ready "); lcd.setCursor(0, 1); lcd.print(currentHours); lcd.print(" "); lcd.print(currentMinutes); lcd.print(" "); lcd.print(currentSecondes); lcd.print(" "); Pause; case MODE_SETUP:lcd.print("Mode de configuration:"); switch(dataSelection) { case 0:lcd.print("HRS "); Pause; cas 1 :lcd.print("MINS"); Pause; cas 2 :lcd.print("SECS"); Pause; } lcd.setCursor(0, 1); lcd.print(setupHours); lcd.print(" "); lcd.print(setupMinutes); lcd.print(" "); lcd.print(setupSecondes); lcd.print(" "); Pause; case MODE_RUNNING :lcd.print("Compte à rebours..."); lcd.setCursor(0, 1); if(hour(currentTime) <10) lcd.print("0"); lcd.print (heure (heure actuelle)); 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)); Pause; case MODE_RINGING :lcd.print(" RING-RING ! "); lcd.setCursor(0, 1); lcd.print(" "); Pause; } delay(10);}void Reset(){ currentMode =MODE_IDLE; currentHours =setupHours; currentMinutes =setupMinutes; currentSeconds =setupSeconds;}

Schémas

Vous pouvez utiliser n'importe quelle maquette à usage général, y compris le kit de démarrage qui est plus petit que celui illustré ici (le buzzer peut être placé sous les fils jaunes, voir la vidéo et les photos).

Processus de fabrication

  1. Alarme de soif d'usine
  2. Oscilloscope Arduino 20 kHz simple bricolage sur écran LCD Nokia 5110
  3. Stores intelligents
  4. Horloge de mots italienne
  5. compte à rebours Arduino
  6. Compteur kWh Sigfox
  7. Moniteur de température Bluetooth
  8. Une entrée analogique isolée pour Arduino
  9. Mesurez votre temps de réaction