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

3방향 동시발음이 가능한 Arduino Nano의 생일 축하 멜로디

구성품 및 소모품

Arduino Nano R3
× 1

앱 및 온라인 서비스

Arduino IDE

이 프로젝트 정보

하나의 미니 브레드보드에서 3개의 버저로 Arduino Nano에서 동시성 "생일 축하합니다" 테마를 재생합니다.

우선 - 데모

이것을 USB 전원(컴퓨터뿐만 아니라)에 연결하면 "생일 축하합니다" 멜로디가 무한정 재생됩니다... 거의... 정말 질릴 때까지 =]

BTW, 조명은 해당 채널/부저의 모든 음표 변경과 함께 그대로 깜박입니다.

회로도

아이디어는 납땜이 거의 없는 초소형 장치를 만드는 것이었습니다.

결국 다음과 같은 작은 브레드보드에 필요한 모든 것을 맞출 수 있었습니다.

구멍은 다음과 같은 방식으로 브레드보드 내부에서 연결됩니다.

여기서 트릭은 Arduino Nano 보드가 이러한 브레드보드에 완벽하게 들어맞아서 브레드보드의 양쪽에 몇 가지 추가 구성요소를 연결할 수 있다는 것입니다.

죄송합니다, 여러분... 여기에 다이어그램을 그리기에는 너무 게으르지만 이 경우는 너무 간단하여 이 클로즈업이 모든 것을 파악하기에 충분할 것이라고 확신합니다 =]

보시다시피 여기에서는 Gravitech의 Arduino Nano v3.0 보드를 사용하고 있지만 모든 아날로그에서 사용할 수 있습니다. 여기의 부저와 LED는 매우 평범한 것입니다. 실제로 특별한 매개변수와 일치할 필요는 없습니다.

여기에 있는 저항은 100옴입니다... LED 과부하 보호에 대한 일반적인 "표준"은 220옴이지만... 누가 상관... ¯\_(ツ)_/¯

이 사진에서 아마도 명확하지 않은 유일한 것은 버저의 핀이 다음과 같이 브레드보드에 삽입된다는 것입니다.

또한 가운데 하나가 다른 것보다 큽니다. 이는 "베이스" 음악 채널에 사용되기 때문입니다 ☝🏻

... 농담이야! ^__^ 사운드 기능에 전혀 차이가없는 미친 마우스 합창단처럼 모두 삐걱 거리는 소리 =]

따라서 문제 없이 원하는 경우 3개의 동일한 부저를 사용할 수 있지만 브레드보드의 약간 다른 위치에 배치하고 새 부저 배치에 따라 프로그램 코드에서 출력 핀 번호를 변경해야 합니다.

또한 여기에 또 다른 작은 "해킹"이 있습니다... 어쨌든 우리는 해킹을 하고 있습니다. 여기 아니면 뭐? =] 그래서 여러 Arduino의 I/O를 사용하고 있습니다. 여기에서 접지 로 고정 부저 및 LED용 핀 😱😱 . 네... 맞습니다. 실제로 프로그램에서 Arduino I/O 핀에 대해 "LOW" 상태를 설정하면 Arduino 보드에서 표준 GND 핀을 사용하는 것과 같은 방식으로 이 핀을 사용할 수 있습니다. 멋지죠?;)

프로그램 정보...

Arduino IDE 스케치의 전체 목록은 아래에 나와 있습니다. 그러나 여기에서 다운로드할 수 있는 스케치를 컴파일하려면 추가 "톤" 라이브러리를 설치해야 합니다.

https://www.dropbox.com/s/q1udxg4yi47emeo/Tone.zip?dl=0

(а 등록 "제안" 팝업창이 있는 경우 모서리에 "x" 버튼을 눌러 닫습니다.)

이 라이브러리를 설치하는 가장 쉬운 방법은 다음과 같습니다. Arduino IDE 기본 메뉴에서 스케치 - 라이브러리 포함 - .ZIP 라이브러리 추가...를 선택합니다. 그런 다음 다운로드한 zip 파일을 선택합니다... еasy ¯\_(ツ)_/¯

이 라이브러리는 단일 컨트롤러에서 여러 톤의 동시 생성을 수행하는 데 필요합니다(이 목표를 달성하기 위해 "후드에서" 일부 추가 하드웨어 타이머 및 하드웨어 인터럽트를 사용함). 간단히 말해서 OS가 없는 단일 프로세서 코어에서 일종의 "레드넥 멀티태스킹"입니다. =]

BTW, 여기 라이브러리의 작성자가 있습니다(고마워요 bro! =]):

http://playground.arduino.cc/Profiles/Bhagman

... 및 라이브러리의 GitHub 페이지:

https://github.com/bhagman/Tone

면책 조항 🙂 :
솔직히 말하면, 여기 내 프로그램 코드는 다소 부피가 크고 읽기 어렵습니다. 이는 주로 하나의 선형 명령 흐름에서 동시에 3개의 "독립적인" 멜로디 스레드로 "저글링"해야 하기 때문입니다. 나중에 코드를 리팩토링하여 멜로디를 서로 분리하고 나중에 다른 노래를 재생하는 데 사용할 수 있도록 하려고 생각했지만... 아마 안 할 것 같습니다 =]

행운을 빕니다. 어떤 피드백이든 환영합니다.

끝까지 읽어주셔서 감사합니다 =]

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

코드

<울>
  • 생일 축하합니다
  • 생일 축하합니다Arduino
    톤 라이브러리 설치를 잊지 마세요!!
    #include 톤 솔로;톤 베이스;톤 rythm;const int t =600; // 4분음표 durationconst int tt =t*2;const int t14 =round(t*1/4);const int t24 =round(t*2/4);const int t34 =round(t*3/4); const int 베이스LedPin =15; // 베이스 led 신호 핀(일명 A1) const int rythmLedPin =17; // 리듬 led 신호 핀(일명 A3) const int soloLedPin =19; // 솔로 LED 신호 핀(일명 A5)void wait(Tone t){ while (t.isPlaying()) { } }int bassLedState =LOW;void switchBassLed(){ if (bassLedState ==LOW) BassLedState =HIGH; 그렇지 않으면 BassLedState =낮음; digitalWrite(bassLedPin, BassLedState);}int rythmLedState =LOW; 무효 switchRythmLed(){ if (rythmLedState ==LOW) rythmLedState =HIGH; 그렇지 않으면 rythmLedState =낮음; digitalWrite(rythmLedPin, rythmLedState);}int soloLedState =LOW;void switchSoloLed(){ if (soloLedState ==LOW) soloLedState =HIGH; 그렇지 않으면 솔로 LED 상태 =낮음; digitalWrite(soloLedPin, soloLedState);} 무효 설정(무효){ pinMode(14, OUTPUT); // led 접지 핀(일명 A0) pinMode(16, OUTPUT); // led 접지 핀(일명 A2) pinMode(18, OUTPUT); // led 접지 핀(일명 A4) pinMode(bassLedPin, OUTPUT); // 베이스 LED 신호 핀 pinMode(rythmLedPin, OUTPUT); // 리듬 LED 신호 핀 pinMode(soloLedPin, OUTPUT); // 솔로 led 신호 핀 pinMode(2, OUTPUT); // 솔로 부저 접지 핀 pinMode(9, OUTPUT); // 리듬 부저 접지 핀 solo.begin(6); // 솔로 부저 신호 핀 Bass.begin(12); // 베이스 부저 신호 핀 rythm.begin(0); // 리듬 부저 신호 핀 solo.play(NOTE_D4, t34); 스위치솔로레드(); 기다려(솔로); 솔로.플레이(NOTE_D4, t14); 스위치솔로레드(); 대기(솔로);} 무효 루프(무효){bass.play(NOTE_G3, t); switchBassLed(); rythm.play(NOTE_G4, t24); 스위치 리듬레드(); 솔로.플레이(NOTE_E4, t); 스위치솔로레드(); 대기(리듬); rythm.play(NOTE_B4, t14); 스위치 리듬레드(); 대기(리듬); rythm.play(NOTE_D5, t14); 스위치 리듬레드(); wait(리듬);bass.play(NOTE_B3, t); switchBassLed(); rythm.play(NOTE_G4, t24); 스위치 리듬레드(); 솔로.플레이(NOTE_D4, t); 스위치솔로레드(); 대기(리듬); rythm.play(NOTE_B4, t14); 스위치 리듬레드(); 대기(리듬); rythm.play(NOTE_D5, t14); 스위치 리듬레드(); 대기(리듬);베이스.플레이(NOTE_D4, t); switchBassLed(); rythm.play(NOTE_G4, t24); 스위치 리듬레드(); 솔로.플레이(NOTE_G4, t); 스위치솔로레드(); 대기(리듬); rythm.play(NOTE_B4, t14); 스위치 리듬레드(); 대기(리듬); rythm.play(NOTE_D5, t14); 스위치 리듬레드(); 대기(리듬);베이스.플레이(NOTE_D4, t); switchBassLed(); rythm.play(NOTE_D5, t24); 스위치 리듬레드(); 솔로.플레이(NOTE_FS4, tt); 스위치솔로레드(); 대기(리듬); rythm.play(NOTE_FS5, t14); 스위치 리듬레드(); 대기(리듬); rythm.play(NOTE_A5, t14); 스위치 리듬레드(); 대기(리듬);베이스.플레이(NOTE_FS4, t); switchBassLed(); rythm.play(NOTE_D5, t24); 스위치 리듬레드(); 대기(리듬); rythm.play(NOTE_FS5, t14); 스위치 리듬레드(); 대기(리듬); rythm.play(NOTE_A5, t14); 스위치 리듬레드(); 대기(리듬);베이스.플레이(NOTE_A4, t); switchBassLed(); rythm.play(NOTE_D5, t24); 스위치 리듬레드(); 솔로.플레이(NOTE_D4, t34); 스위치솔로레드(); 대기(리듬); rythm.play(NOTE_FS5, t14); 스위치 리듬레드(); 대기(리듬); rythm.play(NOTE_A5, t14); 스위치 리듬레드(); 솔로.플레이(NOTE_D4, t14); 스위치솔로레드(); 대기(리듬);베이스.플레이(NOTE_D4, t); switchBassLed(); rythm.play(NOTE_D5, t24); 스위치 리듬레드(); 솔로.플레이(NOTE_E4, t); 스위치솔로레드(); 대기(리듬); rythm.play(NOTE_FS5, t14); 스위치 리듬레드(); 대기(리듬); rythm.play(NOTE_A5, t14); 스위치 리듬레드(); 대기(리듬); Bass.play(NOTE_FS4, t); switchBassLed(); rythm.play(NOTE_D5, t24); 스위치 리듬레드(); 솔로.플레이(NOTE_D4, t); 스위치솔로레드(); 대기(리듬); rythm.play(NOTE_FS5, t14); 스위치 리듬레드(); 대기(리듬); rythm.play(NOTE_A5, t14); 스위치 리듬레드(); 대기(리듬); Bass.play(NOTE_A4, t); switchBassLed(); rythm.play(NOTE_D5, t24); 스위치 리듬레드(); 솔로.플레이(NOTE_A4, t); 스위치솔로레드(); 대기(리듬); rythm.play(NOTE_FS5, t14); 스위치 리듬레드(); 대기(리듬); rythm.play(NOTE_A5, t14); 스위치 리듬레드(); 대기(리듬); Bass.play(NOTE_G3, t); switchBassLed(); rythm.play(NOTE_G4, t24); 스위치 리듬레드(); 솔로.플레이(NOTE_G4, tt); 스위치솔로레드(); 대기(리듬); rythm.play(NOTE_B4, t14); 스위치 리듬레드(); 대기(리듬); rythm.play(NOTE_D5, t14); 스위치 리듬레드(); wait(리듬);bass.play(NOTE_B3, t); switchBassLed(); rythm.play(NOTE_G4, t24); 스위치 리듬레드(); 대기(리듬); rythm.play(NOTE_B4, t14); 스위치 리듬레드(); 대기(리듬); rythm.play(NOTE_D5, t14); 스위치 리듬레드(); 대기(리듬); Bass.play(NOTE_D4, t); switchBassLed(); rythm.play(NOTE_G4, t24); 스위치 리듬레드(); 솔로.플레이(NOTE_D4, t34); 스위치솔로레드(); 대기(리듬); rythm.play(NOTE_B4, t14); 스위치 리듬레드(); 대기(리듬); rythm.play(NOTE_D5, t14); 스위치 리듬레드(); 솔로.플레이(NOTE_D4, t14); 스위치솔로레드(); wait(리듬);bass.play(NOTE_G3, t); switchBassLed(); rythm.play(NOTE_G4, t24); 스위치 리듬레드(); 솔로.플레이(NOTE_D5, t); 스위치솔로레드(); 대기(리듬); rythm.play(NOTE_B4, t14); 스위치 리듬레드(); 대기(리듬); rythm.play(NOTE_D5, t14); 스위치 리듬레드(); 대기(리듬); Bass.play(NOTE_B3, t); switchBassLed(); rythm.play(NOTE_G4, t24); 스위치 리듬레드(); 솔로.플레이(NOTE_B4, t); 스위치솔로레드(); 대기(리듬); rythm.play(NOTE_B4, t14); 스위치 리듬레드(); 대기(리듬); rythm.play(NOTE_D5, t14); 스위치 리듬레드(); 대기(리듬); Bass.play(NOTE_D4, t); switchBassLed(); rythm.play(NOTE_G4, t24); 스위치 리듬레드(); 솔로.플레이(NOTE_G4, t); 스위치솔로레드(); 대기(리듬); rythm.play(NOTE_B4, t14); 스위치 리듬레드(); 대기(리듬); rythm.play(NOTE_D5, t14); 스위치 리듬레드(); 대기(리듬); Bass.play(NOTE_C4, t); switchBassLed(); rythm.play(NOTE_C5, t24); 스위치 리듬레드(); 솔로.플레이(NOTE_FS4, t); 스위치솔로레드(); 대기(리듬); rythm.play(NOTE_E5, t14); 스위치 리듬레드(); 대기(리듬); rythm.play(NOTE_G5, t14); 스위치 리듬레드(); 대기(리듬); Bass.play(NOTE_E4, t); switchBassLed(); rythm.play(NOTE_C5, t24); 스위치 리듬레드(); 솔로.플레이(NOTE_E4, t); 스위치솔로레드(); 대기(리듬); rythm.play(NOTE_E5, t14); 스위치 리듬레드(); 대기(리듬); rythm.play(NOTE_G5, t14); 스위치 리듬레드(); 대기(리듬); Bass.play(NOTE_G4, t); switchBassLed(); rythm.play(NOTE_C5, t24); 스위치 리듬레드(); 솔로.플레이(NOTE_C5, t34); 스위치솔로레드(); 대기(리듬); rythm.play(NOTE_E5, t14); 스위치 리듬레드(); 대기(리듬); rythm.play(NOTE_G5, t14); 스위치 리듬레드(); 솔로.플레이(NOTE_C5, t14); 스위치솔로레드(); wait(리듬);bass.play(NOTE_G3, t); switchBassLed(); rythm.play(NOTE_G4, t24); 스위치 리듬레드(); 솔로.플레이(NOTE_B4, t); 스위치솔로레드(); 대기(리듬); rythm.play(NOTE_B4, t14); 스위치 리듬레드(); 대기(리듬); rythm.play(NOTE_D5, t14); 스위치 리듬레드(); 대기(리듬); Bass.play(NOTE_D3, t); switchBassLed(); rythm.play(NOTE_G4, t24); 스위치 리듬레드(); 솔로.플레이(NOTE_G4, t); 스위치솔로레드(); 대기(리듬); rythm.play(NOTE_B4, t14); 스위치 리듬레드(); 대기(리듬); rythm.play(NOTE_D5, t14); 스위치 리듬레드(); 대기(리듬); Bass.play(NOTE_FS3, t); switchBassLed(); rythm.play(NOTE_D5, t24); 스위치 리듬레드(); 솔로.플레이(NOTE_A4, t); 스위치솔로레드(); 대기(리듬); 대기(리듬); rythm.play(NOTE_FS5, t14); 스위치 리듬레드(); 대기(리듬); rythm.play(NOTE_A5, t14); 스위치 리듬레드(); 대기(리듬); Bass.play(NOTE_G3, t); switchBassLed(); rythm.play(NOTE_G4, t24); 스위치 리듬레드(); 솔로.플레이(NOTE_G4, tt); 스위치솔로레드(); 대기(리듬); rythm.play(NOTE_B4, t14); 스위치 리듬레드(); 대기(리듬); rythm.play(NOTE_D5, t14); 스위치 리듬레드(); wait(리듬);bass.play(NOTE_B3, t); switchBassLed(); rythm.play(NOTE_G4, t24); 스위치 리듬레드(); 대기(리듬); rythm.play(NOTE_B4, t14); 스위치 리듬레드(); 대기(리듬); rythm.play(NOTE_D5, t14); 스위치 리듬레드(); 대기(리듬); 솔로.플레이(NOTE_D4, t34); 스위치솔로레드(); 기다려(솔로); 솔로.플레이(NOTE_D4, t14); 스위치솔로레드(); 기다려(솔로);}

    제조공정

    1. K30 센서로 CO2 모니터링
    2. 1Sheeld/Arduino를 사용한 청각 장애인용 통신
    3. Arduino로 코인 억셉터 제어
    4. 꽃 - Arduino Nano, CrazyCircuits, DFRobot
    5. Bluetooth가 탑재된 Arduino로 LED 제어!
    6. Arduino 또는 ESP8266이 있는 정전 용량 지문 센서
    7. Nextion 디스플레이로 재생
    8. Nunchuk 제어 로봇 팔(Arduino 포함)
    9. Arduino Nano:조이스틱으로 2개의 스테퍼 모터 제어
    10. Arduino Nano가 있는 휴대용 가이거 계수기