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

조명과 음색이 포함된 미국 국가

구성품 및 소모품

Arduino Nano R3
여기에는 4개의 서로 다른 프로세서가 있습니다. 저는 328P(이전 부트로더)를 사용합니다.
× 1
부저
오래된 부저는 16옴 부저를 사용했습니다.
× 1
SparkFun 푸시버튼 스위치 12mm
내가 사용한 정확한 것은 아니지만 제 것은 6x6x6mm였습니다.
× 2
로커 스위치 250V 3A
모든 전원 스위치가 작동합니다. 스위치가 있는 9Volt 케이스를 사용했는데 케이스에 숨겨져 있어서 외부에 스위치를 추가했습니다. 로커 스위치를 찾으십시오.
× 1
저항 330옴
모든 저항은 작동하지만 LED 계산을 수행하고 LED 출력 또는 Nano의 핀당 최대 40mA. 330옴은 모든 Arduino 스타터 팩에서 거의 표준입니다.
× 3
LED(일반)
6개의 LED 또는 원하는 만큼. 빨간색 2개, 흰색 2개, 파란색 2개. 내가 사용한 빨간색 LED는 2.2V이고 다른 LED는 각각 3.2V입니다. 결과는 330옴을 사용하여 9.7mA 및 6.7mA입니다. (출력당 2개를 사용하고 있으므로 최대 핀 출력 전류의 절반인 ~13mA 및 ~20mA임을 기억하십시오)
× 6
SparkFun 납땜 가능 브레드보드 - 미니
어떤 브레드보드라도 작동할 수 있습니다. 납땜 또는 납땜 없이 어떻게 보일지 문의하십시오. 또는 구멍과 나무를 뚫고 부품을 제자리에 핫 풀로 붙이기만 하면 됩니다.
× 1
9V 배터리(일반)
많은 전원 옵션. 케이스와 스위치가 있는 9볼트 배터리를 사용했습니다. Nano 입력 요구 사항을 충족하는 경우 USB 케이블 또는 4x AA 배터리 팩만 사용할 수 있습니다. 나는 별도의 스위치를 사용했기 때문에 on/off 스위치가 있는 것에 추가 비용을 지불한 것을 후회합니다.
× 1

필요한 도구 및 기계

납땜 인두(일반)
납땜을 원하는 경우 귀하에게 달려 있습니다.

이 프로젝트 정보

저는 작년에 크리스마스 조명과 음악 프로젝트를 위한 프로그래밍을 시작했습니다. 이것은 누군가가 나에게 부탁했고 그것이 재미있을 것이라고 생각한 사이드 프로젝트입니다. 처음에는 조명이 있는 한 곡의 노래로 만들 예정이었으나 형편없었습니다.

동영상에 문제가 있는 경우를 대비하여 다음 링크를 참조하세요.

https://youtu.be/C2jyn80Mjus

이 프로젝트는 Arduino Nano를 사용합니다. 이 프로젝트에서는 Tone() 기능을 사용하여 두 개의 다른 노래를 만들기 위해 두 개의 다른 푸시 버튼을 사용합니다. 하나는 '충전' 소리이고 다른 하나는 '미국 국가'입니다. 버튼을 누를 때까지 효과에 대한 임의의 조명을 수행합니다.

이 스케치에서 저는 기능을 작성하는 과정을 단순화하기 위해 기능을 많이 사용하지만 조명/사운드 프로세스를 완전히 제어할 수 있도록 유지하므로 내가 듣고 보고 있는 것이 마음에 들지 않으면 약간의 어려움을 겪을 수 있습니다. .

이 프로젝트를 게시하는 나의 목표는 디자인/코딩에서 배운 몇 가지를 공유하여 유사한 작업을 수행하는 경우 도움이 될 수 있도록 하는 것입니다.

다음은 시스템과 코드를 테스트할 때 브레드보드에 표시된 초기 디자인의 모습입니다.

다음은 전원 시스템 설정입니다. 저는 USB 벽이나 컴퓨터 전원에 의존하지 않고 크기에 대해 9Volt 배터리를 선택합니다.

내부에서 모든 것을 납땜한 후의 모습입니다. 상단 커버만 납땜한 다음 나중에 측면을 추가하는 것이 좋습니다.

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

코드

<울>
  • USA_ANTHEM_Updated.ino
  • USA_ANTHEM_Updated.inoArduino
    LED, 충전, 톤, 모든 기능을 갖춘 스타 스팽글 배너. 복사하여 붙여넣기만 하면 됩니다.<사전>/*LED가 있는 별 스팽글 배너 작성:Ryan Aebi 2018년 6월 코드 구조-다른 기능을 참조하는 기본 루프-푸시 버튼은 별 스팽글 배너를 수행하거나 조명으로 소리를 충전합니다.별 스팽글 배너 메모-기능에는 다음이 할당된 메모가 있습니다. 주파수(Hz), 지속 시간(n 단위 시간)에 대한 정수 - 기능 작성 시 LED는 반무작위로 선택 - 각 재생마다 음높이가 증가하도록 기능 내장(시작/하드웨어 재설정 시 일반 음높이로 재설정) - 음정 계산은 전체의 1/12 또는 0.06 버튼 디자인/배선입니다. 각 채널에 3개의 빨간색, 파란색 및 녹색 LED 세트(각 2개 병렬 포함)-외부 재설정 버튼-충전용 노래 중단 노래 시작 버튼* ///**************************************************** *************** 선언된 정수 const int ChargeButton=3; //(Nano D3) uno 핀 2는 인터럽트 핀이어야 합니다 const int StartButton=5; //(나노 D5) 우노 핀 4 const int BuzzerPin=9; //(나노 D9) 우노 핀 9 const int RedLED=6; //(나노 D6) 우노 핀 6 const int WhiteLED=7; //(나노 D7) 우노 핀 7 const int BlueLED=8; //(나노 D8) 우노 핀 8 int n=1000; //이 값은 노래마다 변경되는 정수 선언 int DurationOn=n; //나중에 정수를 선언하면 stacatto 계산에 사용됩니다. int DurationRest=n; //나중에 정수를 선언하면 stacatto 계산에 사용됩니다. //x &y의 합은 1이어야 합니다. 나중에 float x=.66; // float에서 시간에 대한 float 선언 y=.34; //오프 시간에 대한 float 선언 //버튼 입력을 기다리는 동안 조명이 무작위로 깜박이는 비율 int Twinkle_Rate=250; //버튼이 급격히 증가하면 시간의 100%가 응답하지 않을 수 있음을 참고하십시오. //낮은 깜박임 비율은 버튼 누름 응답을 향상시킵니다. //버튼 상태에 대한 정수를 설정합니다. int StartButtonState; int ChargeButtonState; //중간 C는 4C(B 플랫 &E 플랫)입니다. int Note1=233; //3Bb 233Hz int Note2=294; //4D 294Hz int Note3=330; //4E 330Hz int Note4=349; //4F 349Hz int Note5=392; //4G 392Hz int Note6=440; //4A 440Hz int Note7=466; //4Bb 466Hz int Note8=523; //5C 523Hz int Note9=587; //5D 587Hz int Note10=622; //5Eb 622Hz int Note11=698; //5F 698Hz //******************************************** ******************충전 기능/Songvoid Charge(){ n=600; //노래가 진행되는 속도 //형식:쓰기 핀 켜기, 특정 주파수에서 톤 음악을 동기화하는 톤, // 켜져 있던 핀을 끄고 휴식을 위한 지연 digitalWrite(RedLED, HIGH); 톤(BuzzerPin, 392, n/3); 지연(n/3); 디지털 쓰기(빨간색 LED, 낮음); 지연(70); 디지털 쓰기(백색LED, 높음); 톤(BuzzerPin, 523, n/3); 지연(n/3); digitalWrite(백색LED, LOW); 지연(70); digitalWrite(BlueLED, HIGH); 톤(BuzzerPin, 659, n/3); 지연(n/3); digitalWrite(BlueLED, LOW); 지연(70); 디지털 쓰기(빨간색 LED, 높음); 디지털 쓰기(백색LED, 높음); digitalWrite(BlueLED, HIGH); 톤(BuzzerPin, 784, n*3/4); 지연(n*3/4); digitalWrite(BlueLED, LOW); 디지털 쓰기(빨간색 LED, 낮음); digitalWrite(백색LED, LOW); 지연(70); digitalWrite(BlueLED, HIGH); 톤(BuzzerPin, 659, n/4); 지연(n/4); digitalWrite(BlueLED, LOW); 지연(70); 디지털 쓰기(빨간색 LED, 높음); 디지털 쓰기(백색LED, 높음); digitalWrite(BlueLED, HIGH); 톤(BuzzerPin, 784, n*2); 지연(n*2); digitalWrite(BlueLED, LOW); 디지털 쓰기(빨간색 LED, 낮음); digitalWrite(백색LED, LOW); 지연(70);}//********************************************** ********************SingleDW functionvoid SingleDWwithNote(int HZ, int TurnOn, int Duration, int Staccato){ //음이 있는 헤르츠(Note# 참조) / /turn on=조정될 핀(빨간색/흰색/파란색 LED) //지속 시간은 //Staccato 1=예, 0=아니요로 음이 약간 짧아지거나 int x 값이 짧은 일시 중지 if (Staccato==1){DurationOn=Duration*x;} // 톤 및 조명이 켜져 있는 시간은 DurationShort입니다. else if (Staccato==0){DurationOn=Duration;} digitalWrite(TurnOn, HIGH); 톤(BuzzerPin, HZ, DurationOn); 지연(DurationOn); digitalWrite(켜기, 낮음); if (스타카토==1) { DurationRest=Duration*y; 지연(DurationRest); }}//************************************************ ****************미국 국가 기능/Songvoid USNationalAnthem(){ n=577; // 사운드 재생 속도 계산:60,000(ms/BPM 계수) / 104 BPM =577 ms /* 4분 음표 값은 n*2 8분 음표 값의 n 반음표 값입니다. n/2 점 8분 음표는 n*3입니다. /4 */ //x &y 정수는 스타카토/음표 뒤에 쉼표를 추가하기 위한 것입니다. //x+y는 =1 또는 int여야 합니다. n rate는 제외됩니다. // x를 낮추고 y를 증가시켜 음표를 더 뚜렷하고 경쾌하고 경쾌하게 만듭니다. x=.92; //true stacatio는 약 1/2 또는 2/3 값이므로 true staccato y=.08의 경우 x 값은 약 .5에서 .7입니다. //1.00-.92(x 값) =.08 //막대 1-5, 라인 1 SingleDWwithNote(Note4, RedLED, n*3/4, 1); SingleDWwithNote(Note2, WhiteLED, n/4, 1); SingleDWwithNote(Note1, RedLED, n, 1); SingleDWwithNote(Note2, WhiteLED, n, 1); SingleDWwithNote(Note4, RedLED, n, 1); SingleDWwithNote(Note7, WhiteLED, n*2, 1); SingleDWwithNote(Note9, BlueLED, n*3/4, 1); SingleDWwithNote(Note8, WhiteLED, n/4, 1); SingleDWwithNote(Note7, RedLED, n, 1); SingleDWwithNote(Note2, WhiteLED, n, 1); SingleDWwithNote(Note3, BlueLED, n, 1); SingleDWwithNote(Note4, RedLED, n*2, 1); SingleDWwithNote(Note4, RedLED, n/2, 1); SingleDWwithNote(Note4, RedLED, n/2, 1); //bar6-9 라인 2 SingleDWwithNote(Note9, BlueLED, n*3/2, 1); SingleDWwithNote(Note8, WhiteLED, n/2, 1); SingleDWwithNote(Note7, RedLED, n, 1); SingleDWwithNote(Note6, BlueLED, n*2, 1); SingleDWwithNote(Note5, WhiteLED, n/2, 1); SingleDWwithNote(Note6, BlueLED, n/2, 1); SingleDWwithNote(Note7, RedLED, n, 1); SingleDWwithNote(Note7, RedLED, n, 1); SingleDWwithNote(Note4, BlueLED, n, 1); SingleDWwithNote(Note2, WhiteLED, n, 1); SingleDWwithNote(Note1, BlueLED, n, 1); SingleDWwithNote(Note4, RedLED, n*3/4, 1); SingleDWwithNote(Note2, WhiteLED, n/4, 1); //막대 10-13 라인 3 SingleDWwithNote(Note1, RedLED, n, 1); SingleDWwithNote(Note2, WhiteLED, n, 1); SingleDWwithNote(Note4, RedLED, n, 1); SingleDWwithNote(Note7, WhiteLED, n*2, 1); SingleDWwithNote(Note9, BlueLED, n*3/4, 1); SingleDWwithNote(Note8, WhiteLED, n/4, 1); SingleDWwithNote(Note7, RedLED, n, 1); SingleDWwithNote(Note2, WhiteLED, n, 1); SingleDWwithNote(Note3, BlueLED, n, 1); SingleDWwithNote(Note4, RedLED, n*2, 1); SingleDWwithNote(Note4, RedLED, n/2, 1); SingleDWwithNote(Note4, RedLED, n/2, 1); //막대 14-17, 4행, 페이지 1 끝 SingleDWwithNote(Note9, BlueLED, n*3/2, 1); SingleDWwithNote(Note8, WhiteLED, n/2, 1); SingleDWwithNote(Note7, RedLED, n, 1); SingleDWwithNote(Note6, BlueLED, n*2, 1); SingleDWwithNote(Note5, WhiteLED, n/2, 1); SingleDWwithNote(Note6, BlueLED, n/2, 1); SingleDWwithNote(Note7, RedLED, n, 1); SingleDWwithNote(Note7, RedLED, n, 1); SingleDWwithNote(Note4, BlueLED, n, 1); SingleDWwithNote(Note2, WhiteLED, n, 1); SingleDWwithNote(Note1, RedLED, n, 1); SingleDWwithNote(Note9, BlueLED, n/2, 1); SingleDWwithNote(Note9, BlueLED, n/2, 1); //막대 18-21, 5행, 2페이지 시작 SingleDWwithNote(Note9, BlueLED, n, 1); SingleDWwithNote(Note10, RedLED, n, 1); SingleDWwithNote(Note11, WhiteLED, n, 1); SingleDWwithNote(Note11, WhiteLED, n*2, 1); SingleDWwithNote(Note10, RedLED, n/2, 1); SingleDWwithNote(Note9, BlueLED, n/2, 1); SingleDWwithNote(Note8, WhiteLED, n, 1); SingleDWwithNote(Note9, BlueLED, n, 1); SingleDWwithNote(Note10, RedLED, n, 1); SingleDWwithNote(Note10, RedLED, n*2, 1); SingleDWwithNote(Note10, RedLED, n, 1); //막대 22-25, 6행 SingleDWwithNote(Note9, WhiteLED, n*3/2, 1); SingleDWwithNote(Note8, BlueLED, n/2, 1); SingleDWwithNote(Note7, WhiteLED, n, 1); SingleDWwithNote(Note6, RedLED, n*2, 1); SingleDWwithNote(Note5, BlueLED, n/2, 1); SingleDWwithNote(Note6, RedLED, n/2, 1); SingleDWwithNote(Note7, WhiteLED, n, 1); SingleDWwithNote(Note2, BlueLED, n, 1); SingleDWwithNote(Note3, RedLED, n, 1); SingleDWwithNote(Note4, WhiteLED, n*2, 1); SingleDWwithNote(Note4, RedLED, n, 1); n=n*1.08; //60,000 / 96bpm=625ms; 약간 지연됨 ​​//막대 26-28, 7행 SingleDWwithNote(Note7, WhiteLED, n, 1); SingleDWwithNote(Note7, WhiteLED, n, 1); SingleDWwithNote(Note7, WhiteLED, n/2, 1); SingleDWwithNote(Note6, BlueLED, n/2, 1); SingleDWwithNote(Note5, RedLED, n, 1); SingleDWwithNote(Note5, RedLED, n, 1); SingleDWwithNote(Note5, RedLED, n, 1); SingleDWwithNote(Note8, WhiteLED, n, 1); SingleDWwithNote(Note10, RedLED, n/2, 1); SingleDWwithNote(Note9, BlueLED, n/2, 1); SingleDWwithNote(Note8, WhiteLED, n/2, 1); SingleDWwithNote(Note7, RedLED, n/2, 1); //막대 29-30 SingleDWwithNote(Note7, RedLED, n, 1); SingleDWwithNote(Note6, BlueLED, n*2, 1); // SingleDWwithNote(Note4, RedLED, n/2, 1)를 유지하기 위한 2x; SingleDWwithNote(Note4, RedLED, n/2, 1); SingleDWwithNote(Note7, BlueLED, n*3/2, 1); SingleDWwithNote(Note8, WhiteLED, n/2, 1); SingleDWwithNote(Note9, BlueLED, n/2, 1); SingleDWwithNote(Note10, RedLED, n/2, 1); n=n*1.2; //큰 지연 //노래의 31-34 마디 끝 SingleDWwithNote(Note11, WhiteLED, n*2, 1); //무료 SingleDWwithNote(Note7, RedLED, n/2, 1)에 대한 추가 보류; SingleDWwithNote(Note8, WhiteLED, n/2, 1); SingleDWwithNote(Note9, BlueLED, n*3/2, 1); SingleDWwithNote(Note10, RedLED, n/2, 1); SingleDWwithNote(Note8, WhiteLED, n, 1); SingleDWwithNote(Note7, RedLED, n*3, 1); //3개의 값만 유지 //모든 음표를 3단계로 정렬 //1.06 음악 이론에서 파생. 헤르츠 단위로 메모를 한 다음 //아래의 메모(날카롭고 평평한 소리는 메모로 계산)로 모두 1.06으로 나눕니다. //주파수 변경을 피하기 위해 이 다음 단락을 삭제하거나 원하는 경우 변경할 수 있습니다. Note1=Note1 *1.06*1.06*1.06; 참고2=참고2*1.06*1.06*1.06; 주3=주3*1.06*1.06*1.06; 참고4=참고4*1.06*1.06*1.06; 참고5=참고5*1.06*1.06*1.06; 참고6=참고6*1.06*1.06*1.06; 참고7=참고7*1.06*1.06*1.06; 참고8=참고8*1.06*1.06*1.06; 참고9=참고9*1.06*1.06*1.06; 참고10=참고10*1.06*1.06*1.06; 참고11=참고11*1.06*1.06*1.06;}//**************************************** *************************Twinkle void Twinkle(int Twinkle_Time) //()에 숫자를 넣으면 깜박임이 발생하는 시간을 나타냅니다.{ //built 이 함수는 다른 용도로 사용하기 때문에 이상한 계산을 시작합니다. //time&rate를 더 작은 정수로 변경합니다. 프런트 엔드는 Twinkle_Time=Twinkle_Time/Twinkle_Rate를 반올림합니다. // 이 경우 Tiwkle Time은 =Twinkle Rate이므로 값은 1 for(Twinkle_Time;Twinkle_Time>0;Twinkle_Time--) //값이 1이므로 한 번만 처리 { int B=random(1,4); // 1, 2 또는 3의 임의의 정수 int C=random(1,4); //1, 2 또는 3의 임의의 정수 //두 정수가 동일하면 문제 없음, 하나의 LED만 켜지고 임의성에 추가 //특정 색상 LED에서 실행되도록 각 정수를 평가 if(B==1){ 디지털 쓰기(빨간색 LED, 높음);} if(B==2){디지털 쓰기(흰색 LED, 높음);} if(B==3){디지털 쓰기(파란색 LED, 높음);} if(C==1){디지털 쓰기( RedLED, HIGH);} if(C==2){digitalWrite(WhiteLED, HIGH);} if(C==3){digitalWrite(BlueLED, HIGH);} delay(Twinkle_Rate);// LED를 일정 시간 동안 켜 둡니다. 시간을 설정한 다음 // 해당 LED를 로우로 씁니다. 콜드 가능하면 단순화하고 3개의 로우를 모두 쓰면 타이밍 속도가 빨라질 수 있습니다. if(B==1){digitalWrite(RedLED, LOW);} if(B==2){digitalWrite(WhiteLED, LOW);} if(B==3){digitalWrite(BlueLED, LOW);} if(C==1){digitalWrite(RedLED, LOW);} if(C==2){digitalWrite(WhiteLED, LOW);} if(C==3) {digitalWrite(BlueLED, LOW);} }//**************************************** *************************Setupvoid setup(){ pinMode(ChargeButton, INPUT_PULLUP); //입력으로 입력하고 버튼에 대한 내부 풀업 저항을 활성화합니다. pinMode(StartButton, INPUT_PULLUP); //입력으로 입력하고 버튼에 대한 내부 풀업 저항 활성화 pinMode(RedLED, OUTPUT); //출력으로 설정된 LED pinMode(WhiteLED, OUTPUT); //출력으로 설정된 LED pinMode(BlueLED, OUTPUT); //LED를 출력으로 설정 pinMode(BuzzerPin, OUTPUT); //출력으로 설정된 부저 //digitalWrite(ChargeButton, HIGH); 풀업으로 활성화되어 있으므로 필요하지 않습니다. 단지 중복된 //digitalWrite(StartButton, HIGH); 풀업으로 활성화되어 있기 때문에 필요하지 않으며, // 오류를 피하기 위해 모든 LED를 LOW로 설정합니다. 내 디자인의 경우 HIGH=ON, LOW=OFF digitalWrite(RedLED, LOW); digitalWrite(백색LED, LOW); digitalWrite(BlueLED, LOW); } //**************************************************** ***************Main Loopvoid loop(){ //버튼 상태를 읽음, 핀이 하이로 구성된 내부 저항에 연결됨 //핀을 눌렀을 때 핀이 로우가 됨 StartButtonState =digitalRead(StartButton); //low=눌림 ChargeButtonState =digitalRead(ChargeButton); //low=pressed //낮은 것으로 저항된 첫 번째 기능 핀을 수행하기 위한 정수에 대한 값 //버튼 읽기를 위한 샘플링 속도는 int twinkle_rate(.25초) if (StartButtonState==LOW){USNationalAnthem();} else if (ChargeButtonState==LOW){Charge();} else{Twinkle(Twinkle_Rate);} // 핀이 눌려 있지 않으면 깜박입니다! 또... 또... 또... }

    회로도

    브레드보드를 ​​사용한 전기 연결 표시 납땜 없이 배선 연결 표시 선을 따라가세요! 각 품목의 비용, 총 비용 및 구입처를 표시합니다.

    제조공정

    1. 스위치가 있는 회로
    2. 공휴일 조명
    3. 로션 티슈
    4. Acceed:4개의 SFP 포트가 있는 12포트 기가비트 스위치
    5. Raspberry Pi로 온도 모니터링
    6. FS2020용 Arduino가 있는 스위치/LED 패널
    7. EXAMPLE이 있는 C++ Switch Case 문
    8. switch…case in C(C의 Switch 문) 및 예제
    9. 예제가 있는 Java Switch-Case 문
    10. MEP National Network™는 소수 민족 소유 제조업체와 연결됩니다.