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

모든 오디오 소스로 Billy Bass 입에 애니메이션 효과 주기

구성품 및 소모품

Arduino UNO
× 1
Arduino v2 키트용 Adafruit 모터/스테퍼/서보 실드 - v2 .3
× 1
Amazon Alexa 에코 닷
× 1

이 프로젝트 정보

약 한 달 전 Brian Kane이라는 아티스트는 Big Mouth Billy Bass의 참신한 물고기 노래를 보여주는 바이럴 비디오를 게시했으며 Amazon의 Alexa 가상 비서가 목소리를 낸 것 같습니다. 인터넷이 열광했고 저도 마찬가지였습니다. 하지만 대부분은 어떻게 작동하는지 알고 싶었고, 그래서 제가 직접 만들 수 있었습니다.

Alexa를 사용하는 여러 Raspberry Pi 프로젝트를 본 후 저는 처음에 Brian이 기존 Billy Bass 하드웨어에 애니메이션 효과를 주기 위한 수단으로 두 배인 Alexa 기반 Pi 프로젝트를 만들었다고 가정했습니다. 그리고 그것이 사실일 수도 있습니다. 주간 YouTube 쇼인 Maker Update에서도 이 아이디어를 제안했습니다.

하지만 좀 더 생각해본 결과 가장 쉬운 해킹은 49달러 Amazon Echo의 오디오를 사용하고 Arduino를 통해 처리하여 기존 모터를 구동하는 방법일 것이라고 생각했습니다.

나는 이미 Arduino와 모터 실드를 가지고 있었습니다(실드를 사용한 것은 이번이 처음이었지만).

다음으로 Amazon에서 사용하는 Billy Bass를 약 $15에 주문했습니다. 중고는 야드세일이나 중고품 가게에서 좀 더 싸게 살 수 있을 거라 확신하지만 빨리 갖고 싶었다. 에코닷도 새로 주문했습니다.

주문을 받고 연구를 진행했습니다. 두 개의 튜토리얼이 저에게 희망을 주었습니다. Arduino를 사용하여 소리로 서보를 움직이는 방법에 대한 바보의 2012 가이드와 Billy Bass 장난감의 애니마트로닉스를 이해하는 Dotten의 2013 가이드입니다.

Billy Bass(Furby와 매우 유사)는 기본적으로 두 개의 저렴한 5v DC 장난감 모터로 구동된다는 사실을 이해하면 문제는 이 모터가 소리에 반응하여 경련하게 만드는 방법이 됩니다. 약간의 시행착오를 거쳐 실행 가능한 솔루션을 찾았습니다. 코드는 완벽하지 않으며 구축하고 싶은 다른 기능이 많이 있지만 모든 사람이 이를 개선하는 데 도움이 될 수 있도록 이 코드를 올리고 싶었습니다.

필요한 자료

<울>
  • 큰 입 빌리 배스 노래하는 물고기 (1)
  • <울>
  • 아두이노 우노(1)
  • <울>
  • Arduino Uno 전원 공급 장치(1)
  • <울>
  • Adafruit 모터 쉴드 v2(1)
  • <울>
  • 패널 장착 미니잭(1)
  • <울>
  • 연선 연결 와이어(여러 색상이 도움이 됨)
  • <울>
  • Amazon Echo Dot(모든 오디오 소스가 작동해야 함) (1)
  • <울>
  • 어떤 종류의 소형 충전식 스피커(1)
  • <울>
  • 미니잭(⅛”) 오디오 케이블(1)
  • <울>
  • 미니잭 스플리터 케이블 어댑터(1)
  • 필요한 도구

    <울>
  • 작은 드라이버
  • <울>
  • 납땜 인두 및 땜납
  • <울>
  • 와이어 스트리퍼
  • <울>
  • 조각
  • <울>
  • 드릴 및 비트
  • 1단계:물고기 준비

    좋든 나쁘든 사용된 물고기는 도착하자마자 죽었습니다. 적어도 나는 그것을 열고 해킹하는 데 주저하지 않았습니다. 제 해킹의 경우 뒷면에 있는 나사를 풀고 열어서 부드러운 압력을 가하여 케이블 하네스를 풀어서 뒷면이 완전히 제거될 수 있도록 합니다.

    전자 제품을 위한 더 많은 공간을 만들기 위해 Billy Bass 회로 기판과 피에조 부저를 추가하고 나사를 풀고 제거합니다.

    당신에게 남은 것은 물고기에서 튀어나온 하나의 4와이어 하네스입니다. 여기에는 입을 움직이게 하는 두 개의 와이어(물고기 속으로 들어가는 것을 볼 수 있음)와 모터를 돌리는 방향에 따라 머리나 꼬리를 들어올리는 두 개의 와이어가 포함됩니다.

    물고기를 준비하는 마지막 단계는 4개의 동일한 길이의 서로 다른 색상의 와이어를 자르고 팁을 노출하고 주석 처리한 다음 와이어 하니스의 4개 소켓 각각에 끝을 삽입하는 것입니다. 다음 단계에서는 이것을 Arduino 모터 실드에 연결합니다.

    2단계:모터 실드 준비

    모터 실드에 연결해야 하는 연결은 4개뿐이며 그 중 2개만 납땜됩니다. 꼬리/머리 모터를 실험하고 싶다면 두 개의 전선을 추가로 연결할 수도 있습니다.

    그것을 끝내기 위해 납땜부터 시작합시다. 물고기를 위한 오디오 입력을 만들려면 길이가 다른 두 개의 다른 색상 와이어를 사용하여 끝을 벗기고 하나는 접지에, 다른 하나는 아날로그 0에 납땜합니다. 보드를 통과하는 여분의 와이어는 잘라냅니다.

    이제 이 와이어를 오디오 입력용 패널 장착 미니 잭에 연결해 보겠습니다. 내가 가지고 있는 잭은 3개의 가능한 연결이 있는 멋진 모노 스위치 잭 중 하나였습니다. 중요한 것은 아날로그 0에서 오디오 커넥터의 끝과 접촉하는 잭의 리드까지 와이어를 연결하여 모노 입력을 생성한다는 것입니다. 그런 다음 오디오 커넥터의 베이스(또는 슬리브)와 접촉하는 잭의 리드에 접지선을 연결합니다.

    다음으로, 물고기 모터(들)를 실드에 연결하려면 물고기 입 모터(검정색 및 주황색)로 이어지는 한 쌍의 전선을 모터 1의 단자 블록에 연결하고 나사를 조입니다. 선택적으로 테일/헤드 모터 와이어(흰색 및 빨간색)를 모터 2의 터미널에 연결할 수 있지만 코드는 아직 이 모터로 아무 작업도 수행하지 않습니다(다음 섹션에서 자세히 설명). 내 물고기의 경우 터미널 블록의 와이어 색상은 마우스 모터(M1)의 경우 검정색, 주황색(내 경우 노란색)이고 옵션 테일 모터(M2)의 경우 흰색, 빨간색입니다.

    마지막으로, 모터 실드에 VIN 점퍼라고 표시된 핀에 연결된 점퍼 슬리브가 있는지 확인하십시오. 나는 이것을 처음에 놓쳤고 왜 방패가 켜지지 않는지 궁금해하면서 머리를 긁적였습니다. 이제 쉴드를 Arduino Uno에 끼우고 Arduino의 전원을 켜고 쉴드에서도 전원 표시기 LED가 켜지는 것을 볼 수 있습니다. 실드에 불이 들어오지 않으면 점퍼를 확인하겠습니다.

    3단계:코드 로드

    따라서 코드는 DC 모터 테스트 스케치(본질적으로 모터 실드에 대한 데모)의 요소와 Cenk Özdemir(2012)의 Sound to Servo 스케치의 요소를 모으는 지저분한 해킹이며, 해당 Arduino Sound to Servo Tutorial에 포함되어 있습니다. 위에.

    현재 상태의 코드는 아직 헤드/테일 모터에 애니메이션을 적용하지 않습니다. 한 가지 버전이 있었지만 입 움직임의 응답 속도가 느려졌습니다. 이상적으로는 머리와 꼬리가 자체 애니메이션을 천천히 순환하는 동안 입이 반응을 유지하기를 원하지만 이것이 내 Arduino 코딩 기능의 현재 한계입니다. 알아내거나 제안을 받는 대로 업데이트된 코드를 게시하겠습니다.

    4단계:종합하기

    코드를 로드하고 오디오 케이블을 잭에 연결한 상태에서 오디오 소스를 케이블의 다른 쪽 끝에 연결하기만 하면 물고기의 입을 움직일 수 있을 것입니다(저는 휴대폰으로 팟캐스트를 재생했습니다). 작동하는 경우 플라스틱 물고기 플라크의 어딘가에 작은 구멍을 뚫고 잭을 밀어 넣고 제자리에 조입니다.

    Alexa(또는 원하는 대로)가 물고기를 통해 말하게 하려면 오디오 케이블의 다른 쪽 끝을 Y-어댑터에 연결하고 충전식 스피커를 어댑터의 다른 입력에 연결한 다음 어댑터의 수 플러그를 연결합니다. Echo Dot의 오디오 출력.

    스피커가 켜져 있고 스피커와 Alexa의 볼륨이 모두 켜져 있는지 확인합니다. 그런 다음 Alexa를 불러 그녀에게 질문을 하여 그녀가 말하게 하십시오(날씨, 농담, 뉴스). 휴대용 스피커를 통해 그녀의 목소리를 들으면서 동시에 물고기의 고무 입술이 제 시간에 퍼덕거리는 것을 목격해야 합니다. 스피커가 물고기의 머리에 가까울수록 효과가 더 기괴합니다.

    문제가 해결되면 스피커와 Arduino를 Billy Bass 인클로저에 넣고 닫는 것이 트릭입니다. 솔직히, 나는 아직 이 부분을 이해하는 중입니다.

    5단계:다음은 어디인가요?

    여기에서 할 일이 많이 남아 있으며, 이를 개선하기 위한 모든 제안을 환영합니다. 가까운 시일 내에 이에 대한 버전 2.0을 게시하고 싶습니다.

    1. 머리와 꼬리가 움직이기를 원합니다. 연결이 있고 나는 그것들을 작동시킬 수 있었지만 입의 반응성을 희생하지 않고는 할 수 없었습니다. 이것은 매우 중요합니다.

    2. 스피커를 Arduino에서 충전할 수 있기를 원합니다. 간단해 보이지만 아직 해보지 않았습니다.

    3. Billy Bass의 빨간색 버튼(또는 대체 버튼)이 "말하기" 모드(입의 움직임과 "말하는 물고기" 전체에 대한 추가 정보)와 물고기가 펄럭이는 것에 관한 "음악" 모드 사이를 전환하기를 원합니다. 음악을 듣는 시간.

    4. 클리너 코드. 내가 한 매시업의 코드에 많은 부분이 남아 있다고 확신합니다. 이 문제를 해결하려는 모든 노력을 환영합니다.

    5. 더 작은 Arduino를 사용하십시오. Uno와 Motor Shield는 우리가 그것을 사용하는 것에 대해 완전히 과잉입니다. 나는 Adafruit Feather와 깃털에 대한 2 모터 실드가 좋은 대안이 될 것이라고 생각합니다. 아마도 하나는 입에 전원을 공급하고 다른 하나는 꼬리 머리 모터에 전원을 공급할 수 있습니다.

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

    코드

    <울>
  • SoundToDC
  • SoundToDCArduino
    /* DC 모터를 소리로 이동시킵니다. 이 예제 코드는 공개 도메인에 있습니다. 도널드 벨, Maker Project Lab(2016) 제작. Cenk zdemir의 Sound to Servo(2012) 및 Adafruit의 DCMotorTest*/// 포함 Adafruit 모터 실드 라이브러리#include #include #include "utility/Adafruit_MS_PWMServoDriver.h"// 기본 I2C 주소로 모터 쉴드 개체를 생성합니다.Adafruit_MotorShield AFMS =Adafruit_MotorShield(); // 또는 다른 I2C 주소로 생성합니다(스태킹용)// Adafruit_MotorShield AFMS =Adafruit_MotorShield(0x61); // '포트' M1, M2, M3 또는 M4를 선택합니다. 이 경우 입에는 M1, tailAdafruit_DCMotor에는 M2 *myMotor =AFMS.getMotor(1);Adafruit_DCMotor *myOtherMotor =AFMS.getMotor(2);// 우리가 필요로 하는 기타 변수들 int SoundInPin =A0;int LedPin =12; //입이 움직이는 동안 LED가 활성화되기를 원하는 경우 // reset:void setup() { Serial.begin(9600);을 누를 때 설정 루틴이 한 번 실행됩니다. // 직렬 라이브러리를 9600bps로 설정 AFMS.begin(); // 기본 주파수 1.6KHz로 생성 //AFMS.begin(1000); // 또는 다른 주파수, 예를 들어 1KHz // 시작 속도를 0(꺼짐)에서 255(최대 속도)로 설정합니다. myMotor->setSpeed(0); //입 모터 myMotor->run(FORWARD); // 모터 켜기 myMotor->run(RELEASE); 핀모드(사운드인핀, 입력); 핀모드(LED핀, 출력); myOtherMotor->setSpeed(0); //꼬리 모터 myOtherMotor->run(FORWARD); // 모터 켜기 myOtherMotor->run(RELEASE); 핀모드(사운드인핀, 입력); }// 루프 루틴은 계속해서 계속 실행됩니다. 영원히:void loop() { uint8_t i; // 아날로그 핀 0의 입력을 읽습니다. int sensorValue =analogRead(SoundInPin);// 0..255 사이의 정수가 될 수 있는 LED에 대해 이것의 다른 값을 매핑합니다. int LEDValue =map(sensorValue,0,512,0,255); // 여기에서 가능한 이동 범위까지 매핑합니다. 센서값 =지도(센서값,0,512,0,180); // 일반적으로 512는 1023입니다. 왜냐하면 아날로그 판독이 지금까지 진행되어야 하지만 더 나은 판독을 얻기 위해 변경했기 때문입니다. int MoveDelayValue =map(sensorValue,0,255,0,sensorValue); // 모터 시간을 계산하기 위해 동일한 판독값을 조금 더 아래로 매핑 getsif (sensorValue> 10) { // 일부 정적 판독값을 차단하기 위해 delay(1); // 부드럽게 하기 위한 정적 지연...// 이제 모터를 이동합니다. myMotor->run(FORWARD); for (i=140; i<255; i++) { myMotor->setSpeed(i); }//(i=200; i!=0; i--) {// myMotor->setSpeed(i); // 지연(10);// } analogWrite(LedPin, sensorValue); // 그리고 이 지연 시간에 이동을 수행합니다. myMotor->run(RELEASE); myOtherMotor->실행(릴리스); delay(1);} // 완료. // LED를 다시 끕니다. analogWrite(레드핀, 0); // 이것은 항상 반복됩니다.}

    제조공정

    1. K30 센서로 CO2 모니터링
    2. 1Sheeld/Arduino를 사용한 청각 장애인용 통신
    3. Arduino로 코인 억셉터 제어
    4. 큰 입 빌리 배스 + Alexa
    5. 오디오 주파수 감지기
    6. Bluetooth가 탑재된 Arduino로 LED 제어!
    7. Arduino 또는 ESP8266이 있는 정전 용량 지문 센서
    8. Nextion 디스플레이로 재생
    9. Arduino에서 오디오 재생
    10. Nunchuk 제어 로봇 팔(Arduino 포함)