산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

소리로 데이터 보내기

구성품 및 소모품

Arduino Nano 33 BLE 감지
× 1

이 프로젝트 정보

여기 Chirp HQ에서 Arduino가 완전히 새로운 기능을 갖춘 새 보드를 출시할 것이라는 발표를 듣고 매우 기뻤습니다. 이러한 기능에는 광범위한 센서, 강력한 프로세서 및 가장 중요한 온보드 마이크가 포함됩니다! Arduino의 좋은 사람들은 Chirp와 완벽하게 호환되는 새로운 Nano 33 Sense 보드의 시험판을 통해 제작자 커뮤니티가 소리를 사용하여 데이터를 주고받을 수 있도록 보냈습니다.

Chirp는 Arduino 보드에 완전히 고유한 전송 메커니즘을 추가했으며, 추가된 사운드 기반 데이터 기능은 해커가 손끝에서 더 많은 연결 옵션을 사용할 수 있음을 의미합니다. 데이터 오버 사운드의 장점은 다음과 같습니다.

<울>
  • 기기에 구애받지 않음:모바일 앱, 웹페이지 또는 오디오 파일만으로도 데이터를 전송할 수 있습니다.
  • 일대다:가청 범위 내에 있는 모든 기기는 한 번의 간단한 트랜잭션으로 데이터를 수신할 수 있습니다.
  • 마찰 없음:페어링, 암호 또는 초기 설정이 필요하지 않음
  • 이 튜토리얼에서는 Chirp SDK를 사용하여 RGB 값을 전송하여 온보드 LED의 색상을 변경하는 방법을 보여줍니다.

    수년간의 연구 덕분에 잡음이 많은 곳에서도 Chirp가 작동합니다. 디코더를 배경음에 대해 견고하게 만들기 위해 노력한 덕분입니다. 여기에서 사운드를 통한 데이터 사용의 이점에 대해 자세히 읽어보십시오.

    여전히 회의적이라면 직접 시도해 보십시오.

    Chirp를 시작하는 것이 그 어느 때보다 쉬워졌습니다...

    시작하기

    아직 등록하지 않았다면 developer.chirp.io에서 Chirp에 등록해야 합니다. 가입하고 나면 애플리케이션에 대한 앱 키, 비밀 및 오디오 구성을 얻을 수 있습니다.

    데이터 수신

    Nano 33 Sense는 온보드 마이크와 함께 제공되므로 Chirp를 사용하여 데이터를 수신하는 데 필요한 것은 Library Manager에서 직접 사용할 수 있는 Chirp SDK뿐입니다.

    라이브러리 관리자를 열고 Chirp SDK를 검색하기만 하면 됩니다. v3.3.0 이상을 설치하면 코딩을 시작할 준비가 된 것입니다.

    도구> 라이브러리 관리

    예제 코드를 열어 시작할 수 있습니다.

    파일> 예제> ChirpSDK> Nano33SenseReceive

    16khz-mono-embedded에 대한 자격 증명을 복사하여 붙여넣어야 합니다. 개발자.chirp.io의 프로토콜을 credentials.h 파일로 가져옵니다.

    예제 코드는 수신된 데이터를 직렬 모니터로 간단히 인쇄합니다. 그러나 onReceivedCallback을 편집하여 온보드 LED를 켜는 동작을 쉽게 변경할 수 있습니다. 기능.

    설정 기능에서 먼저 LED에 연결된 GPIO 핀을 출력으로 설정해야 합니다.

    #define R_LED_PIN 22#define G_LED_PIN 23#define B_LED_PIN 24void setup() { pinMode(R_LED_PIN, OUTPUT); 핀모드(G_LED_PIN, 출력); 핀모드(B_LED_PIN, 출력);}  

    LED를 구동하려면 데이터 페이로드에서 RGB 값을 가져와야 합니다.

    void onReceivedCallback(void *chirp, uint8_t *payload, size_t length,{ if (length> 0) { // 높은 값은 낮은 밝기를 의미하므로 // UINT8_MAX에서 뺍니다. analogWrite(R_LED_PIN, UINT8_MAX - 페이로드 [0]); analogWrite(B_LED_PIN, UINT8_MAX - 페이로드[2]); } else { Serial.println("디코드 실패"); }}  

    이제 아래 오디오 파일을 재생하여 코드를 테스트할 수 있습니다. 각 파일은 LED 색상을 빨간색에서 녹색, 파란색으로 변경해야 합니다.

    다음은 무엇입니까?

    Arduino용 Chirp SDK의 첫 번째 반복은 가청 16khz-mono-embedded에서만 작동합니다. 규약. 앞으로 몇 달 동안 초음파 주파수 근처에서 작동하는 들리지 않는 버전을 출시할 예정입니다. 이를 통해 사람이 들을 수 없는 주파수로 데이터를 전송할 수 있습니다. 예를 들어 노래나 비디오와 같은 기존 오디오에 처프 데이터를 삽입하여 작업을 트리거할 수 있습니다.

    또한 Arduino에서 사운드를 통한 데이터를 활용하는 방법에 대한 더 많은 튜토리얼을 따라갈 것입니다. 자신의 Arduino 프로젝트에서 Chirp를 사용한 위치를 Twitter @chirp로 태그하거나 [email protected]로 연락해 주십시오.

    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    <울>
  • RGB 값을 Nano 33 Sense로 변환
  • RGB 값을 Nano 33 SenseC/C++로 변환
    온보드 LED의 색상을 변경하려면 Chirp를 사용하여 RGB 값을 보냅니다. 이 튜토리얼에 첨부된 사운드 클립을 사용하여 시도하거나 3바이트 배열을 전송하여 직접 수행할 수 있습니다.
    /**----------------- -------------------------------------------------- - Arduino Nano 33 Sense 보드를 사용하여 데이터를 수신하는 예제 코드. @file Nano33SenseReceive.ino @brief https://developers.chirp.io에서 개발자 계정을 만들고 "16khz-mono-embedded" 프로토콜에 대한 키, 비밀 및 구성 문자열을 아래에 정의된 처프에 복사하여 붙여넣습니다. 이 예제는 RGB 값을 듣기 시작하고 온보드 LED의 색상을 변경합니다. 회로:- Arduino Nano 33 BLE 보드 Copyright © 2011-2019, Asio Ltd. All rights reserved. -------------------------------------------------- -----------------*/#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// 전역 변수 ---------- --------------------------static chirp_connect_t *chirp =NULL;short sampleBuffer[BUFFER_SIZE];volatile int samplesRead;// 함수 정의 --- ------------------------------------------ 무효 setupChirp(무효); void chirpErrorHandler(chirp_connect_error_code_t code);void onPDMdata(void);// 메인 ---------------------------------- ----------------------------- 무효 setup(){ Serial.begin(115200);// while (!Serial); 핀모드(R_LED_PIN, 출력); 핀모드(G_LED_PIN, 출력); 핀모드(B_LED_PIN, 출력); setupChirp(); PDM.onReceive(onPDMdata); PDM.setGain(30); if (!PDM.begin(1, SAMPLE_RATE)) { Serial.println("PDM 시작 실패!"); 동안 (1); } analogWrite(R_LED_PIN, UINT8_MAX); analogWrite(G_LED_PIN, UINT8_MAX); analogWrite(B_LED_PIN, UINT8_MAX);} 무효 루프(){ if (samplesRead) { chirp_connect_error_code_t err =chirp_connect_process_shorts_input(chirp, sampleBuffer, samplesRead); chirpErrorHandler(오류); 샘플 읽기 =0; }} 무효 onPDMdata(){ int bytesAvailable =PDM.available(); PDM.read(샘플 버퍼, 바이트 사용 가능); samplesRead =bytesAvailable / sizeof(short);}// 짹짹 -------------------------------------- ------------------------- void onReceptionCallback(void *chirp, uint8_t *payload, size_t 길이, uint8_t 채널){ Serial.println("데이터 수신 ..."); 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) { // 높은 값은 낮은 밝기를 의미하므로 // UINT8_MAX에서 뺍니다. analogWrite(R_LED_PIN, UINT8_MAX - 페이로드[0]); analogWrite(G_LED_PIN, UINT8_MAX - 페이로드[1]); analogWrite(B_LED_PIN, UINT8_MAX - 페이로드[2]); } else { analogWrite(R_LED_PIN, 0); analogWrite(G_LED_PIN, UINT8_MAX); analogWrite(B_LED_PIN, UINT8_MAX); 지연(500); analogWrite(R_LED_PIN, UINT8_MAX); 지연(500); analogWrite(R_LED_PIN, 0); Serial.println("디코딩 실패"); }}void chirpErrorHandler(chirp_connect_error_code_t 코드){ if (code !=CHIRP_CONNECT_OK) { const char *error_string =chirp_connect_error_code_to_string(code); Serial.println(error_string); 출구(42); }} 무효 setupChirp(무효){ 처프 =new_chirp_connect(CHIRP_APP_KEY, CHIRP_APP_SECRET); if (chirp ==NULL) { Serial.println("Chirp 초기화에 실패했습니다."); 반품; } chirp_connect_error_code_t err =chirp_connect_set_config(chirp, CHIRP_APP_CONFIG); chirpErrorHandler(오류); 문자 * 정보 =chirp_connect_get_info(chirp); Serial.println(정보); chirp_connect_free(정보); 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 =chirp_connect_set_input_sample_rate(chirp, SAMPLE_RATE); chirpErrorHandler(오류); err =chirp_connect_set_frequency_correction(chirp, 1.0096); chirpErrorHandler(오류); 오류 =chirp_connect_start(chirp); chirpErrorHandler(오류); Serial.println("Chirp SDK가 초기화되었습니다."); Serial.flush();}

    제조공정

    1. LP 레코드
    2. 센서 데이터와 Raspberry Pi 마이크로프로세서의 통합
    3. 데이터로 무엇을 해야 합니까?!
    4. IoT 비즈니스 시작하기
    5. 에지 분석으로 Industry 4.0 업그레이드
    6. C++ Char 데이터 유형(예제 포함)
    7. 예제를 포함한 8가지 데이터 침해 유형
    8. HMI를 통한 에너지 효율성 향상
    9. 지식으로 디지털 제조 팀의 역량 강화
    10. 실시간 도시 데이터로 혁신이 온다