collapse

* Links de Robótica

* Posts Recentes

Palavras Cruzadas por Hugu
[Hoje às 00:54]


[Projecto] Bomba Airsoft por jm_araujo
[Ontem às 16:54]


Apresentação por Tech_JA
[Ontem às 09:19]


Medir Agua que está no Poço por filjoa
[21 de Setembro de 2017, 20:58]


URGENTE - display de 7 segmentos com backpack por helderjsd
[20 de Setembro de 2017, 12:30]


Preços e fabricantes de pcb por Sérgio_Sena
[19 de Setembro de 2017, 10:20]


Isaac Asimov - I, Robot por senso
[18 de Setembro de 2017, 03:41]


ic SL440 da Plessey? por senso
[16 de Setembro de 2017, 13:11]


Compra Colectiva RS-Amidata por brunus
[15 de Setembro de 2017, 22:31]


Ideias para construir um quadrúpede simples por zordlyon
[15 de Setembro de 2017, 10:18]

Autor Tópico: temporizador com o arduino  (Lida 9816 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline Sextafeira

  • Mini Robot
  • *
  • Mensagens: 75
temporizador com o arduino
« em: 30 de Maio de 2012, 00:12 »
Boas noites

antes demais peço desculpa por criar este tópico.

já vi e vi alguma informações sobre temporizador do arduino mas não percebi nada...:S


o meu problema é o seguinte....

eu carrego num botão para o led ligar, e ele permanece ligado.

para desligar tenho de carregar noutro botão é ele desliga.

mas agora queria implementar o seguinte, quando carrega se no botão para ligar o led, ao mesmo tempo liga-se um temporizador e ao fim de "x" tempo se não carrega-se no botão para desligar o led, o temporizador
desligava-o.

isto não é para 1 led mas sim, 16 led's


também já li uma informações sobre interrupts, mas não percebi nada...é que para eu entende tem de ser passo a passo, com legendas e desenhos xD

desde já obrigado
cumps

Offline Sextafeira

  • Mini Robot
  • *
  • Mensagens: 75
Re: temporizador com o arduino
« Responder #1 em: 30 de Maio de 2012, 18:58 »
ninguém pode dar uma mãozinha

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.390
  • Helpdesk do sitio
Re: temporizador com o arduino
« Responder #2 em: 30 de Maio de 2012, 22:35 »
Podes usar mais ou menos o conceito do blinky without delay, que usa o milis.
Em pseudo-código fazes algo assim:
if(butãoLed1 == HIGH){
 led1 = HIGH;
 tempoLed1 = milis();
}
//algures no main fazes
if(milis() - tempoLed1 > (1000*16)){  //1000ms * 16 = 16s
 led1 = LOW;
}
Avr fanboy

Offline Sextafeira

  • Mini Robot
  • *
  • Mensagens: 75
Re: temporizador com o arduino
« Responder #3 em: 30 de Maio de 2012, 23:29 »
Código: [Seleccione]

int entrabaixo=0; // Variavel de entrada
int entracima=0; // Variavel de Saida
int LDR=A0; // Variavel que contem o valor do LDR
int Sensorentra=0;
int Sensorsai=0;
const int tim=650;
long temp;

void setup() {
 
  Serial.begin(9600);
 
  pinMode(14, INPUT); // Sensor Entrada Escada
  pinMode(16, INPUT); // Sensor Saida Escada
 
  pinMode(22, OUTPUT); // Saida Reles ( LED'S)
  pinMode(23, OUTPUT); // Saida Reles ( LED'S)
  pinMode(24, OUTPUT); // Saida Reles ( LED'S)
  pinMode(25, OUTPUT); // Saida Reles ( LED'S)
  pinMode(26, OUTPUT); // Saida Reles ( LED'S) 
  pinMode(27, OUTPUT); // Saida Reles ( LED'S)
  pinMode(28, OUTPUT); // Saida Reles ( LED'S)
  pinMode(29, OUTPUT); // Saida Reles ( LED'S)
  pinMode(30, OUTPUT); // Saida Reles ( LED'S)
  pinMode(31, OUTPUT); // Saida Reles ( LED'S)
  pinMode(32, OUTPUT); // Saida Reles ( LED'S)
  pinMode(33, OUTPUT); // Saida Reles ( LED'S)
  pinMode(34, OUTPUT); // Saida Reles ( LED'S)
  pinMode(35, OUTPUT); // Saida Reles ( LED'S)
  pinMode(36, OUTPUT); // Saida Reles ( LED'S)
 
}

void loop() {
  //Variaveis Sensor
 
  Sensorentra = digitalRead(14);
  Sensorsai= digitalRead(16);
 
  // ENTRADA EM BAIXO
 
   if (Sensorentra == LOW && entrabaixo==0){
       entrabaixo=1;
       entra_baixo();
       temp=millis();
   }
   
   
   // SAIDA EM CIMA
   
   if (Sensorsai == LOW && entrabaixo==1){
     entrabaixo=0;
     sai_cima();
   }
   
   // ENTRADA EM CIMA
   
   
   
   //SAIDA EM BAIXO
   
   
   
   
   
   //TEMPORIZADOR
   
   if(millis() - temp > (1000*30)){ //1000ms * 16 = 16s
      entrabaixo=0;
      entracima=0;
      dslg_td();
   }
   
   }
   









/////////////////////////////////////////////////////////////
//                                                        //
//                   SUBROTINAS                           //
//                                                        //
////////////////////////////////////////////////////////////




///////////////////////////////////////////

//  ENTRADA EM BAIXO

///////////////////////////////////////////


void entra_baixo(){
       digitalWrite(22, HIGH); 
       delay(tim);
       digitalWrite(23, HIGH); 
       delay(tim);
       digitalWrite(24, HIGH); 
       delay(tim);
       digitalWrite(25, HIGH); 
       delay(tim);
       digitalWrite(26, HIGH); 
       delay(tim);
       digitalWrite(27, HIGH); 
       delay(tim); 
       digitalWrite(28, HIGH); 
       delay(tim);
       digitalWrite(29, HIGH); 
       delay(tim);
       digitalWrite(30, HIGH); 
       delay(tim);
       digitalWrite(31, HIGH); 
       delay(tim);
       digitalWrite(32, HIGH); 
       delay(tim);
       digitalWrite(33, HIGH); 
       delay(tim);
       digitalWrite(34, HIGH); 
       delay(tim);
       digitalWrite(35, HIGH); 
       delay(tim);
       digitalWrite(36, HIGH); 
       delay(tim);



///////////////////////////////////////////

// SAIDA EM CIMA

///////////////////////////////////////////


void sai_cima(){
     digitalWrite(22, LOW); 
     delay(tim);
     digitalWrite(23, LOW); 
     delay(tim);
     digitalWrite(24, LOW); 
     delay(tim);
     digitalWrite(25, LOW); 
     delay(tim);
     digitalWrite(26, LOW); 
     delay(tim);
     digitalWrite(27, LOW); 
     delay(tim);
     digitalWrite(28, LOW); 
     delay(tim);
     digitalWrite(29, LOW); 
     delay(tim);
     digitalWrite(30, LOW); 
     delay(tim);
     digitalWrite(31, LOW); 
     delay(tim);
     digitalWrite(32, LOW); 
     delay(tim);
     digitalWrite(33, LOW); 
     delay(tim);
     digitalWrite(34, LOW); 
     delay(tim);
     digitalWrite(35, LOW); 
     delay(tim);
     digitalWrite(36, LOW); 
     delay(tim);



///////////////////////////////////////////

//  ENTRADA EM CIMA

///////////////////////////////////////////


void entra_cima(){
       digitalWrite(36, HIGH); 
       delay(tim);
       digitalWrite(35, HIGH); 
       delay(tim);
       digitalWrite(34, HIGH); 
       delay(tim);
       digitalWrite(33, HIGH); 
       delay(tim);
       digitalWrite(32, HIGH); 
       delay(tim);
       digitalWrite(31, HIGH); 
       delay(tim); 
       digitalWrite(30, HIGH); 
       delay(tim);
       digitalWrite(29, HIGH); 
       delay(tim);
       digitalWrite(28, HIGH); 
       delay(tim);
       digitalWrite(27, HIGH); 
       delay(tim);
       digitalWrite(26, HIGH); 
       delay(tim);
       digitalWrite(25, HIGH); 
       delay(tim);
       digitalWrite(24, HIGH); 
       delay(tim);
       digitalWrite(23, HIGH); 
       delay(tim);
       digitalWrite(22, HIGH); 
       delay(tim);
}


///////////////////////////////////////////

// SAIDA EM CIMA

///////////////////////////////////////////


void sai_baixo(){
     digitalWrite(36, LOW); 
     delay(tim);
     digitalWrite(35, LOW); 
     delay(tim);
     digitalWrite(34, LOW); 
     delay(tim);
     digitalWrite(33, LOW); 
     delay(tim);
     digitalWrite(32, LOW); 
     delay(tim);
     digitalWrite(31, LOW); 
     delay(tim);
     digitalWrite(30, LOW); 
     delay(tim);
     digitalWrite(29, LOW); 
     delay(tim);
     digitalWrite(28, LOW); 
     delay(tim);
     digitalWrite(27, LOW); 
     delay(tim);
     digitalWrite(26, LOW); 
     delay(tim);
     digitalWrite(25, LOW); 
     delay(tim);
     digitalWrite(24, LOW); 
     delay(tim);
     digitalWrite(23, LOW); 
     delay(tim);
     digitalWrite(22, LOW); 
     delay(tim);
 




void dslg_td (){
     digitalWrite(22, LOW); 
     digitalWrite(23, LOW); 
     digitalWrite(24, LOW); 
     digitalWrite(25, LOW); 
     digitalWrite(26, LOW); 
     digitalWrite(27, LOW); 
     digitalWrite(28, LOW); 
     digitalWrite(29, LOW); 
     digitalWrite(30, LOW); 
     digitalWrite(31, LOW); 
     digitalWrite(32, LOW); 
     digitalWrite(33, LOW); 
     digitalWrite(34, LOW); 
     digitalWrite(35, LOW); 
     digitalWrite(36, LOW); 
}     



desde já obrigado pela resposta.


já tentei colocar no programa e também adicionei lhe uns if's mas agora removi ... :S

isso já desligou a fim de 30s , mas depois não liga mais....

eu coloquei ai o código desculpem o tamanho

Offline iyahdub

  • Mini Robot
  • *
  • Mensagens: 277
Re: temporizador com o arduino
« Responder #4 em: 31 de Maio de 2012, 05:07 »
Ok, estive a ver no simulador e parece que o problema e que volta a zero cada vez que acaba o loop...
Nao tenho bem a certeza mas acho que tens que criar um variavel para o estado do botao, de forma a que quando volte a zero por causa dos millis, possa ser resetado, para voltar a poder ser activado... Faz sentido !?
Nao sou o melhor para explicar isto ja que nao e o meu forte... Nisto sou apenas um autodidata !! Alguem mais credenciado tem que explicar melhor lol
Eu consigo ver o problem, mas nao consigo explicar bem como o resolver...

PS- Estive a ver com calma e o que se passa e o seguinte- So qdo os dois botoes estao high e que a luz acende ou apaga... Se os dois estiverem low ao mesmo tempo, a unica coisa que acontece e euma intemitencia , se calhar rapida demais para perceberes ai, mas que acontece......
E so volta acender depois de se auto apagar, se os dois estiverem high, e desligares o Sensor Entrada Escada; Se o fizeres com o outro nao acontece nada ! mas se estiver so o outro ligado, a intermitencia para !


Epero que isso ajude a resolver !! Como nao percebo bem o que estas a tentar fazer nem sei como queres, e melhor abster-me de fazer suposicoes especificas... Mas a minha ideia e que faz falta mudares o estado da luz, atraves da criacao de uma variavel que quando mudar com um botao, e actualizada

1Que tipo de sensores tem ligados ?!? press to make ou switches tipo rocker ?!?
 e como e que tens eles ligados ?!? So o sensor entrada escada e que o liga, mas tem que estar ambos HIGH. Por isso tens que usar um pull up resistor em ambos se forem momentaneos. Porque se os tiveres em float, talvez seja esse o teu problema, por isso e melhor pores mais detalhes sobre como tens ligado a questao...So o codigo nao chega, porque tanto quanto vejo, ate pare estar a trabalhar, se tiveres ligado de uma certa maneira....Para outro tipo de ligacao , nao estaria a trabalhar...
Para este codigo trabalhar, terias que ter botoes momentaneos, com pul upp resistors, que quebrem quando primes...So assim ele trabalha da maneira que eu percebi pelo codigo e tua breve explicacao.


Nao tenho a certeza, ja que nao sei bem o que tens ligado para ai, mas em relacao ao que disse era a isto que me referia
Código: [Seleccione]
if (buttonState == HIGH)
{     
}
else if (buttonState == HIGH)
{
}
else
{
}

« Última modificação: 31 de Maio de 2012, 06:40 por iyahdub »
ps-Desculpen a falta de pontuacao, mas vivo no estrangeiro e os teclados sao xenofobos !!

Offline iyahdub

  • Mini Robot
  • *
  • Mensagens: 277
Re: temporizador com o arduino
« Responder #5 em: 31 de Maio de 2012, 07:00 »
Ta aqui um video para veres que trabalha se tiveres pull up resistors  com botoes momentaneos (press to make). Se for assim...Senao teras que mudar ou o codigo ou a configuracao !!
PS- mudei os pins para usar numa UNO e so tenho uma saida para leds, para efeitos de simulacao. O tempo tb mudei porque isto simula por ciclos o pino 2 no video e o Sensor Entrada Escada
« Última modificação: 31 de Maio de 2012, 07:05 por iyahdub »
ps-Desculpen a falta de pontuacao, mas vivo no estrangeiro e os teclados sao xenofobos !!

Offline Sextafeira

  • Mini Robot
  • *
  • Mensagens: 75
Re: temporizador com o arduino
« Responder #6 em: 31 de Maio de 2012, 20:18 »
boas

desde já obrigado por responderes, estou a perceber o que esta a dizer, vou tentar fazer...


Quanto ao que quero fazer, é um projecto para as minhas escadas de casa, quando alguém entre nas escadas em baixo os led's acendem progressivamente (baixo para cima), e quando saio mas escadas os led's irão apagar se pela ordem que acenderam.

Quando alguém entrar em cima e sair em baixo faz a mesma coisa mas acende os led's de cima para baixo.

O porque do temporizador? Quero o temporizador, para poupar energia, ou seja , quando entras em  baixo, actuas o sensor, ao mesmo tempo corres um temporizador, se em x tempo não saíres em cima ele desliga os led's todos

O sensor que estou a usar é o que vez na imagem em anexo, é um IR com emissão e recepção trabalha a 5v, tem três fios, ele esta sempre a deixar passar 5v para o arduino, so quando passas a mão ele deixa de passar os 5v, vai a 0v,

Também podes ver na imagem que eu estou a testar directamente liguei um fio a entrada do arduino 14 e 16.


Eu testei varias coisas ontem a noite o codigo que coloquei era um backup porque o outros estava um confusão.

obrigado
cumps

Offline iyahdub

  • Mini Robot
  • *
  • Mensagens: 277
Re: temporizador com o arduino
« Responder #7 em: 01 de Junho de 2012, 01:15 »
Entao e suposto trabalhar trabalhar... o codigo trabalha se fosse de quebra momentanea. Tens um Osciloscopio ?!? Pode estar a demorar bastante tempo ate estabilizar...
Como e que o Interruptor IR trabalha? ja que nao sei...  Talvez tenhas que usar interrupts e especificar em rising ou falling
ps-Desculpen a falta de pontuacao, mas vivo no estrangeiro e os teclados sao xenofobos !!

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.390
  • Helpdesk do sitio
Re: temporizador com o arduino
« Responder #8 em: 01 de Junho de 2012, 01:18 »
Se o problema é bouncing, é fazer deboucing, tanto ao sensor como aos botões.
Para além de que tens para ai delays que nunca mais acabam, usa o conceito do blinky without delays para ter esse código todo sem delays.
Avr fanboy

Offline iyahdub

  • Mini Robot
  • *
  • Mensagens: 277
Re: temporizador com o arduino
« Responder #9 em: 01 de Junho de 2012, 04:54 »
Sim parece que o problema e o bouncing( ja me custa a explicar em portugues, meu!! Muitas vezes comecam-me a faltar os termos, especialmente se forem termos tecnicos ou detalhados...INCRIVEL !!) ; Porque o codigo trabalha so com um Led! Mas o Senso tem razao , se quiseres fazer o efeito de led por led, tens que usar o millis(), porque se quiseres apagar tems que esperar que a sequencia acabe...

E ele so tem os sensores pelo que vejo, Senso. Nao tem botoes !! Eu e que assumi que fossem botoes em vez de sensores !
« Última modificação: 01 de Junho de 2012, 05:02 por iyahdub »
ps-Desculpen a falta de pontuacao, mas vivo no estrangeiro e os teclados sao xenofobos !!

Offline Sextafeira

  • Mini Robot
  • *
  • Mensagens: 75
Re: temporizador com o arduino
« Responder #10 em: 04 de Junho de 2012, 19:01 »
Entao e suposto trabalhar trabalhar... o codigo trabalha se fosse de quebra momentanea. Tens um Osciloscopio ?!? Pode estar a demorar bastante tempo ate estabilizar...
Como e que o Interruptor IR trabalha? ja que nao sei...  Talvez tenhas que usar interrupts e especificar em rising ou falling

desde já obrigado a todos pelo tempo despendido e pelas dicas

por acaso não tenho osciloscópio, mas queria ver se arranjava um...

em principio esta funcionar :D mas agora vai ficar em aguas de bacalhau...por um mês, nao vou ter muito tempo para isto, e também de falta chegar algum material.

o problema deveria ser de estar a testar com fio, liguei os sensores e trabalha bem

cumps


Offline yagoondersem

  • Mini Robot
  • *
  • Mensagens: 8
Re: temporizador com o arduino
« Responder #11 em: 05 de Julho de 2014, 15:40 »
Eu pretendo deixar a sirene da minha escola automática, e eu acho que é meio parecido com esse aqui, mas eu quero colocar um temporizador. Alguém poderia me ajudar?