Olá gente, meu nome é Guilherme e sou novo em Arduino, gostaria de saber como aprimorar, deixar mais curto esse programa, gostaria de ter o programa escrito e a explicação de como funciona esse código,OBRIGADO
PROJETO ULTRASSOM SENSOR ESTACIONAMENTO
Itens necessários:
Placa Arduino UNO ou similiar;
Sensor de ultrassom compatível;
Buzzer;
Led verde;
Led vermelho;
Resistores(para leds);
Display led 7 segmentos;
MONTAGEM:
Vcc ultrassom = 5v
Trig ultrassom = pin12
Echo ultrassom = pin13
GND ultrassom = GND
Display1 = pin6
Display2 = pin5
Display3 = GND
Display4 = pin4
Display6 = pin3
Display7 = pin2
Display8 = GND
Display9 = pin7
Display10 = pin8
ledVerm = pin10
ledVerd = pin11
buzina = pin9
Função:
Simular um estacionamento , acionar a buzina se a distancia estiver baixa e demonstrar a distancia com um display led 7 segmentos
código:
const int trigPin = 12;
const int echoPin = 13;
void setup()
{
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(3,OUTPUT);
pinMode(2,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(9,OUTPUT);
}
void loop()
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
unsigned long duracao = pulseIn(echoPin, HIGH);
int distancia = duracao/ 58;
Serial.print("distancia cm :");
Serial.println(distancia);
if(distancia<=10){
Serial.println("vaga ocupada");
digitalWrite(10,HIGH);
digitalWrite(11,LOW);
}
else{
Serial.println("vaga livre");
digitalWrite(11,HIGH);
digitalWrite(10,LOW);
digitalWrite(9,LOW);
}
if(distancia ==9){
digitalWrite(2, 1);
digitalWrite(3, 1);
digitalWrite(4, 1);
digitalWrite(5, 0);
digitalWrite(6, 0);
digitalWrite(7, 1);
digitalWrite(8, 1);
digitalWrite(9,0);
delay(100);
}
if(distancia == 8){
digitalWrite(2, 1);
digitalWrite(3, 1);
digitalWrite(4, 1);
digitalWrite(5, 1);
digitalWrite(6, 1);
digitalWrite(7, 1);
digitalWrite(8, 1);
digitalWrite(9,0);
delay(100);
}
if (distancia == 7){
digitalWrite(2, 1);
digitalWrite(3, 1);
digitalWrite(4, 1);
digitalWrite(5, 0);
digitalWrite(6, 0);
digitalWrite(7, 0);
digitalWrite(8, 0);
digitalWrite(9,0);
delay(100);
}
if (distancia == 6){
digitalWrite(2, 1);
digitalWrite(3, 0);
digitalWrite(4, 1);
digitalWrite(5, 1);
digitalWrite(6, 1);
digitalWrite(7, 1);
digitalWrite(8, 1);
digitalWrite(9,0);
delay(100);
}
if (distancia == 5 ){
digitalWrite(2, 1);
digitalWrite(3, 0);
digitalWrite(4, 1);
digitalWrite(5, 1);
digitalWrite(6, 0);
digitalWrite(7, 1);
digitalWrite(8, 1);
digitalWrite(9,0);
delay(100);
}
if(distancia==4){
digitalWrite(2, 0);
digitalWrite(3, 1);
digitalWrite(4, 1);
digitalWrite(5, 0);
digitalWrite(6, 0);
digitalWrite(7, 1);
digitalWrite(8, 1);
digitalWrite(9,0);
delay(100);
}
if(distancia==3){
digitalWrite(2, 1);
digitalWrite(3, 1);
digitalWrite(4, 1);
digitalWrite(5, 1);
digitalWrite(6, 0);
digitalWrite(7, 0);
digitalWrite(8, 1);
digitalWrite(9,1);
delay(100);
digitalWrite(9,0);
Serial.println("distancia baixa,buzina acionada");
delay(100);
}
if(distancia==2){
digitalWrite(2, 1);
digitalWrite(3, 1);
digitalWrite(4, 0);
digitalWrite(5, 1);
digitalWrite(6, 1);
digitalWrite(7, 0);
digitalWrite(8, 1);
digitalWrite(9,1);
delay(100);
digitalWrite(9,0);
Serial.println("distancia baixa,buzina acionada");
delay(100);
}
if(distancia==1){
digitalWrite(2, 0);
digitalWrite(3, 1);
digitalWrite(4, 1);
digitalWrite(5, 0);
digitalWrite(6, 0);
digitalWrite(7, 0);
digitalWrite(8, 0);
digitalWrite(9,1);
delay(50);
digitalWrite(9,0);
Serial.println("distancia muito baixa,buzina acionada");
delay(100);
}
if(distancia==0){
digitalWrite(2, 1);
digitalWrite(3, 1);
digitalWrite(4, 1);
digitalWrite(5, 1);
digitalWrite(6, 1);
digitalWrite(7, 1);
digitalWrite(8, 0);
digitalWrite(9,1);
Serial.println("distancia inexistemte,buzina acionada");
delay(100);
}
Tags:
Vou dar uma dica para diminuir o código na parte do display de 7 segmentos.
Primeiro crie uma matriz de inteiros que irá conter todas as combinações para o display, portanto deverá possuir 10 linhas (1 para cada numero) e 7 colunas (1 para cada segmento do display) dessa forma:
int numerous[10][7] = {
{1, 1, 1, 1, 1, 1, 0}, //0
{0, 1, 1, 0, 0, 0, 0}, //1
{1, 1, 0, 1, 1, 0, 1}, //2
{1, 1, 1, 1, 0, 0, 1}, //3
{0, 1, 1, 0, 0, 1, 1}, //4
{1, 0, 1, 1, 0, 1, 1}, //5
{1, 0, 1, 1, 1, 1, 1}, //6
{1, 1, 1, 0, 0, 0, 0}, //7
{1, 1, 1, 1, 1, 1, 1}, //8
{1, 1, 1, 1, 0, 1, 1} //9
};
Agora substitua todos os seus IF`s relacionados ao display por esse único FOR
for(int x=0; x<7; x++){
digitalWrite(x+2, numeros[distancia][x]);
}
muito obrigado!Eu estava procurando mesmo por esse codigo, só que eu sou iniciante e gostaria de saber como funciona esse codigo, muito obrigado desde já!!e outra coisa, quando a vaga fica livre, o display começa a mostrar coisas aleatórias,
O funcionamento desse código é bem simples, a função for vai executar o digitalWrite em cada ciclo, ou seja, vai executar uma vez para x=0, depois executa para x=1 e assim por diante até a ultima execução em x=6.
Como primeiro parametro do digitalWrite temos x+2 pois percebi que o pino utilizado por você vai de 2 a 8 e o como o valor de x varia de 0 a 6, a diferença é esse 2. O segundo parâmetro do digitalWrite é onde está a parte mais importante desse código, numeros[distancia][x].
A matriz números possui uma linha para cada numero (de 0 a 9) e uma coluna para cada pino do display, dessa forma o valor de x deve ser colocado na coluna, pois é o que varia, e a distancia deve ser colocado na linha, pois é fixo durante todo o FOR.
Para evitar essas "coisas aleatórias" você pode apagar o display quando verificar que a vaga está ocupada. Para apagar utilize um for variando de 2 a 8 (que são os pinos utilizados por você) e dentro do for coloque um digitalWrite para definir o pino como LOW.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por