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);

      }

   

Exibições: 1098

Responder esta

Respostas a este tópico

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. 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço