Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Enviar datos con sonido

Componentes y suministros

Arduino Nano 33 BLE Sense
× 1

Acerca de este proyecto

Aquí en Chirp HQ, estábamos muy emocionados de escuchar el anuncio de que Arduino lanzaría una nueva placa con una gran cantidad de características nuevas. Estas características incluyen una amplia gama de sensores, un potente procesador y, lo más importante, ¡un micrófono integrado! La buena gente de Arduino nos envió un prelanzamiento de la nueva placa Nano 33 Sense, que es totalmente compatible con Chirp, lo que permite a la comunidad de creadores enviar y recibir datos utilizando sonido.

Chirp agrega un mecanismo de transporte completamente único a las placas Arduino, las capacidades adicionales de datos sobre sonido significan que los piratas informáticos tienen más opciones de conectividad al alcance de la mano. Algunas de las ventajas de datos sobre sonido incluyen:

  • Independiente del dispositivo:los datos se pueden enviar desde aplicaciones móviles, páginas web o incluso con solo un archivo de audio
  • De uno a muchos:cualquier dispositivo dentro del rango auditivo puede recibir datos en una simple transacción
  • Sin fricciones:no necesita ningún emparejamiento, contraseñas o configuración inicial

En este tutorial demostraremos cómo usar el SDK de Chirp para enviar un valor RGB para cambiar el color del LED integrado.

Chirp incluso funciona en lugares ruidosos, gracias a los años de investigación que hemos realizado para hacer que el decodificador sea robusto al sonido de fondo. Lea más sobre los beneficios de usar datos sobre sonido aquí.

Si todavía es escéptico, pruébelo usted mismo.

Comenzar con Chirp es más fácil que nunca ...

Empezando

Si aún no lo ha hecho, deberá registrarse en Chirp en developers.chirp.io. Una vez que se haya registrado, puede obtener la clave de la aplicación, el secreto y la configuración de audio para su aplicación.

Recibiendo datos

Dado que el Nano 33 Sense viene empaquetado con un micrófono integrado, todo lo que necesita para recibir datos usando Chirp es el SDK de Chirp que está disponible directamente desde el Administrador de Bibliotecas.

Simplemente abra el Administrador de bibliotecas y busque Chirp SDK. Instale v3.3.0 o posterior y estará listo para comenzar a codificar.

Herramientas> Administrar bibliotecas

Puede abrir nuestro código de ejemplo para empezar.

Archivo> Ejemplos> ChirpSDK> Nano33SenseReceive

Deberá copiar y pegar sus credenciales para el 16khz-mono-embedded protocolo de developers.chirp.io en el archivo credentials.h.

El código de ejemplo simplemente imprimirá cualquier dato recibido en el Monitor serial. Sin embargo, podemos cambiar fácilmente el comportamiento para encender los LED integrados editando el onReceivedCallback función.

En su función de configuración, primero debemos configurar los pines GPIO conectados a los LED como salidas

  #define R_LED_PIN 22 # define G_LED_PIN 23 # define B_LED_PIN 24void setup () {pinMode (R_LED_PIN, OUTPUT); pinMode (G_LED_PIN, SALIDA); pinMode (B_LED_PIN, SALIDA);}  

Para controlar los LED, necesitaremos extraer los valores RGB de la carga útil de datos.

  void onReceivedCallback (void * chirp, uint8_t * payload, size_t length, {if (length> 0) {// Los valores altos significan un brillo más bajo, así que // restamos de UINT8_MAX analogWrite (R_LED_PIN, UINT8_MAX - payload [0]); analogWrite (B_LED_PIN, UINT8_MAX - payload [2]);} else {Serial.println ("Falló la decodificación");}}  

Ahora puede probar su código reproduciendo los archivos de audio a continuación, cada uno debe cambiar el color del LED de rojo a verde a azul.

¿Qué sigue?

La primera iteración del SDK de Chirp para Arduino opera solo en el 16khz-mono-embedded audible protocolo. Durante los próximos meses, lanzaremos una versión inaudible que funcionará en frecuencias casi ultrasónicas. Con esto, podrá enviar datos a frecuencias que los humanos no pueden escuchar, por ejemplo, podría incrustar los datos del chirrido en el audio existente, como canciones o videos, para activar acciones.

También seguiremos con más tutoriales sobre cómo puede utilizar datos sobre sonido con Arduino. Háganos saber dónde ha utilizado Chirp en sus propios proyectos de Arduino etiquetándonos en twitter @chirp o póngase en contacto con nosotros en [email protected].

Código

  • Transmitir valores RGB a Nano 33 Sense
Chirp RGB valores a Nano 33 Sense C / C ++
Envíe valores RGB usando Chirp para cambiar el color del LED integrado. Puede usar nuestros clips de sonido adjuntos en este tutorial para probarlo, o hacerlo usted mismo enviando una matriz de 3 bytes.
 / ** ----------------- -------------------------------------------------- - Código de ejemplo para recibir datos usando la placa Arduino Nano 33 Sense. @file Nano33SenseReceive.ino @brief Cree una cuenta de desarrollador en https://developers.chirp.io, y copie y pegue su clave, secreto y cadena de configuración para el protocolo "16khz-mono-embedded" en el chirp que se define a continuación. Este ejemplo comenzará a escuchar los valores RGB y cambiará el color del LED integrado. Circuito:- Placa Arduino Nano 33 BLE Copyright © 2011-2019, Asio Ltd. Todos los derechos reservados. -------------------------------------------------- ----------------- * / # include  #include "chirp_connect.h" #define CHIRP_APP_KEY "YOUR_APP_KEY" #define CHIRP_APP_SECRET "YOUR_APP_SECRET" #define CHIRP_APP_CONPFIG "YOUR_APP "#define SAMPLE_RATE 16000 # define BUFFER_SIZE 256 # define R_LED_PIN 22 # define G_LED_PIN 23 # define B_LED_PIN 24 // Variables globales ------------------------- -------------------------- static chirp_connect_t * chirp =NULL; short sampleBuffer [BUFFER_SIZE]; volatile int samplesRead; // Definiciones de funciones --- -------------------------------------------- void setupChirp (void); void chirpErrorHandler (código chirp_connect_error_code_t); void onPDMdata (void); // Principal ---------------------------------- ----------------------------- void setup () {Serial.begin (115200); // while (! Serial); pinMode (R_LED_PIN, SALIDA); pinMode (G_LED_PIN, SALIDA); pinMode (B_LED_PIN, SALIDA); setupChirp (); PDM.onReceive (enPDMdata); PDM.setGain (30); if (! PDM.begin (1, SAMPLE_RATE)) {Serial.println ("¡Error al iniciar PDM!"); mientras (1); } escritura analógica (R_LED_PIN, UINT8_MAX); analogWrite (G_LED_PIN, UINT8_MAX); analogWrite (B_LED_PIN, UINT8_MAX);} bucle vacío () {if (samplesRead) {chirp_connect_error_code_t err =chirp_connect_process_shorts_input (chirp, sampleBuffer, samplesRead); chirpErrorHandler (err); samplesRead =0; }} void onPDMdata () {int bytesAvailable =PDM.available (); PDM.read (sampleBuffer, bytesAvailable); samplesRead =bytesAvailable / sizeof (short);} // Chirp ------------------------------------- ------------------------- void onReceivingCallback (void * chirp, uint8_t * payload, size_t length, uint8_t channel) {Serial.println ("Recibiendo datos ... "); analogWrite (R_LED_PIN, UINT8_MAX); analogWrite (G_LED_PIN, UINT8_MAX); analogWrite (B_LED_PIN, UINT8_MAX);} void onReceivedCallback (void * chirp, uint8_t * payload, size_t length, uint8_t channel) {if (length) {// Los valores altos significan un brillo más bajo, así que // restamos de UINT8_MAX analogWrite (R_LED_PIN, UINT8_MAX - carga útil [0]); analogWrite (G_LED_PIN, UINT8_MAX - carga útil [1]); analogWrite (B_LED_PIN, UINT8_MAX - carga útil [2]); } más {analogWrite (R_LED_PIN, 0); analogWrite (G_LED_PIN, UINT8_MAX); analogWrite (B_LED_PIN, UINT8_MAX); retraso (500); analogWrite (R_LED_PIN, UINT8_MAX); retraso (500); analogWrite (R_LED_PIN, 0); Serial.println ("Falló la decodificación"); }} void chirpErrorHandler (chirp_connect_error_code_t code) {if (código! =CHIRP_CONNECT_OK) {const char * error_string =chirp_connect_error_code_to_string (código); Serial.println (error_string); salida (42); }} void setupChirp (void) {chirp =new_chirp_connect (CHIRP_APP_KEY, CHIRP_APP_SECRET); if (chirp ==NULL) {Serial.println ("Falló la inicialización del chirp."); regreso; } chirp_connect_error_code_t err =chirp_connect_set_config (chirp, CHIRP_APP_CONFIG); chirpErrorHandler (err); char * info =chirp_connect_get_info (chirp); Serial.println (información); chirp_connect_free (información); chirp_connect_callback_set_t callback_set ={.on_state_changed =NULL, .on_sending =NULL, .on_sent =NULL, .on_receiving =onReceivingCallback, .on_received =onReceivedCallback}; err =chirp_connect_set_callbacks (chirp, callback_set); chirpErrorHandler (err); err =chirp_connect_set_input_sample_rate (chirp, SAMPLE_RATE); chirpErrorHandler (err); err =chirp_connect_set_frequency_correction (chirp, 1.0096); chirpErrorHandler (err); err =chirp_connect_start (chirrido); chirpErrorHandler (err); Serial.println ("Chirp SDK inicializado"); Serial.flush ();} 

Proceso de manufactura

  1. Registro LP
  2. La integración de los datos del sensor con el microprocesador Raspberry Pi
  3. ¡¿Qué hago con los datos ?!
  4. Ponerse manos a la obra con IoT
  5. Actualización de Industry 4.0 con análisis de borde
  6. Tipo de datos Char de C++ con ejemplos
  7. 8 tipos diferentes de violaciones de datos con ejemplos
  8. Mejora de la eficiencia energética con HMI
  9. Empoderar a los equipos de fabricación digital con conocimiento
  10. Con los datos de la ciudad en tiempo real llega la innovación
  11. Tecnologías emergentes de la industria 4.0 con ejemplos del mundo real