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.
Tags:
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 :
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
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
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2023 Criado por Marcelo Rodrigues.
Ativado por