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

아두이노로 아이언맨 헬멧 & 아크 리액터 직접 만들기 - 단계별 가이드

부품 및 소모품

아두이노 우노 (Arduino UNO) 1개
아다프루트 네오픽셀 링: WS2812 5050 RGB LED 1개
아다프루트 정전식 터치 센서 브레이크아웃 - MPR121 1개
서보 모터 (타워프로 MG996R) 1개
4xAA 배터리 홀더 1개
9V 배터리 클립 1개
점퍼 와이어 (일반) 1세트

필수 도구 및 기계

앱 및 온라인 서비스

프로젝트 소개

어벤저스 어셈블: 3D 프린팅 & 아두이노 제어 아이언맨 헬멧과 아크 리액터

소개와 동기

이 헬멧을 만들게 된 계기는 제가 처음 만든 헬멧이었습니다. 온라인에서 찾은 비디오들로 종이박스 앤트맨 헬멧을 만들었는데, 마블 팬으로서 정말 멋졌습니다. 그래서 아이언맨 헬멧을 만들어야겠다고 결심했습니다. 워싱턴 D.C. 내셔널 메이커 페어에 다녀온 후 모두가 앤트맨 헬멧을 좋아해 더 큰 동기부여가 되었습니다.

여러 프로토타입을 거쳤습니다. 또 다른 종이박스 헬멧부터 시작했는데 너무 작았습니다. 직접 헬멧을 디자인했지만 조립해보니 영화 속 헬멧보다는 머리 위에 얹힌 공처럼 보였습니다. 결국 페이퍼 모델로 시도했는데 멋지게 나왔지만 너무 약했습니다. 고치려 해봤지만 안 돼서 3D 프린팅으로 결정했습니다. 마침내 제 머리가 들어가고 모터도 장착할 수 있을 만큼 안정적이고 충분히 큰 헬멧을 만들었습니다.

3D 프린팅

1) 파트 분할 - 소프트웨어

첫 단계는 온라인에서 파일을 찾고 프린팅하는 것이었습니다. 모터 구동 아이언맨 헬멧 파일을 씽기버스(Thingiverse)에서 찾았는데, 메인 파트, 턱, 페이스플레이트 세 조각으로 되어 있었습니다. 세 조각 모두 제 프린터 빌드 플레이트에는 너무 커서 파트를 자를 소프트웨어가 필요했습니다. 넷팹 베이직(Netfabb Basic)이라는 무료 소프트웨어를 찾아 다운로드하고 파일을 업로드했습니다. 사용이 매우 쉬워 헬멧 파트를 잘라낼 수 있었습니다. 메인 헬멧, 턱 파트, 페이스플레이트 파트를 프린트했습니다. 프린팅 과정에서 덕트 테이프로 조각들을 붙여 크기가 맞는지 확인했습니다. 모든 조각 프린팅 완료 후 필라멘트 1.5롤을 써서 24조각 헬멧이 완성되었습니다.

2) 적절한 접착제 선택

다음 과제는 파트들을 붙일 적절한 접착제를 찾는 것이었습니다. 접착제는 세 가지 조건을 충족해야 했습니다:

E6000, JB 웰드 퀵웰드(KwikWeld), JB 웰드 플라스틱 본더, 록타이트 플라스틱 본더 에폭시 4가지를 테스트했습니다. 결국 세 조건을 모두 만족하는 퀵웰드를 선택했습니다. 조각을 붙이려면 먼저 접착할 면을 거칠게 만듭니다. 줄로 매끄러운 면을 긁어 작은 홈과 포켓이 생기게 하면 접착에 도움이 됩니다. JB 퀵웰드 경화제와 스틸을 동량 혼합해 양쪽 면에 골고루 바르고 눌러줍니다. 클램프가 있으면 끼우고 여분 접착제를 닦아냅니다. 약 10분 만에 마르지만 더 오래 두는 게 좋습니다.

3) 서보 메커니즘 설계

아이언맨 헬멧 제작의 다음 과제는 서보 메커니즘 설계였습니다. 씽기버스 페이지 사진만으로는 서보를 헬멧에 어떻게 고정할지 감이 안 와서 직접 설계했습니다. 서보 위치와 부착 지점까지 직선을 그리고 서보 각도를 추정했습니다. 첫 설계는 각도가 너무 날카로웠고, 두 번째에서 수정해 적당해졌습니다. 서보 암을 서보와 부착 지점에 나사로 고정해 맞는지 확인했습니다. 맞았습니다! 마지막으로 서보를 감쌀 클램프를 설계해 프린트했습니다. 모두 조립해 첫 테스트를 했는데 불안정했고 페이스플레이트가 부드럽고 균일하게 다 올라가지 않았습니다. 금속 옷걸이를 직사각형으로 구부려 3D 프린트 파트가 들어갈 슬롯에 넣고, 옷걸이가 빠지지 않게 클립을 설계했습니다. 헬멧 상단에 핵소로 슬롯을 자르고 다시 조립했습니다. 두 번째 테스트에서 완벽하게 작동했습니다!

4) 조립 & 도색

드디어 도색할 차례입니다. 모든 걸 분해하고 흰색 프라이머로 첫 코팅을 했습니다. 프라이머가 마르면 턱 파트 일부를 마스킹 테이프로 가리고 헬멧을 빨간색으로 칠했습니다. 페이스플레이트는 전부 금색으로 칠했습니다. 금색은 빨리 마르지만 빨간색은 매우 느리게 마르니 말릴 시간을 충분히 주세요. 모든 파트가 마르면 턱 파트 테이프를 떼고 아직 흰색인 부분 주변을 마스킹합니다. 나머지 헬멧은 호일로 감싸고 흰색 부분을 금색으로 칠한 뒤 마릅니다. 헬멧을 다시 조립하고 최종 테스트 - 작동합니다!

5) 아크 리액터

아크 리액터 제작입니다. 네오픽셀 링 크기를 재서 보관할 케이스를 설계했습니다. 뚜껑은 씽기버스 디자인을 수정해 사용했습니다. 원본 모델: Thingiverse. 케이스와 뚜껑을 프린트했는데 잘 맞았습니다. 유일한 문제는 네오픽셀이 케이스에 비해 너무 작았다는 것 - 계산이 틀렸습니다. 수정 후 다시 프린트하니 맞았습니다. 와이어용 구멍 두 개와 목에 걸 끈용 바를 상단에 추가했습니다. 마지막으로 반투명 ABS 필라멘트로 디퓨저를 만들어 케이스에 끼웠습니다. 프린팅 파트는 끝났습니다!

전자 회로

3D 프린팅이 끝나니 전자 부품을 내장할 훌륭한 플랫폼이 생겼습니다. 이 프로젝트에서는 헬멧 페이스플레이트에 부착된 서보 모터 1개와 아크 리액터의 네오픽셀 링을 제어합니다. 아두이노 우노를 제어 시스템 기반으로 사용했지만, 다른 보드도 사용 가능하도록 소프트웨어와 하드웨어를 범용적으로 유지했습니다. 실제로 우노와 아두이노 101을 번갈아 사용했는데, 101의 온보드 BLE로 향후 연결형 헬멧으로 확장할 수도 있습니다.

아이언맨은 헬멧 서보 모터와 아크 리액터 네오픽셀 링을 작동시켜야 합니다. MPR121 아다프루트 12키 정전식 터치 센서 브레이크아웃으로 터치 기반 인터페이스를 구현했습니다. 이 보드는 12개 입력을 제공하고 I2C로 우노와 통신합니다. 12개 접점은 향후 확장에 충분한 여유가 있고, I2C는 아두이노 패밀리 표준 IDE 패키지에 포함되어 있어 재프로그래밍 없이 보드 교체가 가능합니다. 문서화가 잘 되어 있고 제공되는 소프트웨어 예제로 스케치에 쉽게 적용할 수 있습니다.

맨 끝이 드러난 와이어를 정전식 터치 스위치로 사용했습니다. 기계식 스위치처럼 전통적인 '스위치 바운스'는 없지만, 아두이노 스케치의 loop()가 보드를 폴링하면서 한 번 터치해도 여러 번 감지됩니다. 서보가 이 신호에 반응해 '채터링'하지 않게 하려면 터치 읽기 시 1/4초 소프트웨어 지연 메커니즘을 구현했습니다. 우노와 MPR121 테스트 후 서보 모터와 전원을 추가했습니다.

서보 모터가 부하 하에 작동하고 백 EMF 가능성이 있으며 아두이노 레퍼런스 권장사항을 고려해 서보를 우노와 별도 전원으로 구동했습니다. 서보 모터 전원과 그라운드를 4xAA 배터리 팩의 전원/그라운드에 연결했습니다. 매우 중요: 우노, 서보, 배터리 팩의 그라운드를 모두 연결해 회로를 완성해야 합니다. 퍼마-프로토 보드의 그라운드 레일, 4xAA 배터리 팩, 우노 그라운드 핀에서 나온 와이어를 모두 연결합니다 (아래 프리칭 회로도 참조).

원래 네오픽셀 링도 4xAA 배터리 팩으로 구동하려 했습니다. 네오픽셀 링을 켜고 끌 때 서보가 '채터링'하는 현상이 있어 변경했습니다. 테스트 당시 배터리 부족 탓일 수도 있습니다. 메이커 페어 전날 밤 발견했고 이미 퍼마-프로토 보드에 납땜된 상태라 네오픽셀 링을 우노에 직접 연결하고 새 배터리로 교체했습니다. 문제는 해결됐지만 원인은 불확실합니다. 향후 개선하며 조사해볼 예정입니다.

전체 회로는 브레드보드에서 프로토타이핑한 뒤 아다프루트 ¼ 퍼마-프로토 보드로 옮겼습니다. 안전한 인클로저와 함께 프로젝트를 신속하게 배포 가능한 패키지로 만드는 가장 간단한 방법 중 하나입니다. 블루 HIPS 필라멘트로 맞춤 인클로저를 설계·프린트했습니다. 배터리까지 모두 카메라 케이스에 넣어 메이커 페어에 가져갔습니다!

소프트웨어

현재 스케치 버전은 두 가지입니다: IronMan02.ino와 IronMan04.ino. 둘 다 이 문서의 하드웨어 설정과 호환됩니다.

첫 번째 IronMan02.ino는 "완벽함은 완성의 적이다." 정신으로 마감 기한을 맞추기 위한 "일단 작동하게 만들기" 버전입니다. 우아하진 않지만 일을 완수했습니다. 헬멧과 아크 리액터를 나타내는 객체를 만들었는데, 향후 아두이노 멀티태스킹 구현을 염두에 둔 것이었습니다. 빌 얼(Bill Earl)의 아다프루트 아두이노 멀티태스킹 3부작 글을 강력 추천합니다. 우리 코드, 특히 IronMan04.ino는 이 튜토리얼들의 예제와 아이디어, 권장사항을 기반으로 합니다. 이 글들은 아두이노 프로그래밍 기초를 넘어 프로젝트를 한 단계 끌어올려 줍니다.

페이스플레이트가 너무 빠르게 열리고 닫히는 문제가 있었습니다. delay() 함수로 페이스플레이트 움직임을 느리게 하고 부드럽게 만들었습니다. 진짜 악당이 슈퍼 데스 레이저로 아이언맨 얼굴을 쏘려 한다면 헬멧이 빨리 닫혀야겠지만, 시연용으로는 느리고 부드러운 움직임이 훨씬 나아 보입니다.

// 헬멧 올리기, 터치 캡 스위치 채터/바운스 방지용 1/4초 타임 블록
void up() {
  if((millis() - lastSwitched) > 250 ) {
    lastSwitched = millis();
    if (!helmetUp) {
      int currPos = 0;
      while( currPos < upAngle ) {
        helmetServo.write(currPos);
        currPos = currPos + 2;
        delay(20); // delay(20)은 프로세서 모든 활동을 20ms 차단!
      }
      helmetUp = true;
    } else {/* 이미 열려있음 - 아무것도 안 함*/}
  }
}

delay() 함수의 문제는 마이크로컨트롤러가 delay() 동안 아무 작업도 못 한다는 점입니다. 아다프루트 튜토리얼 가이드에 따라 두 번째 버전 IronMan04.ino에서 이 문제를 해결했습니다.

두 번째 버전 IronMan04.ino에는 메이커 페어 전 시간이 없어 구현 못 했던 두 가지 주요 요소가 포함되어 있습니다:

초기 프로젝트를 본 모두의 반응은 "페이스플레이트 올리기/내리기에 버튼/터치 센서 하나만 있어야 한다"였습니다. 전적으로 동의해 시간이 날 때 구현하기로 했습니다. 여러 상태 변수를 사용하는 해결책:

setup()에서 헬멧을 항상 열림/업 구성으로 시작합니다. 절대 필수는 아닙니다. 초기 상태와 관계없이 페이스플레이트 스위치를 토글하면 두 번째 누름부터 올바른 상태가 됩니다. 하지만 초기 상태가 업이라고 가정하고 코드를 짜서 첫 버튼 누름이 낭비되지 않게 했습니다. 이게 최선일까요? 확신 못 하지만, 위대한 과학자들이 수년을 제어 이론에 바쳤으니 이 프로젝트로는 나쁘지 않다고 생각합니다!

MPR121에서 터치를 폴링하다 보니 사용자가 한 번 터치해도 여러 터치 신호가 발생합니다. 이는 전통적인 스위치 바운스와 비슷하며 소프트웨어로 처리합니다. 터치 센서에 빠른 반응을 원하고 멀티태스킹도 구현하고 싶어서 loop()의 switch/case에서 다중 터치를 차단하는 대신 millis() 함수로 Helmet과 ArcReactor 객체에 타이밍 블록을 두었습니다. Helmet 객체의 코드 조각:

void flipFaceplate() {
  // 채터/바운스 방지 타이밍 블록
  if ((millis()-lastFlipped) > 500 ) {
    ...

다시 delay() 함수를 쓰지 않아 프로젝트의 멀티태스킹을 보존했습니다. 지연 간격 500ms를 변수로 둬서 변경과 테스트가 가능하게 하는 게 더 현명했겠지만, 두 번째 추측에 500ms가 맞아 그냥 썼습니다.

서보가 회전 각도를 부드럽게 스윕하려면 서보 회전을 천천히 증가시켜야 합니다. millis() 함수로 현재 시간을 확인해 서보 모터의 각도 단계에 타임 블록을 두었습니다:

void Update() {
  if ( flipping && (millis()-lastMoved) >= 15 ) {
    lastMoved = millis();
    if ( directionality == UP ) {
      currentPos = currentPos + 3;
    } else {
      currentPos = currentPos - 3;
    }
    Serial.print("current position: ");Serial.print(currentPos);
    helmetServo.write(currentPos);
  }
  if ((currentPos >= upAngle) || (currentPos <= downAngle)) {
    flipping = false;
  }
}

또 delay() 없이 구현했습니다. 이 프로젝트를 빌드해 주의 깊게 보면 IronMan04.ino가 우노에서 돌 때 페이스플레이트를 플립하면서 동시에 네오픽셀을 켜고 끌 수 있습니다. IronMan02.ino에서는 delay() 때문에 서보 움직임이 끝날 때까지 블록됩니다. 빌 얼 감사합니다!

업데이트 함수의 마지막 줄은 페이스플레이트 상하한 위치를 초과하지 않게 체크합니다. loop()가 Update()를 계속 호출하면 헬멧 마지막 움직임 후에도 계속 체크하다가 flipping 변수를 false로 설정해 페이스플레이트 움직임이 끝났음을 알립니다. 다음 사이클에서 flipping이 false면 함수는 사실상 스킵됩니다.


if ((currentPos >= upAngle) || (currentPos <= downAngle)) {
  flipping = false;
}

향후 방향

이 프로젝트로 할 수 있는 게 너무 많아 어디서부터 시작할지 모르겠습니다! 빛나는 눈 추가? 아두이노 101로 BLE 연결? 음성 인터페이스? 자비스가 분명히 원할 겁니다!

코드

아이언맨 헬멧 & 아크 리액터 프로젝트: GitHub 저장소

회로도

회로도 이미지 참조

제조공정

  1. 맨홀 뚜껑: 설계, 재료, 현대 생산
  2. 가정용 다리미의 진화와 현대 생산
  3. 주철 난로: 역사, 설계, 현대적 혁신
  4. 미식축구 헬멧의 진화와 공학: 안전, 설계, 미래 혁신
  5. 철: 특성, 역사, 일상 응용
  6. 배터리: 볼타의 전지 더미에서 현대 리튬 전지까지
  7. UnifiedWater v1 - 아두이노 MKR GSM 1400 기반 완전 수질 모니터링 센서 키트
  8. 아두이노 아이언맨 제작: 부품, 센서, 단계별 가이드
  9. 아두이노 프로젝트를 위한 최적화된 전원 솔루션
  10. 단철(단조 철)의 모든 것: 특성, 용도, 역사