Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Gegevens verzenden met geluid

Componenten en benodigdheden

Arduino Nano 33 BLE Sense
× 1

Over dit project

Hier op het hoofdkantoor van Chirp waren we enorm enthousiast toen we de aankondiging hoorden dat Arduino een nieuw bord zou uitbrengen met een hele reeks nieuwe functies. Deze functies omvatten een breed scala aan sensoren, een krachtige processor en vooral - een ingebouwde microfoon! De goede mensen bij Arduino stuurden ons een pre-release van het nieuwe Nano 33 Sense-bord, dat volledig compatibel is met Chirp, waardoor de makergemeenschap gegevens kan verzenden en ontvangen met geluid.

Chirp voegt een volledig uniek transportmechanisme toe aan Arduino-boards, de toegevoegde mogelijkheden van data-over-sound zorgen ervoor dat hackers meer connectiviteitsopties binnen handbereik hebben. Enkele voordelen van data-over-sound zijn:

  • Apparaatonafhankelijk:gegevens kunnen worden verzonden vanaf mobiele apps, webpagina's of zelfs met alleen een audiobestand
  • Eén op veel:elk apparaat binnen gehoorbereik kan gegevens in één simpele transactie ontvangen
  • Wrijvingsloos:geen koppeling, wachtwoord of initiële installatie nodig

In deze zelfstudie laten we zien hoe u de Chirp SDK kunt gebruiken om een ​​RGB-waarde te verzenden om de kleur van de ingebouwde LED te wijzigen.

Chirp werkt zelfs op lawaaierige plaatsen, dankzij het jarenlange onderzoek dat we hebben gedaan om de decoder robuust te maken voor achtergrondgeluid. Lees hier meer over de voordelen van het gebruik van data-over-geluid.

Als je nog steeds sceptisch bent, probeer het dan zelf.

Aan de slag met Chirp is makkelijker dan ooit...

Aan de slag

Als je dit nog niet hebt gedaan, moet je je aanmelden bij Chirp op developers.chirp.io. Nadat u zich heeft aangemeld, kunt u uw app-sleutel, geheim en audioconfiguratie voor uw toepassing krijgen.

Gegevens ontvangen

Omdat de Nano 33 Sense wordt geleverd met een ingebouwde microfoon, is alles wat je nodig hebt om gegevens te ontvangen met Chirp de Chirp SDK die rechtstreeks beschikbaar is vanuit Bibliotheekbeheer.

Open eenvoudig Bibliotheekbeheer en zoek naar Chirp SDK. Installeer v3.3.0 of hoger en u bent klaar om te beginnen met coderen.

Extra> Bibliotheken beheren

U kunt om te beginnen onze voorbeeldcode openen.

Bestand> Voorbeelden> ChirpSDK> Nano33SenseReceive

U moet uw inloggegevens voor de 16khz-mono-embedded . kopiëren en plakken protocol van developers.chirp.io naar het bestand credentials.h.

De voorbeeldcode drukt alle ontvangen gegevens eenvoudig af naar de seriële monitor. We kunnen echter eenvoudig het gedrag wijzigen om de LED's aan boord te verlichten door de onReceivedCallback te bewerken functie.

In uw setup-functie moeten we eerst de GPIO-pinnen die op de LED's zijn aangesloten instellen als uitgangen

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

Om de LED's aan te sturen, moeten we de RGB-waarden uit de gegevenslading halen.

void onReceivedCallback(void *chirp, uint8_t *payload, size_t length,{ if (length> 0) { // Hoge waarden betekenen lagere helderheid, dus // trekken we af van UINT8_MAX analogWrite(R_LED_PIN, UINT8_MAX - payload [0]); analogWrite (B_LED_PIN, UINT8_MAX - payload [2]); } else { Serial.println ("Decoderen mislukt"); }}  

U kunt nu uw code testen door de onderstaande audiobestanden af ​​te spelen, elk moet de LED-kleur veranderen van rood in groen in blauw.

Wat nu?

De eerste iteratie van de Chirp SDK voor Arduino werkt alleen op de hoorbare 16khz-mono-embedded protocol. In de komende maanden zullen we een onhoorbare versie uitbrengen die zal werken op bijna ultrasone frequenties. Hiermee kun je gegevens verzenden op frequenties die mensen niet kunnen horen, dus je kunt de chirp-gegevens bijvoorbeeld insluiten in bestaande audio, zoals liedjes of video's om acties te activeren.

We zullen ook meer tutorials volgen over hoe je data-over-sound kunt gebruiken met Arduino. Laat ons weten waar je Chirp hebt gebruikt in je eigen Arduino-projecten door ons te taggen op twitter @chirp of neem contact met ons op via [email protected].

Code

  • Chirp RGB-waarden naar Nano 33 Sense
Chirp RGB-waarden naar Nano 33 SenseC/C++
Stuur RGB-waarden met behulp van Chirp om de kleur van de ingebouwde LED te wijzigen. U kunt onze bijgevoegde geluidsfragmenten bij deze tutorial gebruiken om het uit te proberen, of u kunt het zelf doen door een array van 3 bytes te verzenden.
/**----------------- -------------------------------------------------- - Voorbeeldcode om gegevens te ontvangen met behulp van Arduino Nano 33 Sense-bord. @file Nano33SenseReceive.ino @brief Maak een ontwikkelaarsaccount aan op https://developers.chirp.io en kopieer en plak uw sleutel, geheim en configuratiereeks voor het "16khz-mono-embedded"-protocol in de chirp die hieronder wordt gedefinieerd. Dit voorbeeld begint te luisteren naar RGB-waarden en verandert de kleur van de ingebouwde LED. Circuit:- Arduino Nano 33 BLE-bord Copyright © 2011-2019, Asio Ltd. Alle rechten voorbehouden. -------------------------------------------------- -----------------*/#include #include "chirp_connect.h"#define CHIRP_APP_KEY "YOUR_APP_KEY"#define CHIRP_APP_SECRET "YOUR_APP_SECRET"#define CHIRP_APP_CONFIG CONFIG "YOUR_APP_KEY" "#define SAMPLE_RATE 16000#define BUFFER_SIZE 256#define R_LED_PIN 22#define G_LED_PIN 23#define B_LED_PIN 24// Globale variabelen ------------------------ --------------------------static chirp_connect_t *chirp =NULL;short sampleBuffer[BUFFER_SIZE];vluchtige int samplesRead;// Functiedefinities --- -------------------------------------------- ongeldig setupChirp (void); void chirpErrorHandler (chirp_connect_error_code_t code); void onPDMdata (void);// Main ---------------------------------- ---------------------------- void setup(){ Serial.begin(115200);// while (!Serial); pinMode (R_LED_PIN, UITGANG); pinMode (G_LED_PIN, UITGANG); pinMode (B_LED_PIN, UITGANG); setupChirp(); PDM.opOntvangen(opPDMdata); PDM.setGain(30); if (!PDM.begin(1, SAMPLE_RATE)) { Serial.println("Kan PDM niet starten!"); terwijl (1); } analogWrite (R_LED_PIN, UINT8_MAX); analogWrite (G_LED_PIN, UINT8_MAX); analogWrite (B_LED_PIN, UINT8_MAX);} ongeldige lus () {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, bytesBeschikbaar); samplesRead =bytesAvailable / sizeof(short);}// Chirp ------------------------------------- -------------------------void onReceivingCallback(void *chirp, uint8_t *payload, size_t length, uint8_t channel){ Serial.println("Gegevens ontvangen ..."); 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) { // Hoge waarden betekenen lagere helderheid, dus we // trekken af ​​van UINT8_MAX analogWrite (R_LED_PIN, UINT8_MAX - nuttige lading [0]); analogWrite (G_LED_PIN, UINT8_MAX - nuttige lading [1]); analogWrite (B_LED_PIN, UINT8_MAX - nuttige lading [2]); } else {analogeWrite(R_LED_PIN, 0); analogWrite (G_LED_PIN, UINT8_MAX); analogWrite (B_LED_PIN, UINT8_MAX); vertraging (500); analogWrite (R_LED_PIN, UINT8_MAX); vertraging (500); analogWrite(R_LED_PIN, 0); Serial.println ("Decoderen mislukt"); }} ongeldig 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); uitgang(42); }} ongeldig setupChirp(void){chirp =new_chirp_connect(CHIRP_APP_KEY, CHIRP_APP_SECRET); if (chirp ==NULL) { Serial.println ("Chirp-initialisatie mislukt."); opbrengst; } 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_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(chirp); chirpErrorHandler(err); Serial.println("Chirp SDK geïnitialiseerd."); Serieel.flush();}

Productieproces

  1. LP-record
  2. De integratie van sensorgegevens met Raspberry Pi-microprocessor
  3. Aan de slag met IoT
  4. Industrie 4.0 upgraden met edge-analyse
  5. C++ Char-gegevenstype met voorbeelden
  6. 8 verschillende soorten datalekken met voorbeelden
  7. Energie-efficiëntie verbeteren met HMI's
  8. Digitale productieteams machtigen met kennis
  9. Met realtime stadsgegevens komt innovatie
  10. Opkomende Industrie 4.0-technologieën met praktijkvoorbeelden
  11. Industriële software integreert met IT