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

Chronomètre Arduino simple

Composants et fournitures

Arduino UNO
tout arduino.. et parfois pas seulement
× 1
bouton (non verrouillable)
avec une résistance pulldown (j'utilise 1kohm)
× 1
Résistance 10k ohm
× 1

Applications et services en ligne

Arduino IDE

À propos de ce projet

Je suis sur le point de faire un projet amusant et j'avais besoin d'un chronomètre Arduino qui fonctionne chaque fois que j'appuie sur un bouton. Ce n'est pas une chose complexe mais j'ai pensé que ce morceau de code serait utile pour les projets d'autres personnes.

Je vous ai probablement épargné 1h de codage de votre vie.

EEPROM :

Mémoire d'Arduino qui ne perd pas ses informations lorsque vous déconnectez l'alimentation ou réinitialisez la carte. (info). J'utilise #include bibliothèque qui fait tout en gros et qui est déjà installée par défaut.

INTERRUPTIONS :

Des choses se passent à l'intérieur de notre Arduino, mais nous voulons qu'il arrête de faire ce qu'il se passait et s'occupe de notre fonction ISR lorsqu'une broche est tirée HAUT, par exemple. Aucune bibliothèque supplémentaire n'est nécessaire ici :

Le code du projet :

  • Définit et inclut :
#include  #define interruptPin 2 #define eeAddress 0 //ADRESSE POUR L'EEPROM DE L'ARDUINO (mémoire interne non volatile) float starttime =0; //Variables pour faire le calcul flottant endtime=0; float resulttime=0, oldresulttime=0 ;  

Rien de nouveau ici, nous incluons la bibliothèque EEPROM, nous décidons où le bouton va être attaché (pin2).

Ensuite, j'ai décidé d'utiliser l'adresse 0 de notre mémoire EEPROM pour stocker notre temps (float=4octets). Arduino UNO a 1024 octets (puce ATmega328) mais j'ai choisi l'adresse 0 car j'essayais de m'organiser pour une fois dans ma vie.

  • configuration()
void setup() { Serial.begin(9600); while (!Série) {; // attend que le port série se connecte. Nécessaire uniquement pour le port USB natif } Serial.println("Les communications série sont prêtes monsieur ! :.. bip bip"); attachInterrupt(digitalPinToInterrupt(interruptPin), refreshTime, CHANGE);}  

Truc habituel, nous initions des communications série entre l'Arduino et notre PC (9600 bauds) :

attachInterrupt(digitalPinToInterrupt(interruptPin), refreshTime, CHANGE); 

Attachinterrupt active la fonction lorsque le niveau logique de interruptPin change ainsi :(____________-ICI------------------_ICI____________).

De cette façon, il se déclenche deux fois au début de notre pressage et à la fin. Si rien ne se passe, notre valeur interruptPin reste FAIBLE à cause de notre résistance pulldown "la forçant" à rester faible.

  • boucle()
boucle vide() { }  

Rien. Mettez vos affaires là-dedans !

  • Autres fonctions :
void refreshTime(){ if(digitalRead(interruptPin)){ starttime=millis(); Serial.print("Heure de début :"); Serial.println(starttime); } else if(digitalRead(interruptPin)==LOW){ endtime=millis(); resulttime=endtime-starttime ; Serial.print("Heure de fin :"); Serial.println (heure de fin); Serial.print("Heure du résultat :"); Serial.println(resulttime); WhatsNewEeprom (); // stocke l'eeprom }  

C'est la fonction qui va être exécutée lorsque l'interruption de la broche (interruptPin) se produit.

L'interruption est déclenchée à chaque fois que l'état de l'interruptionPin change (HIGH à LOW ou LOW à HIGH), ceux si (...) sont destinés à détecter si c'est le changement HIGH->LOW ou LOW->high.

Stocke le temps enregistré par l'horloge interne d'Arduino millis () et fait la différence pour que notre temps de résultat soit prêt. A la fin, il stocke de nouvelles informations dans l'eeprom :

void WhatsNewEeprom(){ Serial.println("-----------checking eeprom"); EEPROM.get( eeAddress, oldresulttime ); Serial.print("oldresulttime");Serial.println(oldresulttime); Serial.print("resulttime");Serial.println(resulttime); if(resulttime!=oldresulttime){ EEPROM.put( eeAddress, resulttime); Serial.print("-----Ding!Nouvelle heure enregistrée dans l'eeprom :");Serial.println(resulttime); }else{ Serial.println("Aucune nouvelle heure trouvée, l'eeprom n'a pas été perturbée"); }  

Celui-ci vérifie si la valeur temporelle stockée dans l'eeprom est la même que celle que nous avons dans notre variable "resulttime", si c'est le cas nous ne l'avons pas modifiée, alors ne faites rien.

Supplémentaire! Anti-rebond de notre bouton :

Nous, les humains, sommes extrêmement lents pour le temps de traitement d'Arduino, une pression sur le bouton nous semble rapide, mais pour Arduino, c'est vraiment lent, ce qui fait "rebondir" le signal comme changer de highlowhighlowhighlow plusieurs fois avant de régler le véritable statut.

Si nous le voulons (je ne l'ai pas fait), nous pouvons le réparer via du matériel ou un logiciel :

  • Rebond via logiciel
  • Debounce via hardware, utilisez un condensateur !!! :D

Je vais juste ajouter un 220nF en parallèle (de sensepin à GND)

Le condensateur "mange" les variations rapides de tension,.

Code

  • chronomètre arduino
chronomètre arduinoArduino
utilise l'eeprom et les interruptions, facilement piratable
//codé par Javier Muñoz le 23/10/2017//questions et télégrammes signés à [email protected]#include #define interruptPin 2#define eeAddress 0 // ADRESSE POUR L'EEPROM DE L'ARDUINO (mémoire interne non volatile) float starttime =0; //Variables pour faire le calcul flottant endtime=0; float resulttime=0, oldresulttime=0 ; void setup() { Serial.begin(9600); while (!Série) {; // attend que le port série se connecte. Nécessaire uniquement pour le port USB natif } Serial.println("Les communications série sont prêtes monsieur ! :.. bip bip"); attachInterrupt(digitalPinToInterrupt(interruptPin), refreshTime, CHANGE);//active la fonction lorsque le niveau logique de interruptPin change ainsi :(__-ICI------------------_ICI____) de cette façon, il stocke l'heure à laquelle notre doigt appuyait sur le bouton}boucle vide() {//vos affaires ici//(eeprom stocké) la dernière fois mesurée en millisecondes "float resulttime"}void refreshTime(){ if(digitalRead(interruptPin) ){ starttime=millis(); Serial.print("Heure de début :"); Serial.println(starttime); } else if(digitalRead(interruptPin)==LOW){ endtime=millis(); resulttime=endtime-starttime ; Serial.print("Heure de fin :"); Serial.println (heure de fin); Serial.print("Heure du résultat :"); Serial.println(resulttime);WhatsNewEeprom(); }} void WhatsNewEeprom(){ Serial.println("-----------checking eeprom"); EEPROM.get( eeAddress, oldresulttime ); Serial.print("oldresulttime");Serial.println(oldresulttime); Serial.print("resulttime");Serial.println(resulttime); if(resulttime!=oldresulttime){ EEPROM.put( eeAddress, resulttime); Serial.print("-----Ding!Nouvelle heure enregistrée dans l'eeprom :");Serial.println(resulttime); }else{ Serial.println("Aucune nouvelle heure trouvée, l'eeprom n'a pas été perturbée"); }}

Schémas

connexion simple d'un bouton avec une résistance pulldown chronomètre_APM32Y9FoM.fzz

Processus de fabrication

  1. Horloge murale simple utilisant Adafruit 1/4 60 Ring Neopixel
  2. Horloge de mots simple (Arduino)
  3. Oscilloscope Arduino 20 kHz simple bricolage sur écran LCD Nokia 5110
  4. Arduino Spybot
  5. FlickMote
  6. Téléviseur maison B-Gone
  7. horloge maîtresse
  8. Capteur d'obstacles simple avec Arduino
  9. Réveil simple avec DS1302 RTC