domingo, 24 de junho de 2018

Arduíno circuit of the crossingB project

Circuit made using the Tinkercad site to simulate the operation of the project before using the real Arduino


Below we have a video of the circuit running. We can see the components and the connections.





This is the final code used in Arduino for the operation of the CrossingB project


#include <Ultrasonic.h>

 //Importamos a Biblioteca do sensor ao projeto.

  int verde= 11; //Pino 11 será saída do sensor 2(carro parado)
  int red1 = 12; //Pino 12 será saída do sensor 3(sem carro)
  int red2 = 13; //Pino 13 será saída do botão pressionado
  int buzzer = 21;
  long tempoInicialSensor2 = millis();
  long tempoInicialSensor3 = millis();
  
  Ultrasonic ultrasonic2(3,2); //Instanciamos a biblioteca, 3 <- Trigger e 2 <- Echo
  Ultrasonic ultrasonic3(15,14); //Instanciamos a biblioteca, 15 <- Trigger e 14 <- Echo
  
  unsigned long contSensor2;
  unsigned long contSensor3;

  long microSegundos = 0;
  float distanciaCentimetrosSensor2 = 0;
  float distanciaCentimetrosSensor3 = 0; 

//função do botão pressionado
  boolean botaoPressionado(){
    return digitalRead(8)== HIGH;
  }

void setup() {

  Serial.begin(9600);
  Serial.begin(9600); //Iniciamos a porta serial com Baud Rate de 9600B (velocidade de trasnferência)
  
  pinMode(verde, OUTPUT);
  pinMode(red1, OUTPUT); 
  pinMode(red2, OUTPUT); 
  pinMode(buzzer, OUTPUT);
  pinMode(8, INPUT_PULLUP); //Botão
}

void loop() {
  
   digitalWrite(verde, LOW); 
   digitalWrite(red1, LOW); 
   digitalWrite(red2, LOW); 
   digitalWrite(buzzer,LOW);
   distanciaCentimetrosSensor2 = 0;
   distanciaCentimetrosSensor3 = 0;
   
 //Converte de segundos para centimetros. 
  microSegundos = ultrasonic2.timing(); 
  distanciaCentimetrosSensor2 = ultrasonic2.convert(microSegundos, Ultrasonic::CM); 

  microSegundos = ultrasonic3.timing();
  distanciaCentimetrosSensor3 = ultrasonic3.convert(microSegundos, Ultrasonic::CM); 

  
 //Liga o led vermelho enquanto o botão estiver pressionado   
  if(botaoPressionado()){  
    digitalWrite(red2, HIGH);
  }
  
//inicia as contagens
  contSensor2=millis();
  contSensor3=millis();

    
//Se algo ficar menos de 5 segundos parado e sair da frente do sensor, a contagem reinicia
    if(distanciaCentimetrosSensor2 > 5 || !botaoPressionado()){ //Distância tem que ser maior doq cinco(não tem ninguém) ou se o botão não tiver pressionado a contagem reinicia 
        tempoInicialSensor2 = contSensor2;
    } 
  
//sensor 2,  carro parado por 5 segundos ativa o buzzer e a luz verde
    if(distanciaCentimetrosSensor2 < 5 && contSensor2 > (tempoInicialSensor2 + 4000 )){ 
   
       digitalWrite(verde, HIGH); //Liga o LED verde 
       tone(buzzer, 1000, 1000); //ativa o buzzer
       delay(1000);

    tempoInicialSensor2 = contSensor2;
     
  }
// Se passar um carro a contagem do sensor 3 reinicia
    if(distanciaCentimetrosSensor3 < 5 || !botaoPressionado()){ //Distância tem que ser menor doq cinco(tem alguém passando) ou se o botão não tiver pressionado a contagem reinicia 
       tempoInicialSensor3 = contSensor3;
  }
  
//sensor 3, se não passar carro em 10 segundos ativa o buzzer
    else if(distanciaCentimetrosSensor3 > 5 && contSensor3 > (tempoInicialSensor3 + 5000 ) && distanciaCentimetrosSensor2 > 5){
   
      digitalWrite(red1, HIGH); //Liga o LED Vermelho
      tone(buzzer, 3000, 2000); //ativa o buzzer
      delay(1000);

      tempoInicialSensor3 = contSensor3;

  }

   
    Serial.print(distanciaCentimetrosSensor2); //Imprime na porta serial qual é atual distância 
    Serial.println(" CM"); //Imprime espaço e CM, não podemos concatenar com o valor acima.

    Serial.print(distanciaCentimetrosSensor3); //Imprime na porta serial qual é atual distânciao
    Serial.println(" CM"); //Imprime espaço e CM, não podemos concatenar com o valor acima.
    
    delay(500);  //Aguarda um meio segundo para finalizar o método
}

Nenhum comentário:

Postar um comentário