Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Transmisi Data Audio dengan Arduino Nano 33 BLE Sense

Komponen dan Perlengkapan

Transmisi Data Audio dengan Arduino Nano 33 BLE Sense
Arduino Nano 33 BLE Sense
× 1

Tentang Proyek Ini

Di Chirp HQ, kami sangat bersemangat mendengar pengumuman bahwa Arduino akan merilis papan baru dengan berbagai fitur canggih. Fitur-fitur ini mencakup berbagai sensor, prosesor yang kuat, dan yang terpenting: mikrofon papan! Tim Arduino mengirimkan versi pra-rilis papan Nano 33 Sense baru kepada kami, yang sepenuhnya kompatibel dengan Chirp, memungkinkan komunitas maker untuk mengirim dan menerima data menggunakan suara.

Chirp menambahkan mekanisme transportasi yang sepenuhnya unik pada papan Arduino. Dengan kemampuan tambahan data-over-sound, hacker memiliki lebih banyak opsi konektivitas di ujung jari mereka. Beberapa keuntungan data-over-sound meliputi:

Dalam tutorial ini, kami akan menunjukkan cara menggunakan SDK Chirp untuk mengirim nilai RGB yang mengubah warna LED papan.

Chirp bahkan bekerja di tempat yang bising, berkat tahun penelitian yang kami lakukan untuk membuat decoder tangguh terhadap suara latar belakang. Baca lebih lanjut tentang manfaat menggunakan data-over-sound di sini.

Jika Anda masih ragu, coba langsung sendiri.

Memulai dengan Chirp kini lebih mudah dari sebelumnya.

Memulai

Jika Anda belum melakukannya, Anda perlu mendaftar di Chirp melalui developers.chirp.io. Setelah mendaftar, Anda dapat mendapatkan kunci aplikasi, rahasia, dan konfigurasi audio untuk aplikasi Anda.

Menerima Data

Karena Nano 33 Sense dilengkapi dengan mikrofon papan, yang Anda butuhkan untuk menerima data menggunakan Chirp hanyalah SDK Chirp yang tersedia langsung dari Library Manager.

Cukup buka Library Manager, cari SDK Chirp. Instal v3.3.0 atau lebih baru dan Anda siap untuk mulai mengkode.

Tools > Manage Libraries

Anda dapat membuka kode contoh kami untuk memulai.

File > Examples > ChirpSDK > Nano33SenseReceive

Anda perlu menyalin dan menempelkan kredensial Anda untuk protokol 16khz-mono-embedded dari developers.chirp.io ke dalam file credentials.h.

Kode contoh akan mencetak data yang diterima ke Serial Monitor. Namun, kita dapat dengan mudah mengubah perilaku untuk menyalakan LED papan dengan mengedit fungsi onReceivedCallback.

Dalam fungsi setup, kita harus terlebih dahulu mengatur pin GPIO yang terhubung ke LED sebagai output.

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

Untuk menggerakkan LED, kita perlu menarik nilai RGB dari payload data.

void onReceivedCallback(void *chirp, uint8_t *payload, size_t length, { if (length > 0) { // High values mean lower brightness, so we // subtract from UINT8_MAX analogWrite(R_LED_PIN, UINT8_MAX - payload[0]); analogWrite(B_LED_PIN, UINT8_MAX - payload[2]); } else { Serial.println(“Decode failed”); } } 

Anda sekarang dapat menguji kode Anda dengan memutar file audio di bawah ini, masing-masing harus mengubah warna LED dari merah ke hijau ke biru.

Apa Selanjutnya?

Iterasi pertama SDK Chirp untuk Arduino hanya beroperasi pada protokol 16khz-mono-embedded yang bisa didengar. Dalam beberapa bulan ke depan, kami akan merilis versi yang tidak bisa didengar yang akan bekerja pada frekuensi hampir ultrasonik. Dengan ini, Anda akan dapat mengirim data pada frekuensi yang tidak dapat didengar manusia, sehingga misalnya, Anda dapat menyematkan data chirp ke dalam audio yang ada seperti lagu atau video untuk memicu tindakan.

Kami juga akan menyusun lebih banyak tutorial tentang cara Anda dapat menggunakan data-over-sound dengan Arduino. Beritahu kami di mana Anda telah menggunakan Chirp dalam proyek Arduino Anda dengan menandai kami di twitter @chirp atau hubungi kami di contact@chirp.io.

Kode

Nilai RGB Chirp ke Nano 33 SenseC/C++

Kirim nilai RGB menggunakan Chirp untuk mengubah warna LED papan. Anda dapat menggunakan klip suara yang dilampirkan dalam tutorial ini untuk mencobanya, atau lakukan sendiri dengan mengirim array 3 byte.

/**-------------------------------------------------------------------- Kode contoh untuk menerima data menggunakan papan Arduino Nano 33 Sense. @file Nano33SenseReceive.ino @brief Buat akun developer di https://developers.chirp.io, dan salin dan tempel kunci, rahasia, dan string konfigurasi Anda untuk protokol "16khz-mono-embedded" ke dalam definisi chirp di bawah ini. Contoh ini akan mulai mendengarkan nilai RGB dan mengubah warna LED papan. Rangkaian: - Papan Arduino Nano 33 BLE Copyright © 2011-2019, Asio Ltd. All rights reserved. -------------------------------------------------------------------*/ #include <PDM.h> #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 // Global variables --------------------------------------------------- static chirp_connect_t *chirp = NULL; short sampleBuffer[BUFFER_SIZE]; volatile int samplesRead; // Function definitions ----------------------------------------------- void 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, OUTPUT); pinMode(G_LED_PIN, OUTPUT); pinMode(B_LED_PIN, OUTPUT); setupChirp(); PDM.onReceive(onPDMdata); PDM.setGain(30); if (!PDM.begin(1, SAMPLE_RATE)) { Serial.println("Failed to start PDM!"); while (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); 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("Receiving data..."); 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) { // High values mean lower brightness, so we // subtract from UINT8_MAX analogWrite(R_LED_PIN, UINT8_MAX - payload[0]); analogWrite(G_LED_PIN, UINT8_MAX - payload[1]); analogWrite(B_LED_PIN, UINT8_MAX - payload[2]); } else { analogWrite(R_LED_PIN, 0); analogWrite(G_LED_PIN, UINT8_MAX); analogWrite(B_LED_PIN, UINT8_MAX); delay(500); analogWrite(R_LED_PIN, UINT8_MAX); delay(500); analogWrite(R_LED_PIN, 0); Serial.println("Decode failed"); } } 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); exit(42); } } void setupChirp(void) { chirp = new_chirp_connect(CHIRP_APP_KEY, CHIRP_APP_SECRET); if (chirp == NULL) { Serial.println("Chirp initialisation failed."); return; } 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 initialised."); Serial.flush(); } 

Proses manufaktur

  1. Seni dan Proses Produksi Rekaman LP
  2. Mengintegrasikan Data Sensor ke Raspberry Pi: Panduan Praktis
  3. Memanfaatkan Data di Internet of Reliability: Strategi untuk Manajemen yang Efektif
  4. IoT di Era Edge: Pertumbuhan, Data, Keamanan, dan Strategi Partner
  5. Meningkatkan Industri 4.0: Memanfaatkan Analitik Edge untuk Manufaktur yang Lebih Cerdas dan Cepat
  6. Menguasai Tipe Data Char C++: Deklarasi, ASCII, dan Teknik Konversi
  7. 8 Jenis Pelanggaran Data Umum – Contoh Dunia Nyata dan Dampaknya
  8. Maksimalkan Efisiensi Energi Pabrik dengan HMI Canggih
  9. Transformasi Tim Manufaktur Digital dengan Wawasan Data Real-Time
  10. Memanfaatkan Data Kota Real-Time untuk Inovasi Kota Cerdas