Controle de vagas de estacionamento com o sensor HC-SR04
Esse post sobre controle de vagas de estacionamento surgiu da pergunta de um leitor no post Medidor de distância com o sensor ultrassônico HC-SR04. Ele questionou se era possível controlar 2 sensores HC-SR04 usando a biblioteca Ultrasonic.h, uma das mais comuns para quem usa esse tipo de sensor.
Eu tive o mesmo problema ao montar um projeto de faculdade, que consistia em criar um controle de vagas de estacionamento como esses utilizados em shopping center, onde uma luz vermelha indica que a vaga está ocupada, e uma luz verde indica vaga livre.
Embora a tecnologia utilizada nos shoppings seja muito mais complexa, fazendo uso até mesmo de câmeras para controlar as vagas, a ideia é a mesma e não tão difícil de implementar com o Arduino, como vocês poderão ver agora.
Meu (modesto) projeto controla 2 vagas de estacionamento, com os respectivos leds indicando vaga livre/vaga ocupada. Um display LCD mostra as informações sobre as vagas (total livres/ocupadas).
Em primeiro lugar, eu tentei usar a biblioteca Ultrasonic.h, sem sucesso. Talvez alguma alteração na biblioteca ou algum parâmetro que eu desconheço me ajudassem na tarefa, mas optei por procurar outra versão ou alguma outra biblioteca que fosse mais flexível.
Acabei encontrando a biblioteca NewPing, que torna possível o controle de até 15 sensores HC-SR04. Com essa biblioteca, o meu modesto projeto de apenas 2 vagas pode ser expandido. 😉
Circuito controle de estacionamento com Arduino
Utilizei um Arduino Mega para poder ligar todos os componentes, já que o LCD utiliza 6 portas, cada HC-SR04 mais 2 e os leds bicolores, mais 2. Com alguns ajustes, isso pode ser montado tranquilamente com um Arduino Uno.
Para a sinalização das vagas, utilizei no circuito 2 leds bicolores, que podem ser substituídos por 4 leds comuns. A ligação do display 16×2 segue o mesmo esquema deste artigo , que já usei em diversos projetos aqui no Arduino e Cia:
Antes de carregar o programa, não esqueça de baixar a biblioteca NewPing, nesse link. Descompacte e copie a pasta NewPing para dentro da pasta LIBRARIES, dentro da IDE do Arduino.
No início do programa são definidas as variáveis que irão armazenar o número de sensores utilizados (SONAR_NUM), a distância máxima de detecção (MAX_DISTANCE), e o intervalo entre as medições (PING_INTERVAL), que não pode ser muito baixo para que não haja conflito entre os sensores. Para este parâmetro, recomenda-se o valor mínimo de 29 ms.
Para definir os pinos que serão utilizados para cada sensor, utiliza-se o comando NewPing, que tem a seguinte sintaxe :
NewPing(Pino_Trigger, Pino_Echo, Distancia_Maxima)
No meu programa, utilizei apenas 2 sensores, então tenho apenas 2 comandos NewPing. Se você for utilizar mais sensores, inclua mais comandos NewPing. Não se esqueça de setar a variável SONAR_NUM, senão os demais sensores não serão detectados.
O loop do programa efetua a leitura de todos os sensores, e atualiza as variáveis referentes às vagas livres e vagas ocupadas, mostrando as informações no LCD. São utilizadas as subrotinas oneSensorCycle, que efetua a varredura nos sensores, e a echoCheck, que calcula a distância até o objeto detectado.
// Programa : Controle de vagas de estacionamento com o HC-SR04 // Autor : Arduino e Cia //Inicializa as bibliotecas do sensor Ultrasonico e do Display #include <NewPing.h> #include <LiquidCrystal.h> #define SONAR_NUM 2 // Define o numero de sensores #define MAX_DISTANCE 10 // Distancia maxima // Milisegundos de intervalo entre medicoes (29ms e o tempo mínimo para // evitar conflito entre os sensores) #define PING_INTERVAL 33 // Armazena a quantidade de vezes que a medicao deve ocorrer,para cada sensor unsigned long pingTimer[SONAR_NUM]; unsigned int cm[SONAR_NUM]; // Armazena o numero de medicoes uint8_t currentSensor = 0; // Armazena o sensor que esta ativo int Pinoled1Verm = 20; //Pino led1 - Vermelho int Pinoled1Verde = 19; //Pino led1 - Verde int Pinoled2Verm = 18; //Pino led2 - Vermelho int Pinoled2Verde = 17; //Pino led2 - Verde int vagaslivres = 2; //Contador de vagas livres int vagasocupadas = 0; //Contador de vagas ocupadas int sensor1 = 0; //Contador de vagas no sensor1 int sensor2 = 0; //Contador de vagas no sensor2 //Define os pinos que serao ligados ao LCD LiquidCrystal lcd(12, 11, 5, 4, 3, 2); NewPing sonar[SONAR_NUM] = { // Armazena informacoes sobre a pinagem dos sensores // Pino trigger, echo e distancia máxima, para cada sensor NewPing(13, 10, MAX_DISTANCE), NewPing(14, 15, MAX_DISTANCE), }; void setup() { Serial.begin(9600); lcd.begin(16,2); //Inicializa LCD lcd.clear(); //Limpa o LCD pingTimer[0] = millis() + 75; //Primeira medicao começa com 75ms //Define o tempo de inicializacao de cada sensor for (uint8_t i = 1; i < SONAR_NUM; i++) pingTimer[i] = pingTimer[i - 1] + PING_INTERVAL; pinMode(Pinoled1Verm, OUTPUT); //Define o Pino vermelho do led1 como saida pinMode(Pinoled1Verde, OUTPUT); //Define o Pino verde do led1 como saida pinMode(Pinoled2Verm, OUTPUT); //Define o Pino vermelho do led2 como saida pinMode(Pinoled2Verde, OUTPUT); //Define o Pino verde do led2 como saida } void loop() { // Loop entre todos os sensores for (uint8_t i = 0; i < SONAR_NUM; i++) { if (millis() >= pingTimer[i]) { //Define o tempo que o proximo sensor sera acionado pingTimer[i] += PING_INTERVAL * SONAR_NUM; // Ciclo do sensor completo if (i == 0 && currentSensor == SONAR_NUM - 1) oneSensorCycle(); // Reseta o timer antes de ler o proximo sensor sonar[currentSensor].timer_stop(); // Número do sensor sendo acionado currentSensor = i; // Se nao houver eco do sensor, seta a distância como zero cm[currentSensor] = 0; sonar[currentSensor].ping_timer(echoCheck); } } //Calcula a quantidade de vagas disponiveis e ocupadas, e imprime no display vagasocupadas = sensor1 + sensor2; vagaslivres = 2 - vagasocupadas; lcd.setCursor(0,0); lcd.print("Vagas livres = "); lcd.print(vagaslivres); lcd.setCursor(0,1); lcd.print("Vagas ocup. = "); lcd.print(vagasocupadas); } void echoCheck() { //Se receber um sinal (eco), calcula a distancia if (sonar[currentSensor].check_timer()) cm[currentSensor] = sonar[currentSensor].ping_result / US_ROUNDTRIP_CM; } void oneSensorCycle() { // Ciclo de leitura do sensor for (uint8_t i = 0; i < SONAR_NUM; i++) { //Se for detectado objeto entre 0 e 50 cm do sensor1, acende o led1 vermelho if (cm[0] > 1 && cm[0] < 50) { digitalWrite(Pinoled1Verm, 1); digitalWrite(Pinoled1Verde, 0); sensor1 = 1; //Incrementa o número de vagas ocupadas na vaga1 } else //Se não for detectado objeto no sensor 1, mantém o led1 verde aceso { digitalWrite(Pinoled1Verm, 0); digitalWrite(Pinoled1Verde, 1); sensor1 = 0; //Marca a vaga 1 como livre } //Se for detectado objeto entre 0 e 50 cm do sensor2, acende o led2 vermelho if (cm[1] > 1 && cm[1] < 50) { digitalWrite(Pinoled2Verm, 1); digitalWrite(Pinoled2Verde, 0); sensor2 = 1; //Incrementa o número de vagas ocupadas na vaga2 } else //Se não for detectado objeto no sensor 2, mantém o led2 verde aceso { digitalWrite(Pinoled2Verm, 0); digitalWrite(Pinoled2Verde, 1); sensor2 = 0; //Marca a vaga 2 como livre } //Imprime os valores lidos no monitor serial, para fins de acompanhamento Serial.print("Sensor : "); Serial.print(i); Serial.print(" = "); Serial.print(cm[i]); Serial.print(" cm - "); } Serial.println(); }
No vídeo abaixo você confere este projeto em funcionamento.
A biblioteca NewPing tem vários recursos e é relativamente fácil de usar. Consulte a documentação nesse link (em inglês) para obter maiores informações.
Atualizado: Veja também como montar um pequeno sensor de estacionamento/ré usando o sensor HC-SR04 no post Sensor de estacionamento/ré com o Arduino e sensor HC-SR04.
Bom dia.
Trabalho para uma empresa que administra shoppings centers e eles estão modernizando um dos shoppings e esperam colocar o sistema de sinalização de vagas. Você teria capacidade de gerir um projeto com 1500 vagas? Entre em contato comigo atraves de [email protected] Ate logo
Pessoal gostei muito desse projeto e estou montando para meu TCC, só que esta havendo um erro quando eu alterei o código para aumentar o numero de sensores, no meu caso seriam sete sensores, gostaria de saber se teria como contar com a ajuda de Vocês para resolver esse problema? e-mail para contato: [email protected]
Boa noite Jonatas,
Qual erro está aparecendo ?
Abraço.
Ola !
Meu Tcc e um estacionamento com 2 sensores um na entrada e um na saida que indica o numero de vagas livres To precisando muito de ajuda !Como Faço para Mostrar em C# em um label as vagas livres ?sendo que este msm label tem q ser atualizado todo segundo para mostrar com precisao as vagas livres .Obrigado!
Boa tarde Henrique,
Que tipo de sensor você vai utilizar para controlar a entrada e saída ?
Abraço.
Usei 2 sensores tcrt5000
O codigo ficou assim
#include
int vagaslivres = 10;
int pinosensorentrada = 7;
int pinosensorsaida=8;//Ligado ao pino "coletor" do sensor óptico
int leitura; //Armazena informações sobre a leitura do sensor
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup()
{
//Inicializa LCD
pinMode(pinosensorentrada, INPUT);
pinMode(pinosensorsaida,INPUT); //Define o pino do sensor como entrada
Serial.begin(9600);
lcd.begin(16,2);
lcd.setCursor(3,0);
lcd.print("Bem Vindo");
lcd.setCursor(2,1);
lcd.print("Play Parking");
}
void loop()
{
//Le as informações do pino do sensor
leitura = digitalRead(pinosensorentrada);
if (leitura != 1) //Verifica se o objeto foi detectado
{
vagaslivres=vagaslivres-1;
while(digitalRead(pinosensorentrada) != 1)
{
Serial.println(vagaslivres);
delay(1000);
lcd.begin(16,2);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Vagas Livres: ");
lcd.setCursor(13,0);
lcd.print(vagaslivres);
}
}
leitura = digitalRead(pinosensorsaida);
if (leitura != 1)
{
vagaslivres=vagaslivres+1;
while(digitalRead(pinosensorsaida) != 1)
{
Serial.println(vagaslivres);
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Vagas Livres: ");
lcd.setCursor(13,0);
lcd.print(vagaslivres);
}
}
if(vagaslivres <=0){
Serial.println("Estacionamento Lotado");
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Estacionamento");
lcd.setCursor(0,1);
lcd.print("Lotado");
delay(1000);
}
}
Esta tudo Ok com a parte da programação arduino so que quero mandar o valor da vaga livre para um label no c# ,ate consegui mandar o valor mais o label nao atualiza sozinho ,precisava muito disto ,meus professores tambem nao estao conseguindo ,Se vcs puderem me ajudar !!Muito Obrigado !!
Olá,
Estou fazendo um projeto com 10 vagas, logo terei 10 sensores HC-SR04 e 10 leds bicolores e uma tela de LDC. Que arduino usar, uno, mega? Qual arduino suporta todos esses componentes, em questao de portas. Um arduino nao tem portas suficientes né?
Agradeço pela ajuda!
Boa tarde Wellington,
Nesse caso, vai ter que ser o Mega, é muita coisa. E digo por experiência que você sempre vai querer colocar um sensor a mais, algum outro led… é melhor um Mega, assim sobra espaço pra mais um monte de coisas.
Abraço !
Boa tarde! Pretendo fazer um projecto de estacionamento inteligente com duas vagas, usando quatro LEDS, dois sensores ulrassonicos, um display LCD 16×02,etc. A minha dúvida é a seguinte um Arduino Uno seria útil para esse projecto?
Oi Humberto,
Perfeitamente. Eu só trocaria o display “comum” de 16 pinos que eu usei no post por um display I2C. Vc vai economizar várias portas do Uno.
Abraço!
Adilson
Olá, estou com o mesmo problema em meu projeto.
também estou fazendo um estacionamento, porém quero expandir o numero de vagas.
Pesquisei sobre o protocolo I2C, e parece ser uma solução.
porém ainda estou com muitas dúvidas…
Protocolo I2C faz comunicação direta entre Sensor ultrassonico e arduino? ou precisarei de um PIC?
Como irei realizar a comunicação dos LED's com o Arduino utilizando esse protocolo?
Pesso sua ajuda caso tenha alguma resposta, muito obrigado!
Boa noite Wellington,
Estou montando esse trabalho com o arduino uno, teria como você me mandar o codigo do programa adaptado para o arduino uno e o ckt.
segue meu email: [email protected]
Abraço!
Qual biblioteca uso para programar com sensores LDR?
Boa tarde André,
Para o LDR você não precisa de biblioteca, como ele é apenas uma resistência (que varia de acordo com a luz), você pode simplesmente ler os valores das portas digitais ou analógicas com os comandos DigitalRead(pino_sensor) e AnalogRead(pino_sensor).
Para maiores informações, nesse post aqui eu falo sobre LDR :
http://www.arduinoecia.com.br/2013/09/controle-de-luz-utilizando-ldr.html
Abraço !
Verdade, vi isso depois. Obrigado pela resposta.
É que sou novo na parte de arduino e nao muito bom em programação. Estou montando um projeto de estacionamento com 10 vagas e usei um outro projeto como base, eles usavam LDR, um servomotor para uma cancela e o display 16×2, mas usaram 2 arduinos uno para montar tudo. Cheguei pensar se um arduino mega seria uma melhor opção (ja que tem pinos digitais e analogicos de sobra para esse projeto), o microcontrolador tambem tem mais memoria só que com mesma frequencia. Acha viável? O processador suporta?
Oi André,
Eu acho que vale mais a pena fazer tudo em um Arduino só, no caso o Mega, pq aí vc tem portas sobrando não só pra colocar mais componentes mas também se precisar expandir o número de vagas fica mais fácil. Tem também a questão de programar uma única placa, melhor do que ficar emendando as coisas depois. rs
O processador suporta tranquilamente. Esse projeto de controle de vagas não exige um grande poder de processamento e nem de velocidade.
Precisando de ajuda, estamos ai. Abraço !
Obrigado pelo suporte cara, esta sendo de grande ajuda!
Só queria perguntar mais uma coisa, por parte de hardware. Como faço os calculos para saber o resistor a ser usado junto aos leds? Nao tenho muita certeza de como ligar na protoboard os componentes em si.
Oi André,
Eu geralmente uso uma calculadora como essa :
http://www.robotizando.com.br/calculadora_leds.php
Mas eu sinceramente não me preocupo muito com esses valores de resistência, principalmente quando estou apenas testando os meus circuitos. Nesse caso coloco uma resistencia de valor alto pq tenho certeza que serve para qualquer led, e se o brilho estiver fraco vou diminuindo o valor aos poucos.
Abraço !
Eu posto uma duvida aqui e um pouco depois acho a resposta kkkkk mas obrigado pela atenção! Ja calculei os valores dos resistores, mas qria saber para que é usado o potenciometro. Tambem vi em um lugar dizendo que a soma das correntes dos bornes do arduino nao podem ultrapassar os 200mA. Isso que cada borne fornece até 40mA. Vou usar 20 leds com media de 25mA caca, como resolvo isso?
Boa noite André,
O potenciômetro serve apenas para regular o contraste do display. Você pode trocá-lo por uma resistência fixa.
Quanto aos leds, sinceramente não sei, ainda não montei nada parecido. rs
Abraço !
iae cara, sou novo nessa área, tou precisando fazer um trabalho com arduino, e pensei em fazer algo parecido com esse, um controle de estacionamento, so que tou tentando entrar como fazer a cancela de um estacionamento, mais nao consigo encontrar em nenhum lugar como fazer, o que comprar, por onde começar, queria saber se voce podia me ajudar cara
Boa noite,
Utilize o formulário de contato no lado direito da página, assim conversamos melhor.
Abraço !
preciso saber se com o uno também tem como fazer
Boa tarde,
Tem sim. Você pode usar as portas analógicas como digitais para ligar os sensores.
Abraço!
Adilson
Boa noite !
Obrigado pelo tutorial e pela divulgação do projeto.
Achei o projeto bastante interessante e como tinha o material em casa o construí.
Consegui fazer pequenas alterações na distancia e ficou ótimo para um estacionamento de brinquedo em escala, mas gostaria de adcionar algumas frases pequenas em rolagem após a leitura do sensor, é possível fazer isto ? Teria um exemplo de como adicionar as frases ?
Obrigado
Bom dia,
Se for usar um display LCD 16×2, você pode usar as informações desse post, creio que tenha o que você precisa :
http://www.arduinoecia.com.br/2014/03/arduino-como-realizar-um-scroll-no-lcd.html
Abraço !
Não era bem o que eu estava pensando mas já dá um norte, é uma opção interessante também.
Obrigado
Boa tarde, realizei um projeto com a mesma finalidade, porém utilizei microcontroladores PIC e um display de 7 segmentos. O problema no meu protótipo é que está dando interferência entre um sensor e outro devido à escala, estou ativando meus leds atraves de um relé, mas quando ligo um sensor perto do outro a uma distancia de 7 cm, ao ativar um sensor os leds de ambos circuitos ficam com o vermelho aceso. Já passou por algum problema assim relacionado ao HC SR-04? Agradeço a atenção!
abraço!
Boa tarde Philip,
Não passei por isso, o meu funcionou com os sensores bem próximos. Você tentou aumentar a distância entre eles para ver se o problema não é outro ?
Abraço.
Boa noite
Meu nome é Fernando Ribeiro e sou síndico de um prédio no Rio de Janeiro, que conta com 70 vagas de garagem. Gostaria de uma indicação de uma empresa que instale esse sistema de controle de vagas.
Obrigado
Enviei um email para você. Abraço !
Boa Noite
gostaria de uma ajuda para um tex se possível!
pretendo instalar (3 sensores) fixo ligado no mesmo Arduíno que corresponde individualmente
em cada sinal sonoro (3 buzzer) é possível? exemplo um carro que informa se o obstaculo está na direita esquerda ou frente com tons diferentes em cada saída como se fosse um sensor de estacionamento so que com tons para direita diferente da esquerda
AGRADECIDO
Boa tarde,
Dê uma olhada neste artigo, creio que tenha o que você precisa. Falta apenas adaptar para a quantidade de sensores que você tem :
http://www.arduinoecia.com.br/2014/04/sensor-de-estacionamento-re-com-arduino.html
Abraço !
Boa tarde, seria possível utilizar em conjunto o xbee, para receber os dados dos sensores remotamente? A ideia seria cada modulo Arduíno, gerenciar um setor, com uma quantidade de vagas/sensores, e os dados destes sensores, serem enviados via xbee a outro Arduíno, também com xbee. E este Arduíno (concentrador) gerenciar quantas vagas estariam livres.
Boa tarde,
É possível sim, apenas acho que encarece bastante o projeto.
Abraço.
Boa tarde, segui o seu tutorial, e funcionou perfeitamente. A única diferença, é que estou utilizando o Arduino Uno R3 e o display I2C, sem o trimpot, mas está rodando certinho.
Rodei o programa deste link http://blog.filipeflop.com/wireless/tutorial-wireless-arduino-xbee-shield.html em separado, e também funcionou ok, apagando e ligando o led para testar a comunicação dos 2 xbees.
Gostaria de que a informação de vaga ocupada ou vaga livre, fosse enviada pelo xbee, para monitorar remotamente via XCTU. O que eu teria que acrescentar ou alterar no programa do estacionamento, para realizar esta tarefa? Valeu!! ;- )
Arduino e Cia, boa tarde.
Não estou conseguindo aumentar a distancia do sensor, preciso que ele detecte algo em torno de 1,20m ou mais é possível?
Boa tarde,
É sim, altere o IF da linha 94, por exemplo:
if (cm[0] > 1 && cm[0] < 50)
Troque o 50 por 120, lembrando que a distancia é em centímetros.
Abraço !
Olá, gostaria que ao invés de verificar a distância do objeto, fosse enviado via serial monitor, a informação de vaga livre / vaga ocupada. Alterei no serial.print, mas ele fica enviando esses dados constantemente. O que eu precisaria alterar para que fosse mostrado no serial monitor, apenas quando houvesse mudança do estado de vaga ocupada e vaga livre?
Boa tarde Adriana,
Faça um "IF" para testar se a condição da vaga foi alterada. Exemplo:
Estado_atual_vaga_1 = 0 //Livre
Estado anterior_vaga_1 = 1 //Ocupada
IF (Estado_atual_vaga_1 != Estado anterior_vaga_1)
{
Serial.print("Vaga alterada. Novo valor : ");
Serial.println(Estado_atual_vaga_1);
Estado anterior_vaga_1 = Estado_atual_vaga_1;
}
Basicamente é isso que vc precisa adaptar no programa.
Abraço.
Olá, rd bem? Eu sou o Matheus, um estudante de eletrônica, e estamos no nosso último ano, (escola técnica). Aos poucos, percebo que a cada dia mais gosto de programação, e pela coincidência, meu TCC terá dois sensores ultrasonicos HC-SR04. E pra mim ir desenvolvendo mais minhas habilidades em C e em Arduíno, peguei pra estudar a biblioteca do New Ping. Confesso que não achei nenhuma instrução que me diz que eu possa trabalhar até com 15 sensores, apesar de saber que posso.
Minha pergunta é, você pode me apontar onde está essa instrução, pois ela me será útil na confecção da minha própria biblioteca. Desde já Agradeço 😉
Boa noite Matheus,
Eu usei essa biblioteca com no máximo 2 sensores, mas creio que não seja complicado de fazer. No início do programa, você tem que setar a variável com o número de sensores (SONAR_NUM, na linha 8).
Depois, você vai no array onde estão definidos os pinos dos sensores (entre as linhas 33 e 39). Ali você adiciona os outros sensores. Exemplo:
SONAR_NUM = 4
NewPing sonar[SONAR_NUM] =
{
// Armazena informacoes sobre a pinagem dos sensores
// Pino trigger, echo e distancia máxima, para cada sensor
NewPing(13, 10, MAX_DISTANCE), //Sensor1
NewPing(14, 15, MAX_DISTANCE), //Sensor2
NewPing(4, 5, MAX_DISTANCE), //Sensor3
NewPing(6, 7, MAX_DISTANCE), //Sensor4
};
Basicamente é isso. Espero que ajude. Abraço !
Boa noite, só estudando de engenharia estou fazendo meu tcc. Fiz a seguinte alteração acima que você falo para aumentar a quantidade de sensor sonico ele liga o led verde, Mais não faz a alteração quando aproximo do sensor. Sabe me informar se isso pode ser a biblioteca ou alguma coisa da programação que tem que ser alterada? Conto com sua ajuda ótimo trabalho.
Bom dia.
Alem de acrescentar os sensores e ledes no inicio do código, com os pinos correspondentes, também tem que incluir os leds verde e vermelhos no final do código no ultimo FOR.
Minha pergunta é a seguinte: aproveitando esse for, mudando a sequencia de LEDS e sensores que começam em 1, para começarem em 0, e melhorando o código, posso deixar o código dessa forma?
for (uint8_t i = 0; i < SONAR_NUM; i++) {
//Se for detectado objeto entre 0 e 50 cm do sensor1, acende o led1 vermelho
if (cm[i] > 1 && cm[i] < 50)
{
digitalWrite(Pinoled[i]Verm, 1);
digitalWrite(Pinoled[i]Verde, 0);
sensor[i] = 1; //Incrementa o número de vagas ocupadas na vaga[i]
}
else //Se não for detectado objeto no sensor i, mantém o led1 verde aceso
{
digitalWrite(Pinoled[i]Verm, 0);
digitalWrite(Pinoled[i]Verde, 1);
sensor[i] = 0; //Marca uma vaga como livre
}
Boa noite, queria saber se existe algum software que eu poderia consultar em meu computador onde qual a posição tem vaga livre no estacionamento.
Boa noite, sou estudante de engenharia, primeiramente, parabéns pelo projeto e agradeço por disponibilizar, está me ajudando muitíssimo, precisar utilizar 5 sensores e mandar informaçoes para um display, até ai blz, minha dúvida é o seguinte, preciso também enviar essas informaçoes para um aplicativo android, sera que teria como um aplicativo mostrar quais vagas estão disponiveis ou ocupadas no momento? por ex: o aplicativo serviria somente para mostrar talvez em bolinha verde ' vaga livre' e bolinha vermelha ' vaga ocupada' , se atualizar constantemente, e talvez mostrar em setores … o condutor do veiculo só se conectaria ao aplicativo para saber instantaneamente onde há vagas. se puder me dar uma luz te agradeceria muitooo, obrigado desde já,.
Bom dia Igor,
É possível, mas acho que você vai esbarrar na velocidade de atualização… teria que ser alguma coisa via wifi, que atualize rápido o aplicativo, senão não faria sentido. Para um protótipo, acho que funciona bem.
Abraço!
Boa tarde, sou estudante de Eletrónica e Telecomunicações e estou a fazer um parque de estacionamento automatizado, e queria fazer parecido com o seu código, mas em vez de dois lugares por 10, eu compilei e apareceu-me o seguinte erro: 'lcd' was not declared in this scope; 'class HardwareSerial' has no member named 'println'
Cumprimentos, e espero que me possa ajudar-me!!
Boa tarde, sou estudante de Eletrónica e Telecomunicações e estou a fazer um parque de estacionamento automatizado, e queria fazer parecido com o seu código, mas em vez de dois lugares por 10, eu compilei e apareceu-me o seguinte erro: 'lcd' was not declared in this scope; 'class HardwareSerial' has no member named 'println'
Cumprimentos, e espero que me possa ajudar-me!!
Boa tarde, estou montando meu TCC com arduino e e´um estacionamento, e estou com um problema, pode ser simples, mas como não conheço muito de arduino estou com dificuldade, quando aciono o botão de entrada do estacionamento, ele faz a leitura e me disponibiliza a vaga livre mais próxima da entrada do estabelecimento, abre a cancela, o carro entra e baixa a cancela, porem se tiver outro veiculo logo atrás, e pressionar o botão solicitando vaga, e o primeiro veiculo ainda não tenha chegado na vaga que foi disponibilizada, o sistema disponibiliza a mesma vaga. se puder me ajudar ficarei muito agradecido.
fico no aguardo.
Edílson Queiroz
email: [email protected]
Bom dia Edilson,
Você tem que implementar algum contador que "reserve" a vaga, não disponibilizando enquanto o carro não estacionar.
Se não conseguir, entre em contato utilizando o formulário de contato no lado direito da página.
Abraço!
Boa noite, estou com um problema na programação dos sensores ultrassônicos(Newping). quando eu coloco mais de um sensor ultra e acrescendo algum código, os sensores entram em conflito e acaba bugando o código todo.
Será que você poderia me ajudar?
email: [email protected]
Boa noite
Gostaria de saber se as distâncias cm[0] e cm[1] correspondem, respectivamente, aos sensores 1 e 2, e se isso é determinado pela ordem das I/O's.
Por exemplo:
NewPing(13, 10, MAX_DISTANCE),
NewPing(14, 15, MAX_DISTANCE),
O sensor 1 corresponde ao NewPing que tem as I/O's mais antecessoras. É assim?
Se possível, por gentileza, responda para meu email ([email protected]).
Desde já, agradeço.
estou com um problema, tudo funciona menos o lcd que nao liga, o sensor funciona e acende os leds..
Boa Noite,
Faço curso técnico de eletroeletrônica, estou na ultima matéria que é projetos. Preciso fazer um projeto e gostei bastante deste seu. Vou fazê-lo, só que quero acrescentar uma cancela. Gostaria de saber se não têm como você me ajudar me dando algumas ideias para acrescentar esta cancela? Fazendo favor.
Desde já agradeço.
Boa noite,
Por favor entre em contato utilizando o formulário de contato no lado direito da página.
Abraço!
Bom dia!
teria como substituir os sesores por reed switch? e como ficaria o código?
Obrigado!
me ajude que tipo de ajustes que eu devo fazer para colocar em uma arduino uno r3
Boa tarde, teria como você me mandar o esquema e circuito desse projeto usando ldr?
Boa tarde teria como você me manda o esquema e o circuito usando ldr e utilizando 2 arduinos uno ao invés do mega?
Bom dia,
Estou com dificuldades de adicionar um terceiro sensor.
Adiciono as programações, mais o segundo sensor fica indicando com duas vagas ocupadas ao mesmo tempo.
Poderia me ajudar!
Att,
Emanuel Malerba
Boas altere a seguinte linha if (cm[1] > 1 && cm[1] < 50) para if (cm[3] > 1 && cm[3] < 50) só da para adicionar 4 sensores nao consegui adicionar o quinto
Bom dia, estou com problema nessa linha de código if (i == 0 && currentSensor == SONAR_NUM – 1) oneSensorCycle(), está falando que não está declarado no escopo!
O que faço?
Oi Sandro,
Me parece que você não está usando a biblioteca correta. Siga os links do post, por favor. 🙂
Abraço!
Ola Sandro Souza. Tambem tive mesmo erro, qui tal já conseguiste resolver este erro?
Boa tarde! Perdão a ignorância, estou controlando um projeto 16 ultrassonicos em 1 arduino mega e mais 16 ultrassonicos em outro arduino mega, utilizando a library ultrassonic.h . Pq esse library, a newping se sai melhor que a ultrassonic.h? pois consigo medir todos os ultras normais com a library ultrassonic.h . Abraço
Boa noite(Pedro Gonçalves), Estou a pedir enviar seus SKETCH com 16 sensores!
Bom dia tudo bem?
Eu estou fazendo o mesmo projeto na minha faculdade, só que acrescentei mais um sensor.
O problema dá quando o carro estaciona na vaga 2, a vaga dois pega o valor da vaga 2 e 3 e o sensor que acrescentei na vaga 3 não funciona.
O que pode ser? Eu percebi que no seu código, na linha 38 você acrescentou uma virgula no final, está certo?
Estou usando 4 sensores ultrasonico, como faço para setar ? porque meus dois outros sensores não estão sendo detectado
Boa noite, estou usando 4 sensores, mas 2 não estão sendo detectados, eu preciso setar o SONAR_NUM … Como faço isso ?
boa noite teria como usar dois sensores para calculo de velocidade?
por exemplo dada a distancia entre os sensores seria medido o tempo de detecção entre cada um dos sensores e a partir daí calcular a velocidade como nos radaeres de rua?
Oi Sandro,
Teoricamente sim, mas não seria uma medição muito precisa, já que o sensor ultrassônico tem uma faixa de detecção (ou abertura) grande. Existem sensores ultrassônicos, como os da Maxibot, que tem um ângulo de detecção menor, talvez fosse mais indicado nesse caso.
Abraço!
Adilson
muito bom projeto, vou fazer incrementa algumas coisas. Pretendo me basear nesse projeto para fazer o meu tcc. em breve vou entra em contato para tirar algumas duvidas.
Boa noite! tudo bem? Estou a tentar Implementar este sistema + com 6 sensores ultrassônicos e Visualizar na Matriz de LED 8X8!
So que estou a ter uns problemas, quando compito da erro'oneSensorCycle' was not declared in this scope
Amigo, tudo bem? Gostaria de saber como devo proceder com mais dois sensores, vou utilizar 4 vagas com 4 Hc-SR04 em cada, não estou conseguindo add mais dois sensores, poderia me auxiliar por favor? Agradeço irmão.
Oi Johan,
Muito legal! Se precisar de ajuda, entre em contato utilizando o formulário de contato no lado direito da página.
Abraço!
Adilson
Oi Johan,
Já tentou o Fritzing? (fritzing.org)
Abraço!
Adilson
Bom dia.Gostei muito desse projeto.Terua como mandar um projeto com 6 sensores ultrassonico e duas cancelas???
Oi Anderson,
Não tenho. Eu precisaria desenvolver isso. Se tiver interesse, entre em contato utilizando o formulário de contato no lado direito da página.
Abraço!
Adilson
Oi, me responde uma duvida, estou utilizando leds comuns, separados em suas cores, como faço pra eles ficarem em vermelho quando nao tem carro no estacionamento e verde quando tem? Percebi que somente trocar os leds e utilizar sua prog. não funciona neste tipo de Led. agradeço amigo
Boa tarde Johan,
Como você conectou os leds?
Adilson
Pessoal, bom dia Poderiam me passar a lista de led's sensores e etc de tudo que é necessário para este projeto?
Boa tarde,
2 leds bicolores
2 sensores ultrassônicos HC-SR04
1 Arduino Mega
1 Display LCD 16×2
1 Potenciômetro
Resistores diversos
Jumpers
Protoboard
Abraço!
Adilson
Prezado
Boa noite. Vi somente agora esse seu post. No Brasil e na America Latina, fomos os pioneiros tanto com sistema de ultrasom e com cameras. E nos ultimos 5 anos desenvolvemos o sistema mais rapido, mais pratico e mais eficiente do mercado – Freedom III
Gosto de ver o empenho de estudantes de universidade fazendo sistemas desse tipo nos seus tccs e posso dizer que um sistema desses nao se faz em um ano somente. Mesmo assim, todo o esforco sempre eh um grande aprendizado. Parabens
Cassiano Zanetti
Gostaria de implementar esse sistema em um cliente, poderia entrar em contato ?
Oi Robson,
Por favor entre em contato usando o link “Fale com o Administrador do site” no final da página.
Abraço!
Adilson
Boa tarde, estou tendo um problema com a programação deste sketch, onde no arduino consta um erro no ” cm[currentSensor] = 0;
sonar[currentSensor].ping_timer(echoCheck)” e também no “void echo check”, cheguei a retirar estas duas partes da programação e não houve erros após isso, porém não aconteceu a alternância entre os LEDs verde e vermelho, conforme foi variando a distância, apenas o LED verde permaneceu aceso.
ola o meu projeto seria simples somente com um sensor, so que ao inves de leds bicolor eu usei dois leds um vermelho e um verde, alterei oq achei q deveria alterar no codigo mas continua dando erro aparece esse erro:
8:10: fatal error: NewPing.h: No such file or directory
exit status 1
estou fazendo com arduino uno e o codigo ficou assim:
//Inicializa as bibliotecas do sensor Ultrasonico e do Display
#include
#include
#define SONAR_NUM 1; // Define o numero de sensores
#define PING_INTERVAL 33;
// Armazena a quantidade de vezes que a medicao deve ocorrer,para o sensor
unsigned long pingTimer[SONAR_NUM];
unsigned int cm[SONAR_NUM]; // Armazena o numero de medicoes
uint8_t currentSensor1 = 0; // Armazena o sensor que esta ativo
int PinoledVerm = 8; //Pino led – Vermelho
int PinoledVerde = 13; //Pino led – Verde
int vagaslivres = 1; //Contador de vagas livres
int vagasocupadas = 0; //Contador de vagas ocupadas
int sensor1 = 0; //Contador de vagas no sensor1
//Define os pinos que serao ligados ao LCD
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
NewPing sonar[SONAR_NUM] =
{
// Armazena informacoes sobre a pinagem dos sensores
// Pino trigger, echo e distancia máxima, para cada sensor
NewPing(13, 10,),
};
void setup()
{
Serial.begin(9600);
lcd.begin(16,2); //Inicializa LCD
lcd.clear(); //Limpa o LCD
pingTimer[0] = millis() + 75; //Primeira medicao começa com 75ms
//Define o tempo de inicializacao de cada sensor
for (uint8_t i = 1; i < SONAR_NUM; i++)
pingTimer[i] = pingTimer[i – 1] + PING_INTERVAL;
pinMode(PinoledVerm, OUTPUT); //Define o Pino vermelho do led1 como saida
pinMode(PinoledVerde, OUTPUT); //Define o Pino verde do led1 como saida
}
void loop()
{
// Loop entre todos os sensores
for (uint8_t i = 0; i = pingTimer[i]) {
//Define o tempo que o proximo sensor sera acionado
pingTimer[i] += PING_INTERVAL * SONAR_NUM;
// Ciclo do sensor completo
if (i == 0 && currentSensor == SONAR_NUM – 1) oneSensorCycle();
// Reseta o timer antes de ler o proximo sensor
sonar[currentSensor].timer_stop();
// Número do sensor sendo acionado
currentSensor = i;
// Se nao houver eco do sensor, seta a distância como zero
cm[currentSensor] = 0;
sonar[currentSensor].ping_timer(echoCheck);
}
}
//Calcula a quantidade de vagas disponiveis e ocupadas, e imprime no display
vagasocupadas = sensor1;
vagaslivres = 2 – vagasocupadas;
lcd.setCursor(0,0);
lcd.print(“Vagas livres = “);
lcd.print(vagaslivres);
lcd.setCursor(0,1);
lcd.print(“Vagas ocup. = “);
lcd.print(vagasocupadas);
}
void echoCheck() { //Se receber um sinal (eco), calcula a distancia
if (sonar[currentSensor].check_timer())
cm[currentSensor] = sonar[currentSensor].ping_result / US_ROUNDTRIP_CM;
}
void oneSensorCycle() { // Ciclo de leitura do sensor
for (uint8_t i = 0; i 1 && cm[0] < 50)
{
digitalWrite(PinoledVerm, 1);
digitalWrite(PinoledVerde, 0);
sensor1 = 1; //Incrementa o número de vagas ocupadas na vaga1
}
else //Se não for detectado objeto no sensor 1, mantém o led1 verde aceso
{
digitalWrite(PinoledVerm, 0);
digitalWrite(PinoledVerde, 1);
sensor1 = 0; //Marca a vaga 1 como livre
}
//Imprime os valores lidos no monitor serial, para fins de acompanhamento
Serial.print("Sensor : ");
Serial.print(i);
Serial.print(" = ");
Serial.print(cm[i]);
Serial.print(" cm – ");
}
Serial.println();
}
poderia me ajudar amigo?
Oi Ely,
Por favor, verifique a instalação da biblioteca Newping. Esse erro acontece pois a IDE não está encontrando a biblioteca.
Abraço!
Adilson
Olá, tudo bem?
Gostaria de fazer um projeto acadêmico sobre esta ideia do estacionamento. para meu TCC.
É possível entrar em contato para conversarmos a respeito?
Abs
Sérgio
Oi Sérgio!
Tudo bem? Obrigado pelo interesse. Por favor entre em contato utilizando o formulário de contato no rodapé da página.
Abraço!
Adilson
Olá Adilson, obrigado.
Formulário enviado.
Abs
Olá, tudo bem ?
estou fazendo um projeto parecido e gostaria de entrar em contato para tirar umas duvidas, seria possível ?
gostaria de usar a pastilha piezo
Olá, não achei simulador online que simule o arduino Mega, apenas o Uno. Vocês conhecem algum simulador que faça isso?
Ou, vocês teriam a adaptação para usar esse código no arduino Uno? vi que algumas pessoas pediram anteriormente
Olá,
Parabéns pelo projeto, muito interessante.
Vou fazer um projeto para o meu técnico e vou fazer um controle de estacionamento como esse, mas além disso quero fazer uma 2 cancelas e tbm um contator de tempo, consegue me dar um norte?? E tu acha que é possivel fazer isso com o arduino Uno?
Parabéns pelo projeto, muito bom!
Estou querendo fazer um projeto na mesma pegada, mas além do controle de vagas vou colocar 2 cancelas e ainda calcular o tempo q fica ocupando a vaga. Pode me dar um help? Com td isso da pra fazer no arduino uno ou tem q ser o mega?