제조공정
| × | 1 |
|
하나의 미니 브레드보드에서 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="코드">#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); 스위치솔로레드(); 기다려(솔로);}
제조공정
구성품 및 소모품 Arduino UNO × 1 Microchip Technology ATtiny85 × 1 전해 디커플링 커패시터 - 10uF/25V × 1 점퍼 와이어 M/M × 1 이 프로젝트 정보 저는 다른 위치에서 여러 센서 데이터를 읽어야 하는 프로젝트를 진행 중입니다. 여기에는 몇 개의 PWM 핀만 필요하므로 여러 Arduino Uno를 사용하는 것은 비용이 많이 들고 불필요합니다. 그래서 Arduino Uno 개발 보드 대신 A
구성품 및 소모품 Arduino Nano R3 모든 arduino를 사용할 수 있지만 보호막은 나노용으로 제작되었습니다. × 1 전자석 12v 25mm 직경. × 1 선형 홀 효과 센서 49E 홀 효과 스위치를 사용하지 마십시오. × 1 달링턴 고전력 트랜지스터 팁 120 × 1 저항 1k 옴 × 1 1N4007 – 고전압, 고전류 정격 다이오드 × 1 전원 공급 장치 12V 1A × 1 브레드보드