Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Enviar dados com som

Componentes e suprimentos

Arduino Nano 33 BLE Sense
× 1

Sobre este projeto


Aqui no Chirp HQ, ficamos extremamente animados em ouvir o anúncio de que o Arduino lançaria uma nova placa com uma série de novos recursos. Esses recursos incluem uma ampla gama de sensores, um processador poderoso e, o mais importante, um microfone integrado! O bom pessoal do Arduino nos enviou um pré-lançamento da nova placa Nano 33 Sense, que é totalmente compatível com o Chirp, permitindo que a comunidade de criadores envie e receba dados usando som.

O Chirp adiciona um mecanismo de transporte totalmente exclusivo às placas Arduino, os recursos adicionais de dados sobre som significam que os hackers têm mais opções de conectividade ao alcance de seus dedos. Algumas das vantagens dos dados sobre o som incluem:
  • Independente de dispositivo:os dados podem ser enviados de aplicativos para celular, páginas da web ou até mesmo com apenas um arquivo de áudio
  • Um para muitos:qualquer dispositivo dentro do alcance auditivo é capaz de receber dados em uma transação simples
  • Sem atrito:não precisa de emparelhamento, senha ou configuração inicial

Neste tutorial vamos demonstrar como usar o Chirp SDK para enviar um valor RGB para mudar a cor do LED integrado.

O Chirp funciona até em locais barulhentos, graças aos anos de pesquisa que colocamos para tornar o decodificador robusto para sons de fundo. Leia mais sobre os benefícios de usar dados sobre som aqui.

Se você ainda estiver cético, experimente você mesmo.

Começar a usar o Chirp é mais fácil do que nunca ...





Primeiros passos


Se ainda não tiver feito isso, você precisará se inscrever no Chirp em developers.chirp.io. Depois de se inscrever, você pode obter a chave do aplicativo, o segredo e a configuração de áudio do seu aplicativo.





Recebendo dados


Como o Nano 33 Sense vem com um microfone integrado, tudo o que você precisa para receber dados usando o Chirp é o SDK do Chirp, que está disponível diretamente no Library Manager.

Simplesmente abra o Library Manager e pesquise Chirp SDK. Instale a v3.3.0 ou posterior e você estará pronto para começar a codificar.

Ferramentas> Gerenciar bibliotecas

Você pode abrir nosso código de exemplo para começar.

Arquivo> Exemplos> ChirpSDK> Nano33SenseReceive

Você precisará copiar e colar suas credenciais para o 16khz-mono-incorporado protocolo de developers.chirp.io no arquivo credentials.h.

O código de exemplo simplesmente imprimirá quaisquer dados recebidos no Monitor Serial. No entanto, podemos facilmente alterar o comportamento para acender os LEDs na placa editando o onReceivedCallback função.

Em sua função de configuração, devemos primeiro configurar os pinos GPIO conectados aos LEDs como saídas
  #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, OUTPUT); pinMode (B_LED_PIN, OUTPUT);}  

Para acionar os LEDs, precisaremos extrair os valores RGB da carga de dados.
  void onReceivedCallback (void * chirp, uint8_t * payload, size_t length, {if (length> 0) {// Valores altos significam menor brilho, então // subtraímos de UINT8_MAX analogWrite (R_LED_PIN, UINT8_MAX - payload [0]); analogWrite (B_LED_PIN, UINT8_MAX - carga útil [2]);} else {Serial.println (“Falha na decodificação”);}}  

Agora você pode testar seu código reproduzindo os arquivos de áudio abaixo, cada um deve mudar a cor do LED de vermelho para verde para azul.








O que vem a seguir?


A primeira iteração do Chirp SDK para Arduino opera apenas no audível 16 khz-mono-incorporado protocolo. Nos próximos meses, lançaremos uma versão inaudível que funcionará em frequências quase ultrassônicas. Com isso, você será capaz de enviar dados em frequências que os humanos não podem ouvir, então, por exemplo, você pode incorporar os dados chirp em áudio existente, como músicas ou vídeos, para acionar ações.

Também faremos mais tutoriais sobre como você pode utilizar dados sobre som com o Arduino. Deixe-nos saber onde você usou o Chirp em seus próprios projetos do Arduino marcando-nos no twitter @chirp ou entre em contato conosco em [email protected].

Código

  • Chirp valores RGB para Nano 33 sentido
Chirp valores RGB para Nano 33 Sense C / C ++
Envie valores RGB usando Chirp para alterar a cor do LED integrado. Você pode usar nossos clipes de som anexados neste tutorial para experimentá-lo, ou faça você mesmo enviando um array de 3 bytes.
 / ** ----------------- -------------------------------------------------- - Exemplo de código para receber dados usando a placa Arduino Nano 33 Sense. @file Nano33SenseReceive.ino @brief Crie uma conta de desenvolvedor em https://developers.chirp.io, e copie e cole sua chave, segredo e string de configuração para o protocolo "16khz-mono-incorporado" no chirp definido abaixo. Este exemplo começará a escutar os valores RGB e mudará a cor do LED integrado. Circuito:- Placa Arduino Nano 33 BLE Copyright © 2011-2019, Asio Ltd. Todos os direitos reservados. -------------------------------------------------- ----------------- * / # 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" 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 // Variáveis ​​globais ------------------------- -------------------------- static chirp_connect_t * chirp =NULL; short sampleBuffer [BUFFER_SIZE]; volatile int samplesRead; // Definições de função --- -------------------------------------------- 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, 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 ("Falha ao iniciar o PDM!"); enquanto (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 ("Recebendo dados ... "); analogWrite (R_LED_PIN, UINT8_MAX); analogWrite (G_LED_PIN, UINT8_MAX); analogWrite (B_LED_PIN, UINT8_MAX);} void onReceivedCallback (void * chirp, uint8_t * carga útil, tamanho_t comprimento, canal uint8_t) {if (comprimento) {// Valores altos significam brilho mais baixo, então // subtraímos de UINT8_MAX analogWrite (R_LED_PIN, analogWrite UINT8_MAX - carga útil [0]); analogWrite (G_LED_PIN, UINT8_MAX - carga útil [1]); analogWrite (B_LED_PIN, UINT8_MAX - carga útil [2]); } else {analogWrite (R_LED_PIN, 0); analogWrite (G_LED_PIN, UINT8_MAX); analogWrite (B_LED_PIN, UINT8_MAX); atraso (500); analogWrite (R_LED_PIN, UINT8_MAX); atraso (500); analogWrite (R_LED_PIN, 0); Serial.println ("Falha na decodificação"); }} void chirpErrorHandler (código chirp_connect_error_code_t) {if (code! =CHIRP_CONNECT_OK) {const char * error_string =chirp_connect_error_code_to_string (code); Serial.println (string_de_erro); saída (42); }} void setupChirp (void) {chirp =new_chirp_connect (CHIRP_APP_KEY, CHIRP_APP_SECRET); if (chirp ==NULL) {Serial.println ("A inicialização chirp falhou."); Retorna; } 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 (informações); 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 inicializado."); Serial.flush ();} 

Processo de manufatura

  1. Gravação do LP
  2. A integração dos dados do sensor com o microprocessador Raspberry Pi
  3. O que eu faço com os dados ?!
  4. Começar a trabalhar com IoT
  5. Atualizando Indústria 4.0 com análise de borda
  6. Tipo de dados C++ Char com exemplos
  7. 8 tipos diferentes de violação de dados com exemplos
  8. Melhorando a eficiência energética com IHMs
  9. Capacitando equipes de manufatura digital com conhecimento
  10. Com os dados da cidade em tempo real, vem a inovação