Boa noite amigos.

estou desenvolvendo um pequeno modulo de injeção, onde regulo o tempo de injeção do bico atraves de um potenciometro. Um sensor hall fica acoplado no eixo do do motor e dispara o bico injetor mas o tempo que ele fica aberto se dá atraves da posição do potenciometro. Até ai tudo OK.

Mas estou usando o DELAY e ele trava o loop como todos sabem, Isso causa uma onda totalmente instavel na saida se for medida com o osciloscopio pois quando ele esta em delay as vezes o senhor novamente ativa o bico.

Gostaria de saber se tem como fazer o que quero sem usar o delay Eu nao consigo de jeito nenhum aprender a usar o millis. Me ajudem por favor

Segue o scketch.

Exibições: 1051

Anexos

Responder esta

Respostas a este tópico

Boa noite Leonardo, 

Vamos por partes:

1) Estude como usar a função millis :

https://www.arduino.cc/reference/pt/language/functions/time/millis/

Millis (tempo em milisegundos) captura os registradores de um Timer/Contador do microcontrolador ATmega328 que esta sempre sendo incrementado pelo clock. Esse contador vira (passa do número máximo para zero) a cada 50 dias de funcionamento contínuo do Arduino. 

2) Estude, monte e teste Blink sem delay :

https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay

meu amigo. ja tentei. nao consigo

Só vejo exemplos na internet de gente piscando led. Isso nao ajuda.

Nao consegui entender o millis pra usar no meu projeto

Leonardo boa noite, 

Você tem certeza que a função Millis vai poder ser usada na injeção eletrônica com 4 bicos injetores? 

Você tem uma carta de tempo do acionamento dos bicos? Envie-a para a gente. 

Acho que talvez terá que usar a função Micros(). Temporização em Microsegundos. 

https://www.arduino.cc/reference/en/language/functions/time/micros/

Sugiro que leia esse tópico:

http://labdegaragem.com/forum/topics/inje-o-eletr-nica-com-arduino

Tenho certeza. Injetores trabalham em milisegundos. O que vou fazer é algo simples com 1 bico apenas. O sketch é esse mesmo que fiz ai. so que preciso dele sem o delay. Pois esta matando o loop. Pois acoplei um imã num motor e pus ele pra girar constantemente e com osciloscopio na saida nao dá uma onda constante. Ela muda pois é a hora que "trepa" o delay com o proximo gatilho

Bom dia LSS,

leia Sugestão e remova seu sketch da área de texto e anexe como arquivo.

RV

obrigado pela dica . Adicionei o arquivo.

Bom dia LSS,

faltou só editar o tópico e remover o código da area de texto do mesmo.

RV

Ok, então vamos analisar o seu código.

Primeiro erro encontrado :

A função delay() usa valores inteiros. Esse valor fracionário não funciona com delay.

https://www.arduino.cc/reference/pt/language/functions/time/delay/

float tempodebico = 0;   (tem que ser unsigned long) 

tempodebico = 1.23 ;    (não aceita números fracionários) 

delay(tempodebico); 

Por isso eu sugeri que usasse a função Micros(). 

   1,23 milisegundos = 1230 microsegundos

Ou seria assim? Assim funcionou. Apareceu o valor 1230 no serial print

unsigned long tempodebico = 0;
tempodebico = micros();
{
if (mapvolts > 0 && mapvolts < 1 )
tempodebico = 1230 ;

Me ajuda agora a fazer isso sem delay. kkkkk

Você informou que com Millis() pode funcionar. 

Então corrigindo :

//======= Acerto do tempo de injeçao de acordo com o map ==============


unsigned long tempodebico = 0;                                                                 // tem que ser unsigned long 
{
  if (mapvolts > 0 && mapvolts < 1 ) tempodebico = 1;                                 // não pode ser fracionário

  if (mapvolts > 1 && mapvolts < 2 ) tempodebico = 2 ;

  if (mapvolts > 2 && mapvolts < 3 ) tempodebico = 3 ;

  if (mapvolts > 3 && mapvolts < 4 ) tempodebico = 4 ;

  if (mapvolts > 4 && mapvolts < 6 ) tempodebico = 5 ;
}

Não entendi isso - esse é o sensor Hall de rotação do motor ?

sensorvira_state = digitalRead(sensorvira);


if (sensorvira_state == HIGH)

{
   digitalWrite(bicos, HIGH);
   delay(tempodebico);
   digitalWrite(bicos, LOW);
}

sensorvira_state = digitalRead(sensorvira)  Isso ai. Sensor Hall

Quando o sensor hall esta em HIGH o bico abre e fica aberto pelo tempo que o (tempodebico) que é gerado pelos Ifs geram.

Os ifs usam o valor (mapvolts) para fazerem a compraraçao e gerar o (tempodebico)

Isso ai tudo esta funcionando

Segue a foto da onda no osciloscopio com 2300 microsegundoseu usei delayMicroseconds

ultima_revisao.ino

micro.jpeg

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço