Jump to content

Recommended Posts

Posted

Boas. Estou a fazer um pequeno protejo, mas estou com um pequeno problema. O projecto consiste numa espécie de sensor de estacionamento/ medidor de distância com um buzzer e um display 12*4. Já consegui pôr a dar-me a distância mas pretendia que de acordo com a distância o buzzer apitasse.

Queria que quando a distância fosse maior a 30cm o buzzer não desse sinal, quando fosse menor que 20cm apitasse 1 vez por segundo, quando a distância fosse menor que 10cm apitasse constantemente.

O código é o seguinte:

#include <Ultrasonic.h> //Carrega a biblioteca Ultrasonic
#include <NewTone.h> //Carrega a biblioteca Newtone
#include <LiquidCrystal.h> //Carrega a biblioteca LCD

//Dados do buzzer
#define tempo 500
int frequencia = 2000;
int Pinofalante = 2;

int atraso = 1000;

//Define o pino do Arduino a ser utilizado com o pino Trigger do sensor
#define PINO_TRIGGER 13
//Define o pino do Arduino a ser utilizado com o pino Echo do sensor
#define PINO_ECHO 10

//Inicializa o sensor ultrasonico
Ultrasonic ultrasonic(PINO_TRIGGER, PINO_ECHO);

// Inicializa o display
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Define os pinos que serão ligados ao LCD

void setup()
{
pinMode(Pinofalante,OUTPUT); //Pino do buzzer
Serial.begin(9600); //Inicializa a serial
lcd.begin(20,4); //Inicializa LCD
lcd.clear(); //Limpa o LCD
}

void loop()
{
float cmMsec, inMsec;

//Le os dados do sensor, com o tempo de retorno do sinal
long microsec = ultrasonic.timing();

//Calcula a distancia em centimetros
cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);

//Ajusta o atraso de acordo com a distancia
if (cmMsec > 80)
{
atraso = 2000;
//Apresenta os dados, em centimetros, no LCD e na Serial
lcd.setCursor(0,0);
lcd.print("Cent.: ");
lcd.print(" ");
lcd.setCursor(7,0);
lcd.print(cmMsec);
Serial.print("Cent: ");
Serial.print(cmMsec);
}
else if (cmMsec >50 && cmMsec<80)
{
atraso = 1500;
//Apresenta os dados, em centimetros, no LCD e na Serial
lcd.setCursor(0,0);
lcd.print("Cent.: ");
lcd.print(" ");
lcd.setCursor(7,0);
lcd.print(cmMsec);
Serial.print("Cent: ");
Serial.print(cmMsec);
}
else if (cmMsec >30 && cmMsec<50)
{
atraso = 1200;
//Apresenta os dados, em centimetros, no LCD e na Serial
lcd.setCursor(0,0);
lcd.print("Cent.: ");
lcd.print(" ");
lcd.setCursor(7,0);
lcd.print(cmMsec);
Serial.print("Cent: ");
Serial.print(cmMsec);
}
else if (cmMsec > 10 && cmMsec < 30)
{
atraso = 700;
//Apresenta os dados, em centimetros, no LCD e na Serial
lcd.setCursor(0,0);
lcd.print("Cent.: ");
lcd.print(" ");
lcd.setCursor(7,0);
lcd.print(cmMsec);
Serial.print("Cent: ");
Serial.print(cmMsec);
}
else if (cmMsec < 10)
{
atraso = 300;
//Apresenta os dados, em centimetros, no LCD e na Serial
lcd.setCursor(0,0);
lcd.print("Cent.: ");
lcd.print(" ");
lcd.setCursor(7,0);
lcd.print(cmMsec);
Serial.print("Cent: ");
Serial.print(cmMsec);
}

//NewTone(Pinofalante, frequencia, tempo);

delay(atraso);
}

Obrigado desde já.

Posted

Vê o exemplo blink without delay para tirares o delay do código. O teu problema estará certamente relacionado com isso já que não explicas ao certo o que naão funciona.

include <ai se te avio>

Mãe () {

}

Posted (edited)

Boas. já só tem um pequeno problema que ainda não consegui perceber se onde vem. Quando a distância é menor que 10cm os valores no display andam a "saltar" no display. Se alguém me souber ajudar agradecia.

Abraços

#include <Ultrasonic.h>   //Carrega a biblioteca Ultrasonic  
#include <NewTone.h>    //Carrega a biblioteca Newtone  
#include <LiquidCrystal.h> //Carrega a biblioteca LCD

//Dados do buzzer  
#define tempo 500   
int frequencia = 2000;   
int Pinofalante = 2;   

 int atraso = 1000;  

//Define o pino do Arduino a ser utilizado com o pino Trigger do sensor  
#define PINO_TRIGGER 13   
//Define o pino do Arduino a ser utilizado com o pino Echo do sensor  
#define PINO_ECHO   10   


Ultrasonic ultrasonic(PINO_TRIGGER, PINO_ECHO); //Inicializa o sensor ultrasonico  
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);  //Define os pinos que serão ligados ao LCD 


void setup()  
 {  
 pinMode(Pinofalante,OUTPUT); //Pino do buzzer   
 Serial.begin(9600); //Inicializa a serial

 Serial.begin(9600); //Inicializa a serial
 lcd.begin(20,4); //Inicializa LCD
 lcd.clear();     //Limpa o LCD  
 }  

void loop()  
 {  
 float cmMsec, inMsec;  


 //Le os dados do sensor, com o tempo de retorno do sinal  
 long microsec = ultrasonic.timing();   

 //Calcula a distancia em centimetros  
 cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);   

 //Ajusta o atraso de acordo com a distancia  
 if (cmMsec > 80)  
 {  
  atraso = 2000;  
 }  
 else if (cmMsec >50 && cmMsec<80)  
 {  
  atraso = 1500;  
 }  
 else if (cmMsec >30 && cmMsec<50)  
 {  
  atraso = 1200;  
 }  
 else if (cmMsec > 10 && cmMsec < 30)  
 {  
  atraso = 700;  
 }  
 else if (cmMsec < 10)  
 {  
  atraso = 300;  
 }  

 lcd.setCursor(0,0);
 lcd.print("Cent.: ");
 lcd.print("        ");
 lcd.setCursor(7,0);
 lcd.print(cmMsec);
 Serial.print("Cent: ");
 Serial.print(cmMsec);


 //Emite o bip  
 NewTone(Pinofalante, frequencia, tempo);   

 delay(atraso);  
}
Edited by thoga31
Tags code + GeSHi

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.