Skip to content

JhonatanBarboza/Arduino

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 

Repository files navigation

SSC0180-Eletrônica

Projeto: Sonar

Este projeto consiste em um protótipo de sonar projetado para detectar e rastrear a aproximação de objetos. Os dados coletados pelo sonar serão processados e exibidos em tempo real na tela de um computador, permitindo uma visualização dos objetos.

Componentes Eletrônicos

Quantidade Componentes Especificações Valor
1 Arduino 5V R$ 54,00
1 Protoboard 830 furos R$ 10,00
4 Jumpers M/F 10 uni R$ 7,00
7 Jumpers M/M 10 uni R$ 7,00
1 Ultrassom HC-SR04 R$ 16,00
1 Servo Motor 9g 1kg/cm R$ 30,40

Valor Total: R$ 124,40

Fotos do Projeto

foto1 foto2

Descrição dos Componentes

Arduino:

Arduino é uma placa de prototipagem eletrônica que permite, de maneira fácil, a integração entre software e hardware. Além disso, devido a sua versatilidade, o Arduino é usado em vários tipos de projetos, desde brinquedos até automações para a melhora da vida cotidiana.

Ultrassom:

O sensor de ultrassom HC-SR04 é utilizado para medir distâncias. Ele funciona emitindo pulsos ultrassônicos e calculando o tempo que leva para os ecos retornarem após refletirem em um objeto. No contexto de um projeto de sonar, o HC-SR04 foi montado em um micro servo motor, permitindo que ele gire e faça varreduras do ambiente. Conectado ao Arduino, o sensor HC-SR04 fornece leituras de distância em tempo real, que são processadas e exibidas na tela do computador.

Servo Motor:

Um micro servo motor é um componente ideal para projetos que requerem controle preciso de movimento. Este tipo de servo é compacto e eficiente, oferece torque suficiente para movimentar componentes leves. No contexto de um projeto do radar, o micro servo motor é utilizado para rotacionar sensor do sonar, permitindo a varredura do ambiente.

Circuito tinkercad

WhatsApp Image 2024-06-24 at 12 50 58

Descrição do funcionamento

Este projeto consiste em um sistema de sonar baseado em Arduino, utilizando um micro servo motor de 9g e um sensor de ultrassom HC-SR04 para detectar e rastrear a aproximação de objetos. O funcionamento do projeto é descrito em etapas a seguir:

  1. Montagem do Hardware:

    • O sensor de ultrassom HC-SR04 é montado sobre o micro servo motor.
    • O servo motor é controlado pelo Arduino, permitindo que o sensor gire em diferentes ângulos para realizar varreduras do ambiente.
  2. Configuração do Arduino:

    • O Arduino é programado para controlar o servo motor, ajustando sua posição em intervalos regulares.
    • O Arduino também envia sinais de controle ao sensor de ultrassom para emitir pulsos ultrassônicos e medir o tempo de retorno do eco.
  3. Aquisição de Dados:

    • O sensor HC-SR04 emite pulsos ultrassônicos e mede o tempo que os ecos levam para retornar após refletirem em um objeto.
    • O Arduino calcula a distância dos objetos com base no tempo de retorno dos ecos.
  4. Processamento de Dados:

    • O Arduino processa os dados de distância e ângulo do servo motor para determinar a posição dos objetos no ambiente.
    • Os dados coletados são enviados para um computador.
  5. Visualização dos Resultados:

    • Os resultados da varredura do sonar são exibidos em tempo real na tela do computador.

Vídeo do projeto funcionando

video.mp4

Passo a Passo para Configurar o Projeto de Radar com Arduino e Processing

Parte 1: Configuração do Arduino

  1. Baixar o Software Arduino

    • Acesse aqui o site oficial do Arduino e faça o download do software correspondente ao seu sistema operacional.
  2. Inserir o Código no Arduino

    • Abra o Arduino IDE.
    • Copie o código do projeto e cole na área de trabalho do Arduino IDE.
  3. Configurar a Placa Arduino

    • No menu superior, vá em Ferramentas > Placa > Arduino AVR Boards.
    • Selecione o modelo da sua placa Arduino (ex: Arduino Uno, Arduino Mega, etc.).
  4. Selecionar a Porta de Comunicação

    • Ainda em Ferramentas, vá em Porta e selecione a porta à qual seu Arduino está conectado (ex: COM3, COM4, etc.).
  5. Compilar e Enviar o Código

    • Clique no ícone de verificação (✓) para compilar o código.
    • Em seguida, clique no ícone de seta (→) para enviar o código compilado para a placa Arduino.

Parte 2: Configuração do Processing

  1. Baixar o Software Processing

    • Acesse aqui e baixe o software Processing. Instale-o em seu computador.
  2. Fechar o Arduino IDE

    • Após enviar o código para a placa Arduino, feche o Arduino IDE. Isso é necessário porque o Processing usará a mesma porta de comunicação, evitando conflitos.
  3. Inserir o Código no Processing

    • Abra o Processing.
    • Copie o código do projeto e cole na área de trabalho do Processing.
  4. Configurar a Porta no Código do Processing

    • No código do Processing, encontre a linha myPort = new Serial(this, "COM4", 9600);.
    • Substitua "COM4" pela porta à qual o Arduino está conectado (a mesma configurada no Arduino IDE).
  5. Configurar a Fonte no Processing

    • Vá em Ferramentas > Criar Fonte e selecione a fonte desejada.
    • Copie o nome do arquivo da fonte exibido no campo filename.
    • No código do Processing, encontre a linha orcFont = loadFont("AgencyFB-Reg-30.vlw"); e substitua "AgencyFB-Reg-30.vlw" pelo nome da fonte copiada.
  6. Ajustar o Tamanho da Janela

    • No código do Processing, encontre a linha size(1366, 768);.
    • Altere os valores para o tamanho da tela do monitor onde o radar será exibido (ex: size(1920, 1080); para um monitor Full HD).
  7. Compilar e Executar o Código

    • Clique no ícone de play (►) para compilar e executar o código.
    • Uma nova janela abrirá com a interface do radar, já começando a escanear.

Dicas Importantes:

  • Certifique-se de que o Arduino esteja conectado corretamente ao computador.
  • Verifique se os drivers da placa Arduino estão instalados.
  • Feche sempre o Arduino IDE antes de iniciar o Processing para evitar conflitos de porta.

Seguindo esses passos, o projeto de radar estará configurado e funcionando corretamente.

Código arduino

      // Inclui a biblioteca Servo Motor
      #include <Servo.h>
      
      // Define os pinos Trig e Echo do sensor ultrassônico
      const int trigPin = 10;
      const int echoPin = 11;
      // Variáveis para a duração e a distância
      long duration;
      int distance;
      
      Servo myServo; // Cria um objeto servo para controlar o servo motor
      
      void setup() {
        pinMode(trigPin, OUTPUT); 
        pinMode(echoPin, INPUT);
        Serial.begin(9600);
        myServo.attach(12); // Define em qual pino o Servo Motor está conectado
      }
      void loop() {
        // gira o Servo Motor de 15 a 165 graus
        for(int i=30;i<=165;i++){  
        myServo.write(i);
        delay(30);
        distance = calculateDistance();// Chama uma função para calcular a distância medida pelo sensor ultrassônico para cada grau
        
        Serial.print(i); // Envia o grau atual para a porta serial
        Serial.print(","); // Envia o caractere de adição ao lado do valor anterior necessário posteriormente no IDE de processamento para indexação
        Serial.print(distance); // Envia o valor da distância para a porta serial
        Serial.print("."); // Envia o caractere de adição ao lado do valor anterior necessário posteriormente no IDE de processamento para indexação
        }
        // Repete as linhas anteriores de 165 a 15 graus
        for(int i=165;i>30;i--){  
        myServo.write(i);
        delay(30);
        distance = calculateDistance();
        Serial.print(i);
        Serial.print(",");
        Serial.print(distance);
        Serial.print(".");
        }
      }
      // Função para calcular a distância medida pelo sensor ultrassônico
      int calculateDistance(){ 
        
        digitalWrite(trigPin, LOW); 
        delayMicroseconds(2);
        // Define o trigPin no estado HIGH por 10 micro segundos
        digitalWrite(trigPin, HIGH); 
        delayMicroseconds(10);
        digitalWrite(trigPin, LOW);
        duration = pulseIn(echoPin, HIGH); // Lê o echoPin, retorna o tempo de viagem da onda sonora em microssegundos
        distance= duration*0.034/2;
        return distance;
      }

Código Processing

    import processing.serial.*; // importa biblioteca para comunicação serial
    import java.awt.event.KeyEvent; // biblioteca de importações para ler os dados da porta serial
    import java.io.IOException;
    
    Serial myPort; 
    // variáveis
    String angle="";
    String distance="";
    String data="";
    String noObject;
    float pixsDistance;
    int iAngle, iDistance;
    int index1=0;
    int index2=0;
    PFont orcFont;
    
    void setup() {
      
     size (1366, 768); // ***MUDE ISTO PARA SUA RESOLUÇÃO DE TELA***
     smooth();
     myPort = new Serial(this,"COM3", 9600); // inicia a comunicação serial
     myPort.bufferUntil('.'); // lê os dados da porta serial até o caractere '.' Então, na verdade, lê isto: ângulo, distância.
     orcFont = loadFont("AgencyFB-Reg-30.vlw");
    }
    
    void draw() {
      
      fill(98,245,31);
      textFont(orcFont);
      // simulating motion blur and slow fade of the moving line
      noStroke();
      fill(0,4); 
      rect(0, 0, width, height-height*0.065); 
      
      fill(98,245,31); // cor verde
      // chama as funções para desenhar o radar
      drawRadar(); 
      drawLine();
      drawObject();
      drawText();
    }
    
    void serialEvent (Serial myPort) { // começa a ler dados da porta serial
      // lê os dados da porta serial até o caractere '.' e coloca na variável String "data".
      data = myPort.readStringUntil('.');
      data = data.substring(0,data.length()-1);
      
      index1 = data.indexOf(","); // encontre o caractere ',' e coloque-o na variável "index1"
      angle= data.substring(0, index1); // leia os dados da posição "0" para a posição da variável index1 ou seja o valor do ângulo que a placa Arduino enviou para a porta serial
      distance= data.substring(index1+1, data.length()); // ler os dados da posição "index1" para o final dos dados pr thats o valor da distância
      
      // converts the String variables into Integer
      iAngle = int(angle);
      iDistance = int(distance);
    }
    
    void drawRadar() {
      pushMatrix();
      translate(width/2,height-height*0.074); // move as coordenadas iniciais para o novo local
      noFill();
      strokeWeight(2);
      stroke(98,245,31);
      // desenha as linhas do arco
      arc(0,0,(width-width*0.0625),(width-width*0.0625),PI,TWO_PI);
      arc(0,0,(width-width*0.27),(width-width*0.27),PI,TWO_PI);
      arc(0,0,(width-width*0.479),(width-width*0.479),PI,TWO_PI);
      arc(0,0,(width-width*0.687),(width-width*0.687),PI,TWO_PI);
      // desenha as linhas angulares
      line(-width/2,0,width/2,0);
      line(0,0,(-width/2)*cos(radians(30)),(-width/2)*sin(radians(30)));
      line(0,0,(-width/2)*cos(radians(60)),(-width/2)*sin(radians(60)));
      line(0,0,(-width/2)*cos(radians(90)),(-width/2)*sin(radians(90)));
      line(0,0,(-width/2)*cos(radians(120)),(-width/2)*sin(radians(120)));
      line(0,0,(-width/2)*cos(radians(150)),(-width/2)*sin(radians(150)));
      line((-width/2)*cos(radians(30)),0,width/2,0);
      popMatrix();
    }
    
    void drawObject() {
      pushMatrix();
      translate(width/2,height-height*0.074); // move as coordenadas iniciais para o novo local
      strokeWeight(9);
      stroke(255,10,10); // cor vermelha
      pixsDistance = iDistance*((height-height*0.1666)*0.025); // cobre a distância do sensor de cm para pixels
      // limitando o alcance a 40 cms
      if(iDistance<40){
        // draws the object according to the angle and the distance
      line(pixsDistance*cos(radians(iAngle)),-pixsDistance*sin(radians(iAngle)),(width-width*0.505)*cos(radians(iAngle)),-(width-width*0.505)*sin(radians(iAngle)));
      }
      popMatrix();
    }
    
    void drawLine() {
      pushMatrix();
      strokeWeight(9);
      stroke(30,250,60);
      translate(width/2,height-height*0.074); // move as coordenadas iniciais para o novo local
      line(0,0,(height-height*0.12)*cos(radians(iAngle)),-(height-height*0.12)*sin(radians(iAngle))); // desenha a linha de acordo com o ângulo
      popMatrix();
    }
    
    void drawText() { // desenha os textos na tela
      
      pushMatrix();
      if(iDistance>40) {
      noObject = "Fora do Radar";
      }
      else {
      noObject = "Objeto Detectado";
      }
      fill(0,0,0);
      noStroke();
      rect(0, height-height*0.0648, width, height);
      fill(98,245,31);
      textSize(25);
      
      text("10cm",width-width*0.3854,height-height*0.0833);
      text("20cm",width-width*0.281,height-height*0.0833);
      text("30cm",width-width*0.177,height-height*0.0833);
      text("40cm",width-width*0.0729,height-height*0.0833);
      textSize(40);
      text("Objeto: " + noObject, width-width*0.875, height-height*0.0277);
      text("Anglo: " + iAngle +" °", width-width*0.48, height-height*0.0277);
      text("Distancia: ", width-width*0.26, height-height*0.0277);
      if(iDistance<40) {
      text("        " + iDistance +" cm", width-width*0.225, height-height*0.0277);
      }
      textSize(25);
      fill(98,245,60);
      translate((width-width*0.4994)+width/2*cos(radians(30)),(height-height*0.0907)-width/2*sin(radians(30)));
      rotate(-radians(-60));
      text("30°",0,0);
      resetMatrix();
      translate((width-width*0.503)+width/2*cos(radians(60)),(height-height*0.0888)-width/2*sin(radians(60)));
      rotate(-radians(-30));
      text("60°",0,0);
      resetMatrix();
      translate((width-width*0.507)+width/2*cos(radians(90)),(height-height*0.0833)-width/2*sin(radians(90)));
      rotate(radians(0));
      text("90°",0,0);
      resetMatrix();
      translate(width-width*0.513+width/2*cos(radians(120)),(height-height*0.07129)-width/2*sin(radians(120)));
      rotate(radians(-30));
      text("120°",0,0);
      resetMatrix();
      translate((width-width*0.5104)+width/2*cos(radians(150)),(height-height*0.0574)-width/2*sin(radians(150)));
      rotate(radians(-60));
      text("150°",0,0);
      popMatrix(); 
    }

Responsáveis

  • Jhonatan Barboza da Silva
  • João Gabriel Pieroli da Silva
  • Pedro Henrique de Sousa Prestes
  • Kevin Ryoji Nakashima

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •