Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Lucas090

Arduino Esta certo essa programação?

Recommended Posts

Alguém poderia corrigir urgentemente essa questão ? :tw_astonished:

 

Essa programação de arduino está correta? Seria um bafômetro que mostra o valor serial constantemente.

#include <LiquidCrystal.h>

#define sensor  9  // Connnect MQ-3 Sensor to pin-9
#define buzzer  8  // Connnect Buzzer to pin-8 
int valor_sensor = 0;
LiquidCrystal lcd(2, 3,4,5, 6,7);
// LCD PIN   -    ARDUINO PIN
// RS        -    2 
// RW        -   GND   
//  E        -    3
// D4        -    4  
// D5        -    5
// D6        -    6
// D7        -    7
void setup() {
  valor_sensor = analogRead(A0);
  lcd.begin(16, 2);
  pinMode(sensor, INPUT);
  pinMode(buzzer, OUTPUT);
  lcd.clear();
  lcd.print(" Bafometro ");
  lcd.setCursor(0,1);
  lcd.print("     Carregando... 10%   ");
  delay(1800);
  lcd.clear();
  lcd.print(" Bafometro ");
  lcd.setCursor(0,1);
  lcd.print("     Carregando... 20%   ");
  delay(1800);
  lcd.clear();
  lcd.print(" Bafometro ");
  lcd.setCursor(0,1);
  lcd.print("     Carregando...30%    ");
  delay(1800);
  lcd.clear();
  lcd.print(" Bafometro ");
  lcd.setCursor(0,1);
  lcd.print("     Carregando...40%    ");
  delay(1800);
  lcd.clear();
  lcd.print(" Bafometro ");
  lcd.setCursor(0,1);
  lcd.print("     Carregando...50%    ");
  delay(1800);
  lcd.clear();
  lcd.print(" Bafometro ");
  lcd.setCursor(0,1);
  lcd.print("     Carregando...60%    ");
  delay(1800);
  lcd.clear();
  lcd.print(" Bafometro ");
  lcd.setCursor(0,1);
  lcd.print("     Carregando...70%    ");
  delay(1800);
  lcd.clear();
  lcd.print(" Bafometro ");
  lcd.setCursor(0,1);
  lcd.print("     Carregando...80%    ");
  delay(1800);
  lcd.clear();
  lcd.print(" Bafometro ");
  lcd.setCursor(0,1);
  lcd.print("     Carregando...90%    ");
  delay(1800);
  }
void sens(){
  int i=1;
  lcd.clear();
  lcd.print("Alcool Detectado");
  digitalWrite(buzzer, HIGH);
  lcd.setCursor(0,1);
  lcd.print(valor_sensor);
  }
  
void scn(){
  lcd.clear();
  lcd.print(" Analizando... ");
  digitalWrite(buzzer, LOW);
  lcd.setCursor(0,1);
  lcd.print(valor_sensor);
}
void loop() 
{
     if(digitalRead(sensor)==0)
  sens();
   
 else
    scn();
   
}

 

 

Foi baseado nesse guia:

 

http://www.davindermahi.com/2017/07/12/arduino-interface-for-alcohol-mq-3-sensor/

 

Nesse caso eu liguei a saída DO em AO. Certo?

 

Deixei 3 minutos para aquecimento do sensor.

Editado por DiF
Usar o botão CODE <>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estranho, o sensor é analógico e no tutorial ele está ligado a um pino digital... já tem coisa estranha ai.

 

Então como ele está no pino digital ele só vai para o high a um certa concentração de álcool e low quando estiver dentro da tensão de low do arduino... ai pode ter momentos de flutuação que pode ficar ligando e desligando o a porta... Sem medições de valores a cada momento, só se ultrapassou ou não tal valor.

 

Como os delays o o valor do sensor não será atualizado todo o tempo, o programa para com o uso do delay, mas como você usa só no início que é setup e será executado só uma vez "tudo bem". A alternativa seria usar millis.

 

Não entendi o porque dos delays já que o sensor tem alta sensibilidade e rápido tempo de resposta.

 

adicionado 3 minutos depois

Você está falando que teria escrita no serial, mas não vi nenhum comando serialWrite no código... ou algo que verifique a comunicação serial. Talvez erro ao se expressar...

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • Você desconsidera então o tempo de aquecimento? Ouvi em algum lugar que era nerscessário, mas isso é o de menos :tw_grimace:

    Sou bem leigo em programação mesmo, eu queria basicamente que o display mostrasse o nível de alcool lido pelo sensor  constatemente( que eu imagino que seria pela porta Analogica, certo?) e caso atingisse  um determinado valor, printasse uma mensgem e tocasse o buzzer :tw_grimace:

     

    Alguma dica? Onde eu mudo?

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    tira todo esse código do setup  de mexer com o lcd e joga para o loop principal, procura por algum tutorial "arduino lcd" para você ver como exibe variáveis nele. Usa uma porta analógica para exibir os valores do sensor... pode ser necessário fazer alguma conversão com o número, talvez... ou seja, pega outro tutorial

     

    tipo esse aqui

    http://www.learningaboutelectronics.com/Articles/MQ-3-alcohol-sensor-circuit-with-arduino.php

     

    sobre o buzzer mesma coisa tem tutorial "arduino buzzer" por ai que mostra as ligações e código. Ou seja, só colocar um if (analogRead > tal valor) {liga buzzer}.

     

    Depois faça um teste em separado de cada um depois se ainda tiver ruim pode mostrar o código por aqui.

    Quando tem muitas coisas para colocar no arduino não tem normalmente um tutorial para tudo que você quer em só um lugar*, você tem ir juntando.

     

     

    adicionado 4 minutos depois

    Quase tudo o que você quer...

    https://openhomeautomation.net/arduino-breathalyzer

     

    Enfim... só da uma pesquisada. Novamente se tiver dúvida posta ai...

    Editado por Bommu Perneta

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Ok, vou ver pesquisar aqui :tw_astonished: Quanto mais dica melhor

    adicionado 6 minutos depois

    Como eu substituo aquele display por um desse aqui:

     

     

    lcd_16x2-300x225.jpg

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Eu meio que entendo, mas não sei como juntar as peças :tw_astonished:

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Copia e cola os códigos básicos em cada lugar ... se no setup tem uma coisa... copia essa coisa para o setup do teu código principal, o que tiver no loop principal você copia para loop do seu programa... o que tiver fora do setup e do loop você coloca fora no ouro programa também... pronto você "juntou" programas. Para ter controle deles só usar "if" para criar condições do que você quer.

     

    Faça testes ai...

    adicionado 1 minuto depois

    Sobre como usar esse menor... procura tutoriais "arduino lcd 16x2"

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Seria isso:

    Citação

     

    #include <LiquidCrystal.h>

    LiquidCrystal lcd(2, 3,4,5, 6,7);

    int valor_sensor =0;

    void setup ()
    {
    Serial.begin(9600);
    pinMode(A1, INPUT);
    pinMode(8, OUTPUT);
    lcd.clear();
    lcd.print(" Bafometro ");
    lcd.setCursor(0,1);
    lcd.print("     Sensor     ");
    delay(2000);

    }

    void loop ()
    {
    valor_sensor = analogRead(A1);

    if (valor_sensor >= 0 and valor_sensor <= 50)
      {
      lcd.print(" Baixo ou nulo  ");
      lcd.setCursor(0,1);
      lcd.print(valor_sensor);
      }
      else if (valor_sensor >= 51 and valor_sensor <= 200)
      {
        lcd.print(" Baixo ");
        lcd.setCursor(0,1);
        lcd.print(valor_sensor);
      }
      else if (valor_sensor >= 201 and valor_sensor <= 400)
      {
       lcd.print(" Alto ");
      lcd.setCursor(0,1);
      lcd.print(valor_sensor);
      digitalWrite(8, HIGH);
      }
      else if (valor_sensor >= 401 and valor_sensor <= 600)
      {
        lcd.print(" Altissimo ");
      lcd.setCursor(0,1);
      lcd.print(valor_sensor);
      digitalWrite(8, HIGH);
      }
      else if (valor_sensor >= 601)
      {
       lcd.print(" Chame o Taxi! ");
       lcd.setCursor(0,1);
       lcd.print(valor_sensor);
       digitalWrite(8, HIGH);
      }
      }

     

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Isso, às vezes pode bugar algum intervalo. Mas é isso aí... os pinos não estão conflitando nem para o buzzer , lcd ou o sensor. O resto é código.

     

    Faça um test/monte e veja se está de acordo. Se não tiver você pode ir comentando parte do teu código do void loop para ver onde está o erro.

    adicionado 3 minutos depois

    Só estou estranhando esse digitalWrite(8, HIGH);

    em todos ... teria que ver a função disso ai se é para ligar um led... relé ou sei lá... se for um led seria bom ligar outra porta para distinguir que parte do teu código que foi que ligou o mesmo.

    Editado por Bommu Perneta

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Beleza, valeu mesmo :atirador:

    Assim que possível volto aqui relatar ( espero que para dizer que funcionou perfeitamente :rezando: )

    adicionado 15 minutos depois
    5 horas atrás, Bommu Perneta disse:

    Isso, às vezes pode bugar algum intervalo. Mas é isso aí... os pinos não estão conflitando nem para o buzzer , lcd ou o sensor. O resto é código.

     

    Faça um test/monte e veja se está de acordo. Se não tiver você pode ir comentando parte do teu código do void loop para ver onde está o erro.

    adicionado 3 minutos depois

    Só estou estranhando esse digitalWrite(8, HIGH);

    em todos ... teria que ver a função disso ai se é para ligar um led... relé ou sei lá... se for um led seria bom ligar outra porta para distinguir que parte do teu código que foi que ligou o mesmo.

     

    Acho que o correto deveria ser isso:

     

    pinMode(8,HIGH);

     Não?

     

    E acho que eu poderia fazer uma função para tocar o buzzer numa faixa de 200 a 600

    Editado por Lucas090

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    pinMode é lá no setup ... mas você pode colocar no loop fazendo uma gambiarra... mas pinMode basicamente define se a porta 8 no caso é input ou output. Input para entrada de valores e output para saídas.

     

    Já digitalWrite você escreve na porta o valor que você quer no caso HIGH ou LOW. Mas agora que você falou faltou você colocar um LOW para desligar o led + um delay para deligar a porta.

     

    No caso do buzzer ele tem uma função própria para ser chamada para ele fazer o barulho que é o "tone"

     

    /* Arduino tutorial - Buzzer / Piezo Speaker
       More info and circuit: http://www.ardumotive.com/how-to-use-a-buzzer-en.html
       Dev: Michalis Vasilakis // Date: 9/6/2015 // www.ardumotive.com */
    
    
    const int buzzer = 9; //buzzer to arduino pin 9
    
    
    void setup(){
     
      pinMode(buzzer, OUTPUT); // Set buzzer - pin 9 as an output
    
    }
    
    void loop(){
     
      tone(buzzer, 1000); // Send 1KHz sound signal...
      delay(1000);        // ...for 1 sec
      noTone(buzzer);     // Stop sound...
      delay(1000);        // ...for 1sec
      
    }

     

    http://www.instructables.com/id/How-to-use-a-Buzzer-Arduino-Tutorial/

    adicionado 1 minuto depois

    No caso do código acima você só tem que substituir o 9 por 8 para não tem problema no teu código

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Programação é tarefa ímpar, cada um faz de um modo, só achei estranhaço printar tela logo depois do clear, sem "setar" a posição do display que pretende usar. 

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • É mesmo '-' Era para usar as duas linhas... esqueci do lcd.begin(16, 2);

     

    Citação

    #include <LiquidCrystal.h>

    LiquidCrystal lcd(2, 3,4,5, 6,7);

    int valor_sensor =0;
    const int buzzer = 8;

    void setup ()
    {
    Serial.begin(115200);
    pinMode(A1, INPUT);
    pinMode(8, OUTPUT);
    lcd.begin(16, 2);
    lcd.print(" Bafometro ");
    lcd.setCursor(0,1);
    lcd.print("     Sensor     ");
    delay(2000);

    }

    void loop ()
    {
    valor_sensor = analogRead(A1);

    if (valor_sensor >= 0 and valor_sensor <= 50)
      {
      lcd.begin(16, 2);
      lcd.print(" Baixo ou nulo  ");
      lcd.setCursor(0,1);
      lcd.print(valor_sensor);
      }
      else if (valor_sensor >= 51 and valor_sensor <= 200)
      {
        lcd.begin(16, 2);
        lcd.print(" Baixo ");
        lcd.setCursor(0,1);
        lcd.print(valor_sensor);
      }
      else if (valor_sensor >= 201 and valor_sensor <= 400)
      {
      lcd.begin(16, 2);
      lcd.print(" Alto ");
      lcd.setCursor(0,1);
      lcd.print(valor_sensor);
      tone(8, 500);
      }
      else if (valor_sensor >= 401 and valor_sensor <= 600)
      {
      lcd.begin(16, 2);
      lcd.print(" Altissimo ");
      lcd.setCursor(0,1);
      lcd.print(valor_sensor);
      tone(8, 500);
      }
      else if (valor_sensor >= 601)
      {
       lcd.begin(16, 2);
       lcd.print(" Chame o Taxi! ");
       lcd.setCursor(0,1);
       lcd.print(valor_sensor);
       tone(8, 500);cv
      }
      }

     

     Esta certo agora, pessoal ?

    adicionado 6 minutos depoi
    Citação

     

     

    Editado por Lucas090

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    6 horas atrás, Lucas090 disse:

    Esta certo agora, pessoal ?

    Caso o pessoal demore a analisar teu código e a responder, ouvi dizer que existe simulador de arduino pro caso de preferires não gravar pra testar...

    Só uma ideia...

    • Haha 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @Lucas090 declare o LCD.begin dentro do void setup, somente.

     

    Você está invertendo a ordem das linhas, primeiro você usa o setCursor , pra declarar a linha e a posição, depois você escreve com o print.

    Limpa o display antes de setar e printar.

    lcd.clear ();

    lcd.setCursor (3,0); // a posição é um exemplo,

    lcd.print ("Clube do Hardware"); //

    lcd.setCursor (0,0); // 

    lcd.print ("Pinhed");  //

    delay (1000);  // conitnue a programação

     

    Editado por Pinhed
    complemento

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×