Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Envoyer des données avec le son

Composants et fournitures

Arduino Nano 33 BLE Sense
× 1

À propos de ce projet

Ici, au siège de Chirp, nous étions extrêmement heureux d'entendre l'annonce qu'Arduino sortirait une nouvelle carte avec une multitude de nouvelles fonctionnalités. Ces fonctionnalités incluent une large gamme de capteurs, un processeur puissant et, surtout, un microphone intégré ! Les bonnes personnes d'Arduino nous ont envoyé une pré-version de la nouvelle carte Nano 33 Sense, qui est entièrement compatible avec Chirp, permettant à la communauté des fabricants d'envoyer et de recevoir des données à l'aide du son.

Chirp ajoute un mécanisme de transport tout à fait unique aux cartes Arduino, les capacités supplémentaires des données sur le son signifient que les pirates ont plus d'options de connectivité à portée de main. Voici quelques-uns des avantages des données sur le son :

  • Agnostique de l'appareil :les données peuvent être envoyées à partir d'applications mobiles, de pages Web ou même d'un simple fichier audio
  • Un vers plusieurs :tout appareil à portée auditive est capable de recevoir des données en une seule transaction
  • Sans friction :ne nécessite aucun couplage, mot de passe ou configuration initiale

Dans ce didacticiel, nous montrerons comment utiliser le SDK Chirp pour envoyer une valeur RVB afin de changer la couleur de la LED intégrée.

Chirp fonctionne même dans des endroits bruyants, grâce aux années de recherche que nous avons consacrées à rendre le décodeur robuste aux bruits de fond. En savoir plus sur les avantages de l'utilisation des données sur le son ici.

Si vous êtes encore sceptique, essayez-le vous-même.

Démarrer avec Chirp est plus facile que jamais...

Commencer

Si vous ne l'avez pas déjà fait, vous devrez vous inscrire à Chirp sur developer.chirp.io. Une fois que vous vous êtes inscrit, vous pouvez obtenir votre clé d'application, votre secret et votre configuration audio pour votre application.

Réception de données

Étant donné que le Nano 33 Sense est fourni avec un microphone intégré, tout ce dont vous avez besoin pour recevoir des données à l'aide de Chirp est le SDK Chirp qui est disponible directement à partir du gestionnaire de bibliothèque.

Ouvrez simplement le gestionnaire de bibliothèque et recherchez Chirp SDK. Installez la v3.3.0 ou une version ultérieure et vous êtes prêt à commencer à coder.

Outils> Gérer les bibliothèques

Vous pouvez ouvrir notre exemple de code pour commencer.

Fichier> Exemples> ChirpSDK> Nano33SenseReceive

Vous devrez copier et coller vos identifiants pour le 16khz-mono-embedded protocole de developer.chirp.io dans le fichier credentials.h.

L'exemple de code imprimera simplement toutes les données reçues sur le moniteur série. Cependant, nous pouvons facilement changer le comportement pour allumer les LED embarquées en éditant le onReceivedCallback une fonction.

Dans votre fonction de configuration, nous devons d'abord configurer les broches GPIO connectées aux LED comme sorties

#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, SORTIE); pinMode(B_LED_PIN, SORTIE);}  

Pour piloter les LED, nous devrons extraire les valeurs RVB de la charge utile de données.

void onReceivedCallback(void *chirp, uint8_t *payload, size_t length,{ if (length> 0) { // Des valeurs élevées signifient une luminosité plus faible, donc nous // soustrayons de UINT8_MAX analogWrite(R_LED_PIN, UINT8_MAX - payload [0]); analogWrite(B_LED_PIN, UINT8_MAX - payload[2]); } else { Serial.println("Décodage échoué"); }}  

Vous pouvez maintenant tester votre code en lisant les fichiers audio ci-dessous, chacun doit changer la couleur de la LED du rouge au vert au bleu.

Quelle est la prochaine étape ?

La première itération du SDK Chirp pour Arduino ne fonctionne que sur l'audible 16khz-mono-embedded protocole. Au cours des prochains mois, nous publierons une version inaudible qui fonctionnera à des fréquences proches des ultrasons. Avec cela, vous pourrez envoyer des données à des fréquences que les humains ne peuvent pas entendre, par exemple, vous pouvez intégrer les données de chirp dans l'audio existant comme des chansons ou des vidéos pour déclencher des actions.

Nous suivrons également avec plus de tutoriels sur la façon dont vous pouvez utiliser les données sur le son avec Arduino. Faites-nous savoir où vous avez utilisé Chirp dans vos propres projets Arduino en nous identifiant sur twitter @chirp ou contactez-nous à [email protected].

Code

  • Chiffre les valeurs RVB vers le Nano 33 Sense
Chiffre les valeurs RVB vers Nano 33 SenseC/C++
Envoyez des valeurs RVB à l'aide de Chirp pour changer la couleur de la LED intégrée. Vous pouvez utiliser nos extraits sonores ci-joints sur ce didacticiel pour l'essayer, ou le faire vous-même en envoyant un tableau de 3 octets.
/**----------------- -------------------------------------------------- - Exemple de code pour recevoir des données à l'aide de la carte Arduino Nano 33 Sense. @file Nano33SenseReceive.ino @brief Créez un compte développeur sur https://developers.chirp.io, et copiez et collez votre clé, votre secret et votre chaîne de configuration pour le protocole "16khz-mono-embedded" dans le chirp défini ci-dessous. Cet exemple commencera à écouter les valeurs RVB et changera la couleur de la LED intégrée. Circuit :- Carte Arduino Nano 33 BLE Copyright © 2011-2019, Asio Ltd. Tous droits réservés. -------------------------------------------------- -----------------*/#include #include "chirp_connect.h"#define CHIRP_APP_KEY "YOUR_APP_KEY"#define CHIRP_APP_SECRET "YOUR_APP_SECRET"#define CHIRP_APP_CONFIG "YOUR_APP_CONFIG" "#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;// Définitions de fonctions --- ------------------------------------------------------------------------------- void setupChirp(void); void chirpErrorHandler(chirp_connect_error_code_t code);void onPDMdata(void);// Principal ---------------------------------- ----------------------------- void setup(){ Serial.begin(115200);// while (!Serial); pinMode(R_LED_PIN, SORTIE); pinMode(G_LED_PIN, SORTIE); pinMode(B_LED_PIN, SORTIE); setupChirp(); PDM.onReceive(onPDMdata); PDM.setGain(30); if (!PDM.begin(1, SAMPLE_RATE)) { Serial.println("Impossible de démarrer PDM!"); tandis que (1) ; } analogWrite(R_LED_PIN, UINT8_MAX); analogWrite(G_LED_PIN, UINT8_MAX); analogWrite(B_LED_PIN, UINT8_MAX);}void loop(){ if (samplesRead) { chirp_connect_error_code_t err =chirp_connect_process_shorts_input(chirp, sampleBuffer, samplesRead); chirpErrorHandler(err); échantillonsLire =0 ; }}void onPDMdata(){ int bytesAvailable =PDM.available(); PDM.read(sampleBuffer, bytesAvailable); samplesRead =bytesAvailable / sizeof(short);}// Chirp ------------------------------------- ------------------------- void onReceptiveCallback(void *chirp, uint8_t *payload, size_t length, uint8_t channel){ Serial.println("Réception de données ..."); 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) { // Les valeurs élevées signifient une luminosité plus faible, donc nous // soustrayons de UINT8_MAX analogWrite(R_LED_PIN, UINT8_MAX - charge utile[0]); analogWrite(G_LED_PIN, UINT8_MAX - charge utile[1]); analogWrite(B_LED_PIN, UINT8_MAX - charge utile[2]); } else { analogWrite(R_LED_PIN, 0); analogWrite(G_LED_PIN, UINT8_MAX); analogWrite(B_LED_PIN, UINT8_MAX); retard (500); analogWrite(R_LED_PIN, UINT8_MAX); retard (500); analogWrite(R_LED_PIN, 0); Serial.println("Le décodage a échoué"); }}void chirpErrorHandler(chirp_connect_error_code_t code){ if (code !=CHIRP_CONNECT_OK) { const char *error_string =chirp_connect_error_code_to_string(code); Serial.println(error_string); sortie(42); }} void setupChirp(void){ chirp =new_chirp_connect(CHIRP_APP_KEY, CHIRP_APP_SECRET); if (chirp ==NULL) { Serial.println("L'initialisation du chirp a échoué."); retourner; } 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(info); chirp_connect_free(info); chirp_connect_callback_set_t callback_set ={ .on_state_changed =NULL, .on_sending =NULL, .on_sent =NULL, .on_reCEPT =onReceptiveCallback, .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_fréquence_correction (chirp, 1.0096); chirpErrorHandler(err); err =chirp_connect_start(chirp); chirpErrorHandler(err); Serial.println("Chirp SDK initialisé."); Serial.flush();}

Processus de fabrication

  1. Enregistrement LP
  2. L'intégration des données du capteur avec le microprocesseur Raspberry Pi
  3. Que dois-je faire avec les données ? !
  4. Commencer à travailler avec l'IoT
  5. Mise à niveau d'Industrie 4.0 avec l'analyse de périphérie
  6. Type de données Char C++ avec exemples
  7. 8 types de violations de données différents avec exemples
  8. Améliorer l'efficacité énergétique avec les IHM
  9. Donner aux équipes de fabrication numérique les connaissances