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

Arduino Audio Reactive Desk Light

구성품 및 소모품

Arduino Nano R3
× 1
사운드 모듈
× 1
브레드보드(일반)
× 1
점퍼 와이어(일반)
× 1
주소 지정 가능 LED
× 1
이케아 DROPPAR 항아리
× 1
작은 길이의 PVC 파이프
× 1

필요한 도구 및 기계

납땜 인두(일반)

앱 및 온라인 서비스

Arduino IDE

이 프로젝트 정보

HELLO WORLD!!

안녕! 이 빌드에서는 간단한 구성 요소와 몇 가지 기본 Arduino 를 사용하여 모든 소리와 음악에 맞춰 춤추는 멋진 조명을 만들 것입니다. 프로그램 작성. 게임을 할 때, 음악을 들을 때, 그리고 실제로 소리를 내는 그 밖의 모든 것을 할 때 책상 위에 서 있을 때 굉장한 효과를 줍니다. 가자!

유튜버의 "Natural Nerd"를 바탕으로 제가 팔로우하는 프로젝트입니다. 이것은 프로젝트의 내 버전입니다. 모든 크레딧은 그들에게 돌아가며 프로젝트 수행 방법에 대한 세부 정보를 제공한 것에 대해 큰 박수를 보냅니다.

유튜브 링크

1단계:주요 공급품

가장 먼저 해야 할 일:어떤 종류의 공급품이 필요하고 비용은 얼마입니까? 글쎄, 그것들은 대부분 선택 사항이며 많은 즉흥 연주로 만들 수 있습니다. 그럼에도 불구하고 이 가이드를 따르려면 몇 가지 핵심 항목이 필요합니다.

<울>
  • Arduino 나노 (또는 동등하게 작은 Arduino 유형) (RM 12.50 구매 링크)
  • <울>
  • 소리 감지기 모듈 (RM 5.90 구매 링크)
  • <울>
  • 5볼트 전원 공급 장치 (또는 스텝다운 모듈이 있는 12볼트)
  • <울>
  • 개별 주소 지정 가능 LED 스트립 당 60 led. 측정기(구매 링크)
  • 원하는 모양에 따라 스트립을 다르게 배열하거나 다른 방식으로 빛을 확산할 수 있습니다. 창의력을 발휘할 수 있는 곳입니다. 내 접근 방식이 마음에 들면 다음 항목을 사용했습니다.

    <울>
  • 가장 높은 IKEA Droppar 항아리 (IKEA 링크)
  • <울>
  • 작은 길이의 PVC 파이프
  • <울>
  • 폼 보드
  • <울>
  • 핫 글루건
  • 내가 고려한 모든 것은 당신이 가서 품목을 사는 상점에 따라 약 RM 83.30를 소비했습니다. LED 스트립은 단 1 미터에 대해 RM 40의 비용이 드는 가장 비싼 부품이었습니다.

    2단계:구성 요소 강화

    구성 요소에 전원을 공급하는 것은 간단한 방법입니다. Arduino Nano의 USB 케이블을 사용하여 PC에 직접 연결합니다. AC-DC 전원과 같은 외부 전원 공급 장치를 사용하는 경우 회로에 흐르는 전류의 양을 줄이는 데 도움이 되는 스텝 다운 모듈이 필요합니다. 그렇지 않으면 사용하지 않고 연결된 구성 요소를 포함하여 Arduino를 태울 가능성이 매우 높을 수 있습니다.

    쇼의 스타는 사운드 감지기 모듈입니다. 이것은 Arduino에 아날로그 신호를 제공하여 RGB 조명을 영리하게 조명하는 데 사용할 수 있습니다. 이렇게 하려면 두 장치에 전원을 공급해야 합니다. 운 좋게도 둘 다 5볼트 입력이 필요합니다. 강압 모듈을 사용하여 12볼트에서 5볼트로 강압하고 있지만 5볼트 전원을 직접 사용하는 것이 더 쉬울 것입니다. Arduino와 사운드 감지기 보드의 VIN을 양극 입력에 연결합니다. 그런 다음 Arduino의 GND와 감지기를 음극에 연결합니다. 첨부된 회로도에서 검은색과 빨간색 전선을 보십시오. 또한 LED 스트립의 양극 및 음극 입력을 전원에 연결해야 합니다.

    3단계:감지기 및 스트립

    세 부분을 모두 전원에 연결한 후 서로 연결해야 합니다.

    사운드 감지기 모듈은 아날로그 입력 핀을 통해 Arduino와 통신합니다. 이 경우 핀 번호 0을 사용하겠습니다.

    LED 스트립은 우리가 다루고자 하는 LED를 이해하기 위해 디지털 펄스가 필요합니다. 따라서 Arduino nano에 디지털 출력 핀을 연결해야 합니다. 6번 핀을 사용하겠습니다.

    나중에 좁은 공간에서 케이블이 서로 충돌하지 않도록 수축 튜브를 선택 영역에 사용하십시오.

    여기에 제공된 개략도를 따르기만 하면 문제가 해결될 것입니다!

    굉장합니다. 이제 우리는 대부분 전자 제품으로 끝났습니다!

    4단계:코드 업로드

    이 빌드에서 가장 중요한 부분은 틀림없이 코드일 것입니다. 이 빌드를 꽤 멋진 것에서 엄청나게 멋진 것으로 바꿀 수 있습니다. 이 프로젝트와 함께 제공한 코드를 사용할 수 있습니다. 주요 원리는 센서에서 얻은 아날로그 값을 표시할 LED의 양으로 매핑하는 것입니다.

    5단계:케이스 준비

    처음에는 뚜껑이 아크릴로 만들어진 줄 알았는데, 항아리를 구입하고 아크릴이 아니라 유리라는 것을 깨달았습니다. 그래서 Arduino와 led를 찌르고 장착하기 쉬운 덮개를 만들어 계획을 다시 조정해야 합니다. 그래서 저는 폼보드를 선택했습니다.

    첫 번째 단계 , 정확히 원형이고 항아리의 유리 덮개와 같은 지름을 가진 폼 보드를 잘라야합니다. 나는 적당한 지름 측정 도구가 없어서 젖은 마커를 사용하여 즉석에서 방법을 만들고 유리의 지름을 표시하고 종이에 스탬프를 찍습니다. 그런 다음 폼 보드에 종이를 붙이지만 종이의 원 가장자리를 따라 보드를 붙입니다. 완벽하지는 않지만 아두이노와 led 부품을 모두 담을 수 있을 정도는 되어야 합니다.

    두 번째 단계 , 항아리 뚜껑의 유리를 깨야 합니다. 주의! 두꺼운 비닐 봉지로 항아리를 덮으십시오. 유리가 방 주위에 흩어지는 것을 방지하고 열린 공간에서하십시오. 주변을 의식하십시오. 유리를 깨뜨린 후에는 병뚜껑 측면의 갈라진 틈에 붙어 있던 유리가 모두 제거되었는지 확인하십시오. 이것은 귀하 또는 다른 사람이 유리에 스스로 절단되어 부상을 입는 것을 방지하기 위한 것입니다.

    세 번째 단계 , 항아리 뚜껑 중앙에 원형 폼보드를 놓습니다. 거품이 팽팽하고 너무 느슨하지 않은지 확인하여 병에 잘 맞도록 합니다.

    네 번째 단계, 이 프로젝트의 레이아웃을 변경해야 한다는 것을 깨달았습니다. 사용자가 결함이 있는 경우 Arduino 구성 요소에 쉽게 액세스할 수 있도록 하고 싶습니다. 그래서 저는 미니 브레드보드를 ​​사용하기로 결정하고 뚜껑 중앙에 배치했습니다. 뿐만 아니라 항아리 뚜껑의 바닥에 놓을 사운드 모듈의 케이블 구멍 2개를 잘라 항아리 내부와 브레드보드에 연결하고 Arduino가 USB 케이블과 연결하기 위한 구멍 1개를 더 잘라 작동합니다. 회로의 전원 공급 장치로 사용합니다.

    다섯 번째 단계 , 마스킹 테이프로 PVC 파이프를 표시하고 테이프 중앙에 선을 그립니다. 그런 다음 PVC 파이프에 테이프를 붙입니다. 마킹은 pvc배관을 고르게 자르고 깔끔하게 자르고자 하는 저의 의지의 지표입니다.

    내가 사용해야 할 PVC의 길이를 측정한 후, 나는 내가 제공한 표시에 따라 조심스럽게 자릅니다. PVC 파이프의 길이는 항아리 높이에 따라 다릅니다. 원하는 길이를 사용할 수 있습니다.

    6단계 , 나는 LED 스트립으로 절단 한 PVC 파이프를 휘게 만들고 약간 비스듬히 만들고 PVC 상단으로 나선형으로 만듭니다. 케이블 관리를 위해 PVC 병 안에 숨길 수 있는 여분의 케이블 길이를 위한 작은 구멍을 만듭니다. 그런 다음 PVC를 브레드보드에 세울 방법을 찾아야 합니다. 핫 글루건이나 양면 테이프를 사용하여 PVC 파이프를 여분의 폼 보드에 테이프로 붙인 다음 브레드 보드의 사용하지 않는 부분에 붙일 수 있습니다. 이 단계에서 일부 구성 요소를 브레드보드에 연결할 수 있습니다.

    제공된 회로도를 사용하여 모든 구성 요소를 연결하십시오.

    (브레드보드의 왼쪽 영역은 양수이고 브레드보드의 오른쪽 영역은 음수입니다. `

    일곱 번째 단계, 사운드 모듈을 항아리 뚜껑 외부에 배치했습니다. 이것은 모듈이 나중에 항아리 외부의 사운드를 쉽게 선택하기 위해 의도적으로 수행됩니다. 모듈을 배치한 후 케이블로 연결하고 주어진 회로도에 표시된 대로 일치시킵니다. 그런 다음 센서와 Arduino가 있는 모든 케이블을 브레드보드에 연결합니다. 아두이노는 회로에 전원을 공급하기 위한 케이블이 폼보드를 통해 아두이노 보드와 쉽게 연결할 수 있도록 수직으로 설치하고 있습니다.

    그리하여 나는 프로젝트를 완성한다. 나는 시도와 오류로 시간이 더 걸리지 만 그것을 완료 할 수있었습니다.

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

    코드

    <울>
  • Arduino용 코딩
  • ArduinoArduino용 코딩
    이 코드는 LED가 사운드 모듈에 의해 감지되는 사운드에 반응하도록 합니다.
    #include /** 기본 구성 **///설정의 LED 수#define NUM_LEDS 60 //LED를 제어하는 ​​핀#define LED_PIN 6//센서 값을 읽는 핀 form#define ANALOG_READ 0//마이크 낮은 값, 최대 값 확인#define MIC_LOW 0.0#define MIC_HIGH 200.0/** 기타 매크로 * ///얼마나 많은 이전 센서 값이 작동 평균에 영향을 줍니까?#define AVGLEN 5//얼마나 많은 이전 센서 값이 피크에 있는지 결정합니다/HIGH(예:노래에서)#define LONG_SECTOR 20//Mneumonics#define HIGH 3 #define NORMAL 2//측정을 다시 시작하기 전에 "현재 평균" 소리를 얼마나 오래 유지합니까#define MSECS 30 * 1000#define CYCLES MSECS / DELAY/*가끔 판독값이 잘못되었거나 이상합니다. 평균에서 벗어나기 위해 판독 값이 얼마나 허용됩니까? **/#define DEV_THRESH 0.8//Arduino 루프 지연#define DELAY 1float fscale( float originalMin, float originalMax, float newBegin, float newEnd, float inputValue, float 곡선);void insert(int val, int *avgs, int len);int compute_average(int *avgs, int len);void visual_music();//표시할 LED 수int curshow =NUM_LEDS;/*아직 실제로 사용되지 않았습니다. 사운드 반응 모드와 일반 그래디언트 펄스/정적 색상 사이를 전환할 수 있다고 생각됨*/int 모드 =0;//모드에 따라 다른 색상 표시.int songmode =NORMAL;//평균 사운드 측정 마지막 CYCLESunsigned long song_avg; //song_avg가 재설정된 이후의 반복 횟수 int iter =0;//아니면 LED가 검은색으로 사라지는 속도 relitfloat fade_scale =1.2;//Led arrayCRGB leds[NUM_LEDS];/*"정규화"하는 데 사용되는 짧은 소리 평균 입력값 , 그리고 우리가 특정 modestruct time_keeping { unsigned long times_start; short times;};//cyclestruct color { int r; 마다 각 색상을 얼마나 증가 또는 감소시킬 것인지 정수지; int b;};struct time_keeping high;struct color Color; 무효 설정() { Serial.begin(9600); //모든 조명이 예상대로 작동하는지 확인하기 위해 모든 조명을 설정합니다. FastLED.addLeds(leds, NUM_LEDS); (int i =0; i  (song_avg/iter * 1.1)) { if (high.times !=0) { if (millis() - high.times_start> 200.0) { high.times =0; 노래 모드 =정상; } else { high.times_start =millis(); 하이타임++; } } else { high.times++; high.times_start =millis(); } } if (high.times> 30 &&millis() - high.times_start <50.0) songmode =HIGH; else if (millis() - high.times_start> 200) { high.times =0; 노래 모드 =정상; }}// Lampvoid Visual_music() { int sensor_value, mappingd, avg, longavg; //실제 센서 값 sensor_value =analogRead(ANALOG_READ); //0이면 즉시 버린다. 아마도 옳지 않고 CPU를 절약하십시오. if (sensor_value ==0) 반환; //과거 평균에서 너무 많이 벗어난 판독값은 버립니다. 매핑된 =(float)fscale(MIC_LOW, MIC_HIGH, MIC_LOW, (float)MIC_HIGH, (float)sensor_value, 2.0); 평균 =계산 평균(평균, AVGLEN); if (((avg - 매핑됨)> avg*DEV_THRESH)) //|| ((평균 - 매핑) <-avg*DEV_THRESH)) 반환; //새 평균을 삽입합니다. 값 삽입(매핑, 평균, AVGLEN); 삽입(평균, long_avg, LONG_SECTOR); // "노래 평균" 센서 값 계산 song_avg +=avg; 반복++; if (iter> CYCLES) { song_avg =song_avg / iter; 반복 =1; } longavg =compute_average(long_avg, LONG_SECTOR); //HIGH 모드로 진입했는지 확인 check_high(longavg); if (노래 모드 ==HIGH) { fade_scale =3; 색상.r =5; 색상.g =3; 색상.b =-1; } else if (노래 모드 ==NORMAL) { fade_scale =2; 색상.r =-1; 색상 b =2; 색상.g =1; } // 몇 개의 LED가 켜질지 결정합니다. curshow =fscale(MIC_LOW, MIC_HIGH, 0.0, (float)NUM_LEDS, (float)avg, -1); /*다른 LED를 설정합니다. 너무 높거나 낮은 값을 제어합니다. 재미있는 시도:한 방향의 오버플로를 고려하지 마십시오. 몇 가지 흥미로운 조명 효과가 나타납니다! */ for (int i =0; i  255) leds[i]. r =255; else if (leds[i].r + Color.r <0) leds[i].r =0; 그렇지 않으면 leds[i].r =leds[i].r + Color.r; if (leds[i].g + Color.g> 255) leds[i].g =255; else if (leds[i].g + Color.g <0) leds[i].g =0; 그렇지 않으면 leds[i].g =leds[i].g + Color.g; if (leds[i].b + Color.b> 255) leds[i].b =255; else if (leds[i].b + Color.b <0) leds[i].b =0; 그렇지 않으면 leds[i].b =leds[i].b + Color.b; //다른 모든 LED는 궁극적으로 완전한 어둠으로 페이딩 여정을 시작합니다. } else { leds[i] =CRGB(leds[i].r/fade_scale, leds[i].g/fade_scale, leds[i].b/fade_scale ); } FastLED.show(); }//시작 포인터와 길이가 주어지면 int 배열의 평균을 계산합니다.int compute_average(int *avgs, int len) { int sum =0; for (int i =0; i  10) 곡선 =10; if (곡선 <-10) 곡선 =-10; 곡선 =(곡선 * -.1); // - 반전 및 크기 조정 - 이것이 더 직관적으로 보입니다. - 양수는 출력에서 ​​하이 엔드에 더 많은 가중치를 부여합니다. curve =pow(10, curve); // 선형 스케일을 다른 pow 함수에 대한 대수 지수로 변환합니다. // 범위를 벗어난 inputValues를 확인합니다. if (inputValue  originalMax) { inputValue =originalMax; } // 0 참조 값 OriginalRange =originalMax - originalMin; if (newEnd> newBegin){ NewRange =newEnd - newBegin; } else { NewRange =newBegin - newEnd; invFlag =1; } zeroRefCurVal =inputValue - originalMin; normalizedCurVal =zeroRefCurVal / OriginalRange; // 0 - 1로 정규화 float // originalMin> originalMax 확인 - 다른 모든 경우에 대한 수학, 즉 음수는 잘 작동하는 것으로 보입니다. if (originalMin> originalMax ) { return 0; } if (invFlag ==0){ rangedValue =(pow(normalizedCurVal, 곡선) * NewRange) + newBegin; } else // 범위 반전 { rangedValue =newBegin - (pow(normalizedCurVal, curve) * NewRange); } rangedValue 반환;}

    회로도


    제조공정

    1. TinyML-Language Detector 기반 Edge Impulse 및 Arduino
    2. MPU-6050을 사용한 Arduino 자이로스코프 게임
    3. Arduino 디지털 주사위
    4. 아이언맨
    5. 나를 찾기
    6. Arduino에서 오디오 재생
    7. Arduino 가습기 제어
    8. arduino를 사용한 소나 및 IDE 처리 시 표시
    9. MobBob:Android 스마트폰으로 제어되는 DIY Arduino 로봇
    10. NeoMatrix Arduino Pong