Ir ao conteúdo

Posts recomendados

  • Membro VIP
Postado

Olá.

Estou fazendo uns testes com um módulo rele e um sensor ultrassônico HC-SR04.

O rele só é acionado se a distância entre o sensor ultrassônico e o obstáculo for menor que 10 centímetros. Neste caso, o relé é acionado por 2 segundos(eu utilizei a função delay).

Veja o código:

 /*
   Controle Rele por Sensor Ultrassônico
   
   Criado por Michel Galvão
   em 17/09/2020
  
  */
//Carrega a biblioteca do sensor ultrassonico
#include <Ultrasonic.h>
 
//Define os pinos para o trigger e echo
#define pino_trigger 4
#define pino_echo 5

//Define o pino para o Rele
#define pin_rele 7

//Distância de referência para acionamento do rele
float valor_ref_rele = 10.0;

//Inicializa o sensor nos pinos definidos acima
Ultrasonic ultrasonic(pino_trigger, pino_echo);
 
void setup()
{
  //Inicializa Cmunicação Serial
  Serial.begin(9600);
  //Escreve mensagem no Monitor Serial
  Serial.println("Lendo dados do sensor...");

  //Define pino do Rele
  pinMode(pin_rele, OUTPUT);

  //Deixa o pino do Rele ligado
  digitalWrite(pin_rele, HIGH);//com estado HIGH,o rele é desativado.
}
 
void loop()
{
  
  //Le as informações do sensor em cm
  float cmMsec;

  long microsec = ultrasonic.timing();
  cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);

  //Se distancia lida do sensor Ultrassônico for MENOR que o valor de referencia do rele(definido no inicio do código)
  if(cmMsec<valor_ref_rele){
    //Ativa o rele
    digitalWrite(pin_rele, LOW);

    //Tempo para manter o rele ativado
  delay(2000);
    }
    //Se não
  else{
    //Desativa o Rele
    digitalWrite(pin_rele, HIGH);
  }
  
  //Exibe informações no serial monitor
  Serial.print("Distancia em cm: ");
  Serial.print(cmMsec);
  
  }
  

Deu certo.

Agora, eu quero tirar o delay, para o resto do código continuar a 'andar' sem pausas, ainda mantendo a tempo de acionamento do rele por 2 segundos.

 

Desde já agradeço.

  • Curtir 1
Postado

@MicSG ,

 

A melhor maneira é habilitar a interrupção do Timer1, e criar um contador dentro dela, e quando atingir a contagem equivalente a 2 segundos, sinalizar um flag no programa principal.

por exemplo uma interrupção a cada 10 milisegundos a contagem tem de atingir 200 ...

 

Infelizmente não sei fazer nessa linguagem .... aguarde alguma dica !

 

Paulo

  • Curtir 1
  • Obrigado 1
  • Membro VIP
Postado

Corroboro Paulão. O legal é você vai ser introduzido ao conceito de interrupção quando literalmente o mc interrompe o que está fazendo pra fazer outra tarefinha e depois volta onde estava. A interrupt a grosso modo é como se fosse outro mc. A dica prática é que nunca faça tarefas demoradas na interrupt pra não comprometer o andamento ou temporizações do loop principal e eventualmente outras interrupts.

 

Penso que com poucos cliques em timer interrupt arduino você pode dar grandes saltos e na sequencia, ensinar Paulão kk. Depois aprenda e ensine DMA pra mim.😁

  • Curtir 1
  • Haha 1
Postado
52 minutos atrás, if. disse:

 

O legal é você vai ser introduzido 

 

Penso que com poucos cliques em timer interrupt arduino você pode dar grandes saltos e na sequencia, ensinar Paulão kk. Depois aprenda e ensine DMA pra mim.😁

 

Reparei que você adora usar as palavras  Introdução e Ser Introduzido... presumo que deve ser alguma coisa que lhe deixou marcas profundas .....

 

Sobre DMA, eu estudei isso em 1986 pois as memórias do IBM-PC eram dinâmicas e o refresh dos dados era feito por DMA ... e confesso que depois disso nunca precisei usar isso até hoje kkkkk


Mas sei que a nova geração de Attinys possuem DMA acionado por periféricos,

como o conversor A/D e até os Timers, embora também não faço a mínima ideia de como utilizar isso de modo prático .... e se tem nos novos Attinys, com certeza tem nos novos Pics também ...

 

Será que vamos usar isso algum dia ?


Quanto a me ensinar a programar em C ou coisa parecida .... esquece que meu QI não consegue entender isso .... prefiro 1000 vezes fazer em Assembly e 100.000 vezes em Basic !

Cachorro velho não aprende truque novo kkkkk !

 

Estamos ficando obsoletos, minha cara colega de Fórum ....

 

Paulo

  • Curtir 1
  • Haha 1
  • Membro VIP
Postado

Paulão você decide o lance da introdução, afinal já passou por isso kk.

 

Num post que publiquei "agora há pouco" ...

sugeri a leitura do artigo https://www.artekit.eu/vga-output-using-a-36-pin-stm32/

onde o autor mostra uma utilidade prática curiosa do bicho dma. Algo como o periférico (spi) acessa o conteúdo da memória sem a cpu saber e nem se importar. A ela cabe apenas escrever ou desenhar os bytes na ram que o spi se vira pra serializar coerentemente.

Como disse lá, tenho a quasiséria intenção de fazer um trem daquele só que o fonte do cara ta chato de entender - não é nada minimalista: minha filosofia -  e pretendo usar outro compilador e outro mc. Pra isso tenho que entender direitin o que se passa na cabeça do mc - ou do sistema - a cada momento. Mas 1º... vou ter que piscar um led via dma

10 horas atrás, aphawk disse:

Cachorro velho não aprende truque novo

de fato kk.. estou a dias tentando entender java e poo. Não captei o poo ainda mas já fiz um programinha em java e deu certo!! Em breve, caso apareça no contexto de algum tópico, posso compartilhar. Programinha bacaninha e 100% original que criei nos anos 80 ... em basic! 😁

  • Curtir 1
  • Amei 1
Postado

hahahahha, forum está bem humorado hj
Sobre a dúvida. Eu resolveria com uma variável global controlando. Tem 2 formas. Quando o evento é ativo, tu coloca o valor da função milis nela e desliga quando o milis atual for 2000 > milis. A segunda é quando o evento for ativo pela 1ª vez atribui 0 a esta varíavel, e a cada ciclo vai incrementando. Quando chegar a 2000 tu desliga.
O legal dessa segunda, é que caso você prefira, pode fazer que esses 2 segundos possam ser resetados enquanto o evento estiver ativo. (tipo, o relé irá desligar 2 segundo, depois que você tirar a mão de perto do sensor ultrasônico.

  • Curtir 2

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!