[Internet de las cosas] El programa antiguo te enseña un truco, 10 líneas de código hacen que el módulo ultrasónico sea un interruptor activado por voz en segundos

 

Tabla de contenido

1. Principio de rango del módulo ultrasónico

2. Cómo conectar el módulo ultrasónico a la placa de desarrollo Arduino

3. Comience con rango

4. Cómo transformar el ultrasonido en un interruptor activado por voz

5. Agregue un interruptor ultrasónico

 

Hay una explicación completa en video al final de este artículo.

Los estudiantes que jueguen con Arduino y Raspberry Pi deben estar familiarizados con el módulo ultrasónico. Este no es costoso (generalmente entre 5 y 10 yuanes) y tiene funciones limitadas. Al buscar en Internet, el 99% de los escenarios de aplicación son para medición de distancia. El resto de la escena son unos pequeños juegos inútiles, por ejemplo, usar dos módulos ultrasónicos para enfrentarse, usar ultrasonidos para jugar flotando, de hecho, no es muy útil. Este artículo le brinda una nueva idea. Con solo unas pocas líneas de código, puede convertir el módulo ultrasónico en un interruptor activado por voz para controlar los LED y cualquier dispositivo electrónico complejo. También utilicé esta función para hacer un juego "SOS" basado en Hongmeng. Escribiré un artículo para presentarlo más tarde, pero volveré al tema de este artículo por ahora.

Experimentemos primero el interruptor activado por sonido basado en el módulo ultrasónico:

[Arduino Lab] ¿Los ultrasonidos solo pueden medir la distancia? ¿Has oído hablar de cómo controlar los LED en el aire? ¡Sea testigo del momento del milagro!

 

1. Principio de rango del módulo ultrasónico

Es posible que algunos lectores no estén familiarizados con el módulo ultrasónico. Para no confundir a todos, echemos un vistazo al módulo ultrasónico. Se ve muy lindo. Hay dos cosas como ojos y 4 como agujas. Pin.

Por supuesto, el ultrasonido emitido por este módulo es muy débil, y definitivamente no será tan fuerte como el de Fu Hulk, de lo contrario, ¡no moriré aquí por escribir un artículo!

El principio del rango de módulo ultrasónico es realmente muy simple, es similar a medir la distancia de la tierra a la luna, excepto que el primero usa ondas ultrasónicas y el segundo usa láseres. El módulo ultrasónico utiliza la característica de que la velocidad de la onda de sonido en el aire es de 340 metros / segundo (este es un valor fijo, al igual que la velocidad de la luz es de aproximadamente 300.000 kilómetros / segundo), y luego mide el tiempo desde la onda ultrasónica hasta recibiendo Devuelve el tiempo de la onda ultrasónica (el tiempo de ida y vuelta), y luego divide por 2, es el tiempo requerido para la onda ultrasónica desde el punto A al punto B. Si este valor es 1000 milisegundos, entonces la distancia desde A a B es 340 metros, si es 100 milisegundos es 34 metros, y así sucesivamente. Por supuesto, el ultrasonido es diferente al láser, la distancia no puede ser demasiado grande, por lo general, la medición es de unas pocas decenas de metros como máximo.
 

Hay dos cosas como ojos en el módulo ultrasónico, uno es responsable de transmitir ondas ultrasónicas y el otro es responsable de recibir ondas ultrasónicas devueltas. Una vez que la onda ultrasónica comienza a transmitirse, el temporizador se inicia automáticamente y el temporizador se detendrá cuando se reciba la onda ultrasónica devuelta, y luego el tiempo en el temporizador se lee a través del pin correspondiente. Después del cálculo, la unidad específica (medidor , centímetro, milímetro) se puede obtener. La siguiente figura es un diagrama de tiempos de transmisión y recepción ultrasónica. La parte inferior de la parte que sobresale del diagrama de tiempo de la señal de reverberación de salida se establece en un nivel alto en el lado izquierdo. En este momento, espera a que regrese la onda ultrasónica. Cuando se recibe la onda ultrasónica de retorno, el lado derecho pasa a nivel bajo, volviendo al tiempo del temporizador. De hecho, el tiempo que necesitamos es el tiempo que la parte levantada está en un nivel alto (es decir, el tiempo que un determinado pin del módulo ultrasónico está en un nivel alto).

 

2. Cómo conectar el módulo ultrasónico a la placa de desarrollo Arduino

Una imagen vale más que mil palabras, ¡así que miremos la imagen y hablemos!

Este es el diagrama de conexión del módulo ultrasónico y la placa de desarrollo Arduino, y también hay un LED conectado a la placa de desarrollo Arduino. De hecho, el LED aquí no tiene nada que ver con el módulo ultrasónico, pero el LED está controlado por un interruptor activado por voz modificado por el módulo ultrasónico.

El módulo ultrasónico tiene los siguientes 4 pines:

(1) VCC: conéctese al pin 5v de la placa de desarrollo Arduino

(2) Trig: El pin para transmitir ultrasonido necesita estar conectado al pin digital. En este ejemplo, está conectado al pin No. 10. Cuando el pin No. 10 está en un nivel alto, se transmite el ultrasonido.

(3) Eco: La clave para recibir ultrasonido debe estar conectada al pin digital. En este ejemplo, se conecta al pin 9. Cuando el pin 9 está en un nivel alto, esperará a que vuelva el ultrasonido. Si se recibe el ultrasonido, el noveno tubo El pie bajará automáticamente y luego volverá a la hora en el temporizador (el tiempo de ida y vuelta del ultrasonido)

(4) GND: conéctelo al pin GND (tierra) de la placa de desarrollo Arduino

El LED es muy simple, el polo positivo está conectado al pin digital No. 7 y el polo negativo está conectado a tierra (GND)

En este ejemplo, 5V están conectados a la placa de pruebas, por lo que VCC se puede conectar directamente a la placa de pruebas.

Si no comprende el uso de las placas de prueba, puede ver este video:

[Arduino Lab] No es necesario escribir una línea de código, use botones para controlar el LED, primera opción para principiantes en Arduino

 

3. Comience con rango

¡Consigamos el código primero!

void loop() {
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(5);
  // 发射超声波
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(5);
  // 这个distance就是距离,超声波返回时,pulseIn函数会返回计时器的时间,单位:微秒
  int distance = pulseIn(echoPin, HIGH) * 340 / 2 / 1000
  delay(40);
}

Este código de rango tiene un total de 6. De hecho, primero establece el pin de disparo en un nivel bajo y luego establece el nivel alto para permitir que el módulo ultrasónico emita ondas ultrasónicas. Luego, establezca el pin de eco en un nivel alto a través de la función pulseIn y espere el retorno del ultrasonido. Si regresa, la función pulseIn devolverá el tiempo (unidad: microsegundo). La unidad de la distancia calculada en este ejemplo es milímetros.

Mira, ¿no es sencillo?

4. Cómo transformar el ultrasonido en un interruptor activado por voz

El rango es fácil de entender, entonces, ¿qué pasa si el módulo ultrasónico se convierte en un interruptor activado por voz? De hecho, no es complicado, aquí se utiliza una técnica y un algoritmo de máquina de estados, y se utiliza un total de más de una docena de líneas de código.

La distancia de medición debe ser lejana y cercana. Por ejemplo, debe haber una diferencia entre 300 mm y 600 mm, que también es visible y perceptible a simple vista. Y el interruptor activado por voz aquí no es para que grites: Abre la puerta con Sesame. No puede enviar ni escuchar una ecografía. El control de voz aquí se refiere a dejar que el ultrasonido detecte su presencia.

Como se puede ver en el video anterior, deslice la mano frente al módulo ultrasónico Si la mano está frente al módulo ultrasónico, la distancia medida debe ser menor que la distancia entre la mano y no frente al módulo ultrasónico. De hecho, esta es una lógica binaria. Usando el cambio de la distancia medida, se puede juzgar si la mano está frente al módulo ultrasónico. Por lo tanto, es necesario establecer un umbral aquí. Si la distancia medida es menor que este umbral, significa que la mano está frente al módulo ultrasónico; si es mayor que este umbral, significa que la mano no está en frente del módulo ultrasónico.

Sin embargo, hay otro problema aquí. Dado que la función de bucle se repite continuamente, si su mano siempre está frente al módulo ultrasónico, la acción "on" siempre se activará. Por lo tanto, debe usar una máquina de estado para proteger esta situación Es decir, sólo cuando el estado anterior esté "desactivado", detectará si el estado actual está "activado". El código de implementación completo es el siguiente:

// 单超声波实现
#include <SoftwareSerial.h>
#define LED  7
int trigPin = 10;     // 发射管脚
int echoPin = 9;     // 接收管脚
int distance = 0;
int state = 0;        // 用于控制状态机的状态
bool led_state = false;  // false:灭  true:亮
void setup() {
  pinMode(LED, OUTPUT);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  digitalWrite(LED, LOW);
  Serial.begin(9600);
  while (!Serial) {
  }
  Serial.println("hello world!");
}

void loop() {
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(5);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(5);
  distance = pulseIn(echoPin, HIGH) * 340 / 2 / 1000;
  // 状态:关
  if (state == 0) {
    // 判断距离是否小于300毫米  
    if (distance < 300) { 
      state = 1;    // 如果小于300毫米,说明手正好在超声波模块起那么,将状态设置为开
    }
  } else if (state == 1) {   // 状态:开
    // 如果距离大于等于300毫米,说明手不在超声波模块前面,状态设置为关
    if (distance >= 300  ) {
      state = 0; 
       //  当手不在超声波模块前面时,根据LED当前的状态,决定是关闭LEd,还是点亮LED
      if(led_state) {              
        led_state = false;
        digitalWrite(LED, LOW);              
      } else {
        led_state = true;
        digitalWrite(LED, HIGH);
      }
    }
  }
  delay(40);

}

5. Agregue un interruptor ultrasónico

Si no está satisfecho, puede agregar otro interruptor ultrasónico, el método de conexión es el mismo que el anterior, el código para controlar los dos interruptores ultrasónicos es el siguiente:

#include <SoftwareSerial.h>

#define LED1  8
#define LED2  7
int trigPin1 = 10;     // 发射管脚
int echoPin1 = 9;      // 接收管脚
int trigPin2 = 13;     // 发射管脚
int echoPin2 = 12;      // 接收管脚

int distance = 0;
int state1 = 0;
int state2 = 0;
bool led_state1 = false;  // false:灭  true:亮
bool led_state2 = false;  // false:灭  true:亮
void setup() {
 
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  
  pinMode(trigPin1, OUTPUT);
  pinMode(echoPin1, INPUT);
  pinMode(trigPin2, OUTPUT);
  pinMode(echoPin2, INPUT);  
  digitalWrite(LED1, LOW);
  digitalWrite(LED2, LOW);
  Serial.begin(9600);
  while (!Serial) {
  }
  Serial.println("hello world!");
}

void loop() {
  // 处理第1个超声波开关  
  digitalWrite(trigPin1, LOW); // 高电平发射超声波, 但要先设置为低电平。 就像打开灯,需要先关闭灯,才能打开
  delayMicroseconds(5);
  digitalWrite(trigPin1, HIGH);
  delayMicroseconds(5);
 
  distance = pulseIn(echoPin1, HIGH) * 340 / 2 / 1000;

  if (state1 == 0) {
    if (distance < 300) {
      state1 = 1;
    }
  } else if (state1 == 1) {
    if (distance > 300  ) {
      state1 = 0; 
      if(led_state1) {
        led_state1 = false;
        digitalWrite(LED1, LOW);
        
      } else {
        led_state1 = true;
        digitalWrite(LED1, HIGH);
      }
        
    }
  }
  // 处理第2个超声波开关
  digitalWrite(trigPin2, LOW); // 高电平发射超声波, 但要先设置为低电平。 就像打开灯,需要先关闭灯,才能打开
  delayMicroseconds(5);
  digitalWrite(trigPin2, HIGH);
  delayMicroseconds(5);
 
  distance = pulseIn(echoPin2, HIGH) * 340 / 2 / 1000;

  if (state2 == 0) {
    if (distance < 300) {
      state2 = 1;
    }
  } else if (state2 == 1) {
    if (distance > 300  ) {
      state2 = 0; 
      if(led_state2) {
        led_state2 = false;
        digitalWrite(LED2, LOW);
        
      } else {
        led_state2 = true;
        digitalWrite(LED2, HIGH);
      }
        
    }
  }
  delay(40);

}

Este código utiliza un pin digital para controlar varios LED y dos pines digitales para controlar dos grupos de LED. Por lo tanto, primero debe conectar la placa de pruebas a los pines digitales y luego conectar estos LED a la placa de pruebas, como se muestra en la siguiente figura. Ok, ahora puedes jugar todo lo que quieras.

 

La siguiente es una explicación en video de este artículo:

[Hardcore] ¡Los programadores antiguos te enseñan un truco para convertir el módulo ultrasónico en un interruptor activado por voz en segundos!

 

Supongo que te gusta

Origin blog.csdn.net/nokiaguy/article/details/115341621
Recomendado
Clasificación