Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Cronômetro Arduino simples

Componentes e suprimentos

Arduino UNO
qualquer arduino .. e às vezes não apenas
× 1
botão (sem travamento)
com um resistor suspenso (eu uso 1kohm)
× 1
Resistor 10k ohm
× 1

Aplicativos e serviços online

Arduino IDE

Sobre este projeto


Estou prestes a fazer um projeto divertido e precisava de um cronômetro Arduino que funcionasse sempre que pressiono um botão. Não é uma coisa complexa, mas achei que esse pedaço de código seria útil para projetos de outras pessoas.

Provavelmente economizei 1h de sua vida codificando.





EEPROM:


Memória do Arduino que não perde sua informação quando você desliga a energia ou reinicializa a placa. (Informação). Estou usando #include biblioteca que basicamente faz tudo e já está instalada por padrão.





INTERRUPTS:


Coisas estão acontecendo dentro de nosso Arduino, mas queremos que ele pare de fazer o que estava acontecendo e atenda a nossa função ISR quando algum pino é puxado para ALTO, por exemplo. Nenhuma biblioteca extra necessária aqui:





O código do projeto:

  • Define e inclui:
  #include  #define interruptPin 2 #define eeAddress 0 // ENDEREÇO ​​PARA ARDUINO´S EEPROM (memória interna não volátil) float starttime =0; // Variáveis ​​para fazer a matemática float endtime =0; float resulttime =0, oldresulttime =0;  

Nada de novo aqui, incluímos a biblioteca EEPROM, decidimos onde o botão será anexado (pin2).

Então eu decidi que vou usar o endereço 0 de nossa memória EEPROM para armazenar nosso tempo (float =4 bytes). O Arduino UNO tem 1024 bytes (chip ATmega328) mas escolhi o endereço 0 porque estava tentando me organizar para uma vez na vida.
  • configuração ()
  void setup () {Serial.begin (9600); while (! Serial) {; // aguarde a conexão da porta serial. Necessário apenas para porta USB nativa} Serial.println ("Comunicações seriais prontas, senhor!:.. bip bip"); attachInterrupt (digitalPinToInterrupt (interruptPin), refreshTime, CHANGE);}  

Coisas normais, iniciamos comunicações seriais entre o Arduino e nosso PC (9600 bauds):
  attachInterrupt (digitalPinToInterrupt (interruptPin), refreshTime, CHANGE);  

Attachinterrupt ativa a função quando o nível lógico de interruptPin muda, então: (____________- AQUI ------------------_ AQUI____________).

Desta forma, ele dispara duas vezes no início de nossa prensagem e no final. Se nada acontecer, nosso valor de interruptPin permanece BAIXO por causa de nosso resistor suspenso "forçando-o" a permanecer baixo.
  • loop ()
  void loop () {}  

Nenhuma coisa. Coloque suas coisas lá!
  • Outras funções:
  void refreshTime () {if (digitalRead (interruptPin)) {starttime =millis (); Serial.print ("Hora de início:"); Serial.println (hora de início); } else if (digitalRead (interruptPin) ==LOW) {endtime =millis (); resulttime =endtime-starttime; Serial.print ("Hora de término:"); Serial.println (hora de término); Serial.print ("Tempo do resultado:"); Serial.println (resulttime); WhatsNewEeprom (); // armazena eeprom}  

Esta é a função que será executada quando ocorrer a interrupção no pin (interruptPin).

A interrupção é acionada toda vez que o status no interruptPin muda (HIGH para LOW ou LOW para HIGH), aqueles se (...) são para detectar se é a mudança HIGH-> LOW ou LOW-> high.

Armazena o tempo registrado pelo relógio interno do Arduino millis () e faz a diferença por ter nosso tempo de resultado pronto. No final, ele armazena novas informações na eeprom:
  void WhatsNewEeprom () {Serial.println ("----------- verificar 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! Novo horário registrado no eeprom:"); Serial.println (resulttime); } else {Serial.println ("Nenhum novo horário encontrado, eeprom não foi perturbado"); }  

Este verifica se o valor de tempo armazenado na eeprom é o mesmo que temos em nossa variável "resulttime", se for o caso não o alteramos, então não faça nada.





Extra! Retirando nosso botão:


Nós, humanos, somos extremamente lentos para o tempo de processamento do Arduino, um toque no botão parece rápido para nós, mas para o Arduino é muito lento, o que faz o sinal "saltar" como alternar alto-baixo-alto-baixo-baixo algumas vezes antes de definir o verdadeiro status.

Se quisermos (não quis), podemos consertar por meio de hardware ou software:
  • Debounce via software
  • Debounce via hardware, use um capacitor !!! :D





Vou apenas adicionar 220nF em paralelo (de sensepin para GND)

O capacitor "come" variação rápida de voltagem.

Código

  • cronômetro arduino
cronômetro arduino Arduino
usa eeprom e interrupções, facilmente hackeáveis ​​
 // codificado por Javier Muñoz 23/10/2017 // perguntas e telegramas isolados para [email protected]#include  #define interruptPin 2 # define eeAddress 0 // ENDEREÇO ​​PARA ARDUINO'S EEPROM (memória interna não volátil) float starttime =0; // Variáveis ​​para fazer a matemática float endtime =0; float resulttime =0, oldresulttime =0; void setup () {Serial.begin (9600); while (! Serial) {; // aguarde a conexão da porta serial. Necessário apenas para porta USB nativa} Serial.println ("Comunicações seriais prontas, senhor!:.. bip bip"); attachInterrupt (digitalPinToInterrupt (interruptPin), refreshTime, CHANGE); // ativa a função quando o nível lógico de interruptPin muda, então:(__- HERE ------------------_ HERE____) dessa forma, ele armazena o tempo que nosso dedo pressionou o botão} void loop () {// suas coisas aqui // (eeprom armazenado) da última vez medido em milissegundos "float resulttime"} void refreshTime () {if (digitalRead (interruptPin) ) {hora de início =milis (); Serial.print ("Hora de início:"); Serial.println (hora de início); } else if (digitalRead (interruptPin) ==LOW) {endtime =millis (); resulttime =endtime-starttime; Serial.print ("Hora de término:"); Serial.println (hora de término); Serial.print ("Tempo do resultado:"); Serial.println (tempo de resultado); WhatsNewEeprom (); }} void WhatsNewEeprom () {Serial.println ("----------- verificando 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! Novo horário registrado no eeprom:"); Serial.println (resulttime); } else {Serial.println ("Nenhum novo horário encontrado, eeprom não foi perturbado"); }} 

Esquemas

conexão simples de um botão com um resistor suspenso chronometer_APM32Y9FoM.fzz

Processo de manufatura

  1. Relógio de parede simples usando Adafruit 1/4 60 Ring Neopixel
  2. Simple Word Clock (Arduino)
  3. DIY Simple 20 kHz Arduino Oscilloscope no Nokia 5110 LCD
  4. Arduino Spybot
  5. FlickMote
  6. TV B-Gone caseiro
  7. Relógio mestre
  8. Sensor de obstáculo simples com Arduino
  9. Encontre-me
  10. Despertador simples com DS1302 RTC