Sensor De Deslizamento

O sensor de deslizamento tem como objetivo detectar movimentos de terra em encostas, por exemplo, e emitir sinais que alertam para uma população local de risco de deslizamento.

Supplies:

O que outras pessoas estão dizendo

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

Step 1: Materiais

-Placa de Arduíno Uno;

-Sensor Mpu 6050;

-Cabos de cores diferentes;

-Software Arduíno IDE;

-Cabo USB das duas pontas;

-Cápsula para proteger o sistema.

Step 2: Conexões Placa De Arduíno - Sensor

SLC - A5;

SDA - A4;

VCC - 5v;

GND - gnd

Esses cabos devem ser conectados nos terminais acima

Step 3: Código

<p>//Carrega a biblioteca Wire<br>    #include<wire.h></p><p>    //Endereco I2C do MPU6050
    const int MPU=0x68;      
    //Variaveis para armazenar valores dos sensores    
    int AcX=0,AcY=0,AcZ=0,Tempo=2000;
    float AngPlanoZX; float AngPlanoZY; float TempoZX ; float TempoZY;
    const int LED = 13;//Informa que o LED que irá acender e apagar será o da Placa de ArduínoUno
    </p><p>    void setup()
    {
      pinMode (LED, OUTPUT); //Define o pino do LED como saída
      Serial.begin(9600); //Inicia a comunicação com o computador, com uma taxa de transmissão de 9600 bits per second
      Wire.begin(); //Inicia a biblioteca Wire
      Wire.beginTransmission(MPU); //Inicia a transmissão dos dados do sensor
      Wire.write(0x6B); 
      //Inicializa o MPU-6050
      Wire.write(0); 
      Wire.endTransmission(true); 
    }
    void Piscar(int Intensidade)//Função que irá controlar a intensidade da piscada, em relação ao ângulo de inclinação que o sensor se encontra
    {
      switch (Intensidade){
        case 1: Tempo=TempoZX; break;//Informa um primeiro caso para a piscada do LED
        case 2: Tempo=TempoZY; break;//Informa um segundo caso para a piscada do LED
      }
      digitalWrite(LED, HIGH);//Liga o LED
      delay(Tempo);//Espera 
      digitalWrite(LED, LOW);//Desliga o LED
      delay(Tempo);     
      
    }
    void loop()
    {
      Wire.beginTransmission(MPU);
      Wire.write(0x3B);  // 
      Wire.endTransmission(false);
      //Solicita os dados do sensor
      Wire.requestFrom(MPU,14,true);
      //Armazena o valor dos sensores nas variaveis correspondentes
      AcX=Wire.read()<<8|Wire.read();       
      AcY=Wire.read()<<8|Wire.read();  
      AcZ=Wire.read()<<8|Wire.read();     </p><p>      //calculo para converter o valor bruto do acelerometro
      float Ax=AcX*(9.81/16384);
      float Ay=AcY*(9.81/16384);
      float Az=AcZ*(9.81/16384);      </p><p>      //Conversão dos valores obtidos, em radianos, para graus
      AngPlanoZX= (atan(Ax/Az))*(180/PI);
      AngPlanoZY= (atan(Ay/Az))*(180/PI);
           
      //Verificação da inclinação do sensor de massa
      if (AngPlanoZX>(15) || AngPlanoZX<(-15))
      { 
        //Função que parametriza o tempo da piscada do led
        TempoZX= 1000+((1000-50)/(15-90)*(abs(AngPlanoZX)-15));       
        
        Serial.print ("O ângulo de inclinação do sensor é de = "); Serial.print(AngPlanoZX); Serial.println("°");//Informa o ângulo de inclinação do sensor
        Serial.println ("AVISO! POSSIBILIDADE DE DESLIZAMENTO DE MASSA!");//Envia a mensagem para o monitor serial
        Serial.println(" ");
        Piscar(1);//Inicia o primeiro caso da piscada do LED
      }
      else if (AngPlanoZY>(15) || AngPlanoZY<(-15))      
      {
        //Função que parametriza o tempo da piscada do led       
        TempoZY= 1000+((1000-50)/(15-90)*(abs(AngPlanoZY)-15));
        
        Serial.print ("O ângulo de inclinação do sensor é de = "); Serial.print(AngPlanoZY); Serial.println("°");//Informa o ângulo de inclinação do sensor
        Serial.println ("AVISO! POSSIBILIDADE DE DESLIZAMENTO DE MASSA!");//Envia a mensagem para o monitor serial
        Serial.println(" ");
        Piscar(2);//Inicia o segundo caso da piscada do LED     
      }
      else
      {
         digitalWrite(LED, LOW);//Desliga o LED
         //Imprime os valores da aceleração lido pelo sensor antes do calculo.
         Serial.println("\n");
         Serial.print("AcX = "); Serial.print(AcX); Serial.print("    ");//Informa o valor da acelaração medido pelo sensor, em bits, no eixo X
         //Envia valor Y do acelerometro para a serial
         Serial.print(" | AcY = "); Serial.print(AcY); Serial.print("      ");//Informa o valor da acelaração medido pelo sensor, em bits, no eixo Y
         //Envia valor Z do acelerometro para a serial
         Serial.print(" | AcZ = "); Serial.println(AcZ);//Informa o valor da acelaração medido pelo sensor, em bits, no eixo Z
        
         //Valor da aceleração após o cálculo.
         Serial.print("AcX = "); Serial.print(Ax); Serial.print(" m/s²");//Informa o valor da acelaração medido pelo sensor, em m/s², no eixo X
         Serial.print(" | AcY = "); Serial.print(Ay); Serial.print(" m/s²");//Informa o valor da acelaração medido pelo sensor, em m/s², no eixo Y
         Serial.print(" | AcZ = "); Serial.print(Az);Serial.println(" m/s²");//Informa o valor da acelaração medido pelo sensor, em m/s², no eixo Z</p><p>         Serial.print("Ângulo de inclinação do eixo Z no plano ZX= "); Serial.print(AngPlanoZX); Serial.println("°");//Informa o ângulo de inclinação
         Serial.print("Ângulo de inclinação do eixo Z no plano ZY= "); Serial.print(AngPlanoZY); Serial.println("°"); Serial.println("-----------------------------------------");//Informa o ângulo de inclinação
      }
      
      //Aguarda 2000 ms e reinicia o processo
      delay(Tempo);
    }</p>

Step 4: Resultado Final

Sensor funcionando.

Be the First to Share

    Recommendations

    • Instrument Contest

      Instrument Contest
    • Make it Glow Contest

      Make it Glow Contest
    • STEM Contest

      STEM Contest

    Discussions