Projeto de Secador ultrassônico de mãos com Arduino

Tempo de leitura: 5 minutes

Objetivos do projeto: responda às seguintes perguntas:

  • O que é um sensor ultrassônico?
  • Como funciona o sensor ultrassônico HC-S04?
  • Como funciona o secador ultrassônico de mãos?
  • Como medir a distância com o sensor ultrassônico?
  • Como controlar o alcance ou a distância de ativação do secador ultrassônico de mãos?
  • Como usar o sensor HC-S04 com Arduino?
  • E outras dicas práticas

Agendamento de tarefas do programa

  1. Envia um pulso de 10 µs para o sensor ultrassônico através da saída TRIG
  2. Recuperando a distância do sinal de feedback ECHO
  3. Extraia a distância de acordo com a medição do sensor em mm
  4. Exibição de distância na interface serial
  5. Leitura da entrada analógica A0
  6. Cálculo do limite em função da distância
  7. Controle do motor por um sinal PWM de acordo com o estado do limite e a distância medida
  8. Aguardando um atraso de um segundo no display para que a distância possa ser visualizada corretamente com o olho na interface serial. A ausência do atraso resulta em uma exibição rápida e ilegível. O valor do atraso também gera o tempo de atualização do limiar, ou seja, se o atraso for igual a 10s e durante os 10s o potenciômetro for variado, ele só será levado em consideração na próxima iteração do programa. Você deve, portanto, escolher um tempo razoável e ideal para a exibição e para atualizar o limite de disparo (na prática, é da ordem de 500ms ou 1s).

Função do potenciômetro: O potenciômetro é usado para ajustar o limite para iniciar o secador de mãos. Por outro lado, a distância mínima de aproximação para a qual o motor do secador de mãos dará partida. A figura abaixo ilustra a função de transferência do sistema.

clear all; close all; clc;

% Cálculo da função de transferência
N=1e3;
Dist_min=0;
Dist_max=500;
Dist_mm=linspace(Dist_min,Dist_max,N);
Seuil_max=256;
Seuil_min=10;
Dist_seuil=zeros(1,N);
Etat_seche=zeros(1,N);

for i=1:N
    if (Dist_mm(i) < Seuil_max) && (Dist_mm(i) > Seuil_min)
        Dist_seuil(i)=Dist_mm(i);
    elseif (Dist_mm(i) >= Seuil_max)
        Dist_seuil(i)=Seuil_max;
    elseif (Dist_mm(i) <= Seuil_min)
        Dist_seuil(i)=0;
    else
        Dist_seuil(i)=0;
    end;
end;

% Exibição
plot(Dist_mm, Dist_seuil); grid on;
xlabel('Distância (mm) antes do limite');
ylabel('Distância (mm) após o limite');

 

Existem duas zonas de operação

  • Distância> D_max: Quando a distância medida pelo sensor excede um valor máximo (distância entre o sensor e as mãos), o limite será limitado a 256 e, portanto, o secador de mãos será interrompido. Por outro lado, as mãos ficam mais distantes do equipamento. A distância mínima é limitada a 10 mm.
  • Distância <= D_max: Durante esta fase, o valor do limite depende do potenciômetro. Na verdade, o limite de disparo é proporcional ao valor adquirido pela entrada analógica A0. Exemplo: para uma tensão na entrada A0 de 5V, a distância de aproximação é máxima e igual a D_max. Para um limite de 0 V, a distância de ativação deve ser próxima a 0 (as mãos devem estar firmes com o sensor 🙂 ). Em resumo, graças ao valor limite, podemos variar a distância de aproximação entre D_max e 0 ou ajustar a sensibilidade do sensor.
  • + Distância <10 mm: Zona cega do sensor

 

Para que serve a interface serial?

Frequentemente encontramos uma interface serial em um programa Arduino, mas qual é o uso prático? Abaixo está uma lista útil de usos para a interface serial:

A. Display: Este é o nosso caso, a fim de observar o valor da distância durante o curso do programa, em particular quando variamos o potenciômetro e vemos como a distância de aproximação reage

B. Depurando o programa: Um programador deve verificar o correto funcionamento de seu programa, é fundamental verificar se as variáveis ​​recebem os valores corretos ou o correto funcionamento do programa.

C. Validação de estado de um sensor/variável: Pode ser útil verificar se um sensor (tensão, corrente, temperatura, etc.) está funcionando corretamente, observando seu estado por meio de uma interface serial para uma entrada determinística (resposta do sensor também conhecido). Se, por exemplo, durante a programação, esquecemos um fator 2 (ou o ponto) em uma função de cálculo, não podemos percebê-lo durante a compilação do programa, mas será legível olhando diretamente para o estado da variável .

D. Transmissão/recepção de dados: Esta é a função básica de um link serial 🙂

 

Diagrama de ligação com Arduino

 

Programa Arduino

// Para fazer: implementação do potenciômetro

// saída PWM
int To_Moteur_PWM = 9;

// Potentiometer input
const int Potent_pin = A0;
int val_Pot = 0;
float val_reel = 0.0;
float Seuil_HC=0.0;
int Etat_seche = 0;

// Variáveis ​​para HC-SR04
const int Echo_in_pin = 2;
const int Trig_out_pin = 3;
float Dist_mm=0.0;
long HC_val=0;

// Velocidade do som (mm/us)
const double Speed_sound = 340.0e-3;


void setup()
{
        // Seria port
        Serial.begin(9600);

        // Inicialização HC-SR04
        pinMode(Trig_out_pin, OUTPUT);
        pinMode(Echo_in_pin, INPUT);
        digitalWrite(Trig_out_pin, LOW);
}

void loop() {

        // Disparo da medição com o envio de um pulso de 10 µs
        digitalWrite(Trig_out_pin, HIGH);
        delayMicroseconds(10);
        digitalWrite(Trig_out_pin, LOW);

        // Leia o tempo de ida e volta da onda
        HC_val = pulseIn(Echo_in_pin, HIGH, 30000);

        // Calcule a distância d(mm), V=d/t==>v*t
        // O coeficiente 2 para a jornada de ida
        Dist_mm = (HC_val/2.0) * Speed_sound;

        // Geração PWM e controle de sensibilidade do sensor
        Seuil_HC=GetSeuil(Dist_mm);
        if ((Dist_mm < Seuil_HC) && (Dist_mm > 10.0))
        {
                analogWrite(To_Moteur_PWM, 255);
                Etat_seche=1;
        } else  {
                analogWrite(To_Moteur_PWM, 0);
                Etat_seche=0;
        }

        // Exibição de distância d(mm/m)
        Serial.print("\n Distância(mm):");
        Serial.print(Dist_mm);

        //Limite
        Serial.print("\n Limite(mm):");
        Serial.print(Seuil_HC);

        //Estado seco
        Serial.print("\n Estado seco:");
        Serial.print(Etat_seche);
        Serial.print("\n");

        // Delay
        delay(1000);
}
float GetSeuil(float dist_ultrason)
{
        float seuil=0;
        int val_Pot=0;

        if (dist_ultrason > 256.0)  // 256 mm
        {
                seuil=256.0;
        } else {
                // Leitura do Potenciometro
                val_Pot = analogRead(Potent_pin);
                seuil=float(val_Pot)/4.0;
        }
        return seuil;
}

 

Fotos do projeto

 

Conclusão

Neste artigo, mostrei como usar um Projeto demonstrando o uso de um Sensor HC-SR04 para saber quando precisa ligar o ventilador (para secar sua mão) usando o Arduino. Espero que você tenha achado útil e informativo. Se sim, compartilhe com um amigo que também gosta de eletrônica e de fazer coisas!

Eu adoraria saber quais projetos você planeja construir (ou já construiu) com esse Projeto. Se você tiver alguma dúvida, sugestão ou se achar que falta algo neste tutorial, por favor, deixe um comentário abaixo.

Visits: 7 Visits: 1199615