Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Cronómetro Arduino simple

Componentes y suministros

Arduino UNO
cualquier arduino ... ya veces no solo
× 1
botón (sin cierre)
con una resistencia desplegable (yo uso 1kohm)
× 1
Resistencia de 10k ohmios
× 1

Aplicaciones y servicios en línea

Arduino IDE

Acerca de este proyecto

Estoy en camino de hacer un proyecto divertido y necesitaba un cronómetro Arduino que funcione cada vez que presiono un botón. No es algo complejo, pero pensé que este código sería útil para los proyectos de otras personas.

Probablemente te salvé 1h de tu vida codificando.

EEPROM:

Memoria de Arduino que no pierde su información cuando desconecta la energía o reinicia la placa (info). Estoy usando #include biblioteca que básicamente hace todo y ya está instalada por defecto.

INTERRUPCIONES:

Están sucediendo cosas dentro de nuestro Arduino, pero queremos que deje de hacer lo que sea que esté pasando y que preste atención a nuestra función ISR cuando, por ejemplo, un pin se coloca en ALTO. No se necesita biblioteca adicional aquí:

El código del proyecto:

  • Define e incluye:
  #include  #define interruptPin 2 #define eeAddress 0 // ADDRESS FOR THE ARDUINO´S EEPROM (memoria interna no volátil) float starttime =0; // Variables para hacer las matemáticas float endtime =0; tiempo resultado flotante =0, tiempo resultado antiguo =0;  

Nada nuevo aquí incluimos la biblioteca EEPROM, decidimos dónde se va a adjuntar el botón (pin2).

Entonces decidí que usaría la dirección 0 de nuestra memoria EEPROM para almacenar nuestro tiempo (float =4bytes). Arduino UNO tiene 1024 bytes (chip ATmega328) pero elijo la dirección 0 porque estaba tratando de organizarme por una vez en mi vida.

  • configuración ()
  void setup () {Serial.begin (9600); while (! Serial) {; // espera a que se conecte el puerto serie. Necesario solo para puerto USB nativo} Serial.println ("¡Las comunicaciones en serie están listas, señor!:.. bip bip"); attachInterrupt (digitalPinToInterrupt (interruptPin), refreshTime, CHANGE);}  

Cosas habituales, iniciamos comunicaciones en serie entre Arduino y nuestra PC (9600 baudios):

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

Attachinterrupt activa la función cuando el nivel lógico de interruptPin cambia así: (____________- AQUÍ ------------------_ AQUÍ____________).

De esta forma se dispara dos veces al inicio de nuestro prensado y al final. Si no sucede nada, nuestro valor de interruptPin permanece BAJO debido a que nuestra resistencia de extracción "lo obliga" a permanecer bajo.

  • bucle ()
  bucle vacío () {}  

Nada. ¡Pon tus cosas ahí!

  • Otras funciones:
  void refreshTime () {if (digitalRead (interruptPin)) {starttime =millis (); Serial.print ("Hora de inicio:"); Serial.println (hora de inicio); } else if (digitalRead (interruptPin) ==LOW) {endtime =millis (); resulttime =endtime-starttime; Serial.print ("Hora de finalización:"); Serial.println (hora de finalización); Serial.print ("Hora de resultado:"); Serial.println (tiempo de resultado); WhatsNewEeprom (); // almacena eeprom}  

Esta es la función que se ejecutará cuando ocurra la interrupción en el pin (interruptPin).

La interrupción se dispara cada vez que el estado en el interruptor de interrupción cambia (HIGH a LOW o LOW a HIGH), los if (...) son para detectar si es el cambio HIGH-> LOW o LOW-> alto.

Almacena el tiempo registrado por el reloj interno de Arduino millis () y hace la diferencia por tener listo nuestro tiempo de resultado. Al final, almacena nueva información en eeprom:

  void WhatsNewEeprom () {Serial.println ("----------- comprobando eeprom"); EEPROM.get (eeAddress, oldresulttime); Serial.print ("oldresulttime"); Serial.println (oldresulttime); Serial.print ("tiempo de resultado"); Serial.println (tiempo de resultado); if (resulttime! =oldresulttime) {EEPROM.put (eeAddress, resulttime); Serial.print ("----- ¡Ding! Nuevo tiempo registrado en eeprom:"); Serial.println (resulttime); } else {Serial.println ("No se encontró una nueva hora, eeprom no fue perturbado"); }  

Este verifica si el valor de tiempo almacenado en eeprom es el mismo que tenemos en nuestra variable "resulttime", si es así, no lo cambiamos, así que no haga nada.

¡Extra! Desactivando nuestro botón:

Los humanos somos extremadamente lentos para el tiempo de procesamiento de Arduino, una pulsación del botón nos parece rápido, pero para Arduino es muy lento, eso hace que la señal "rebote" como cambiar alto bajo alto bajo alto bajo un par de veces antes de establecer el verdadero estado.

Si queremos (yo no lo hice), podríamos arreglarlo mediante hardware o software:

  • Rebote mediante software
  • Rebote mediante hardware, utilice un condensador. :D

Solo voy a agregar 220nF en paralelo (de sensepin a GND)

El condensador "come" variaciones rápidas de voltaje.

Código

  • cronómetro arduino
cronómetro arduino Arduino
utiliza eeprom e interrupciones, fáciles de piratear
 // codificado por Javier Muñoz 23/10/2017 // preguntas y telegramas chamuscados a [email protected]#include  #define interruptPin 2 # define eeAddress 0 // DIRECCIÓN PARA EL ARDUINO´S EEPROM (memoria interna no volátil) float starttime =0; // Variables para hacer las matemáticas float endtime =0; tiempo resultado flotante =0, tiempo resultado antiguo =0; configuración vacía () {Serial.begin (9600); while (! Serial) {; // espera a que se conecte el puerto serie. Necesario solo para puerto USB nativo} Serial.println ("¡Las comunicaciones en serie están listas, señor!:.. bip bip"); attachInterrupt (digitalPinToInterrupt (interruptPin), refreshTime, CHANGE); // activa la función cuando el nivel lógico de interruptPin cambia así:(__- AQUÍ ------------------_ AQUÍ____) de esta manera almacena el tiempo que nuestro dedo estuvo presionando el botón} void loop () {// tus cosas aquí // (eeprom almacenado) la última vez medida en milisegundos "float resulttime"} void refreshTime () {if (digitalRead (interruptPin) ) {hora de inicio =milis (); Serial.print ("Hora de inicio:"); Serial.println (hora de inicio); } else if (digitalRead (interruptPin) ==LOW) {endtime =millis (); resulttime =endtime-starttime; Serial.print ("Hora de finalización:"); Serial.println (hora de finalización); Serial.print ("Hora de resultado:"); Serial.println (tiempo de resultado); WhatsNewEeprom (); }} void WhatsNewEeprom () {Serial.println ("----------- comprobando eeprom"); EEPROM.get (eeAddress, oldresulttime); Serial.print ("oldresulttime"); Serial.println (oldresulttime); Serial.print ("tiempo de resultado"); Serial.println (tiempo de resultado); if (resulttime! =oldresulttime) {EEPROM.put (eeAddress, resulttime); Serial.print ("----- ¡Ding! Nuevo tiempo registrado en eeprom:"); Serial.println (resulttime); } else {Serial.println ("No se encontró una nueva hora, eeprom no fue perturbado"); }} 

Esquemas

conexión simple de un botón con una resistencia desplegable chronometer_APM32Y9FoM.fzz

Proceso de manufactura

  1. Reloj de pared simple con Adafruit 1/4 60 Ring Neopixel
  2. Reloj de palabras simple (Arduino)
  3. DIY Osciloscopio Arduino simple de 20 kHz en Nokia 5110 LCD
  4. Arduino Spybot
  5. FlickMote
  6. Televisión casera B-Gone
  7. Reloj maestro
  8. Sensor de obstáculos simple con Arduino
  9. Encuéntrame
  10. Arduino Power
  11. Reloj despertador simple con DS1302 RTC