이 프로젝트는 Arduino 101, 배터리, LED 스트립을 사용해 제스처로 제어하는 마법사의 지팡이를 만듭니다. 지팡이를 3가지 제스처로 움직여 3가지 다른 조명 "주문"을 소환할 수 있습니다.
기술
코드는 Arduino 101의 관성 측정 장치(IMU)로 G-포스를 읽지만 패턴 매칭 엔진(PME)은 사용하지 않습니다(PME 예제는 Kitty Yeung의 PME 프로젝트 참조). 대신 X, Y, Z 방향의 급격한 충격을 세고, 짧은 시간 내 특정 조합이 나오면 주문을 소환합니다.
주문 시전
빠른 수직 탭 2번으로 주문을 시작한 뒤, 지팡이를 앞으로 날카롭게 움직이거나 좌우로 기울이거나 세 번째 수직 탭으로 3가지 주문 중 하나를 선택하고, 마지막 탭으로 주문을 시전합니다.
시각적 피드백
제스처 진행 단계를 알 수 있도록 LED 스트립으로 시각적 피드백을 제공합니다. 처음 더블 탭 시 흰색 빠른 점멸로 주문 시작을 알립니다. 각 단계마다 시각적 피드백으로 어떤 주문이 선택될지 알 수 있습니다.
주문 시전 상세
Arduino 101이 사용자를 향하게 지팡이를 잡으세요. 먼저 지팡이를 땅에 가볍게 두 번 탭하거나 공중에서 빠르게 수직으로 두 번 펄스하세요. 흰색 플래시가 보이면 지팡이를 앞으로/뒤로 날카롭게 움직여 주문 1 선택, 좌우로 기울여 주문 2 선택, 세 번째 수직 움직임으로 주문 3 선택. 주문 선택 시 불빛이 고정되면 초록(주문 1), 파랑(주문 2), 빨강(주문 3)으로 빛납니다. 불빛이 고정되면 마지막 수직 탭으로 주문 소환. 선택된 색상으로 반짝이며 점멸합니다.
제스처는 시간 제한이 있습니다! 각 단계 사이 1초 이내에 다음 동작을 해야 하거나 주문이 리셋됩니다. 실수하거나 잘못 선택해도 1초만 기다리면 다시 시작할 수 있습니다. 정확한 주문 소환은 약간의 연습이 필요하지만, 그냥 들고 다닐 때 실수로 주문이 발동되지 않는 장점이 있습니다.
전자회로 제작
기본적으로 Arduino 101, 배터리, NeoPixel LED 스트립만 있으면 됩니다.
전원 구성 방법은 여러 가지입니다. 가장 빠른 건 9V 배터리로 Arduino 101에서 직접 LED 구동이지만 배터리 수명이 매우 짧습니다. LiPo 배터리로 전력/무게 최적화한 "프로" 빌드도 가능하지만 안전한 충전 방법이 필요합니다. 제게 배터리 수명과 단순성의 좋은 균형은 3개 AA 배터리와 $4 전압 레귤레이터입니다. 이 구성은 섀도우 극장과 만화경 인피니티 미러 프로젝트와 동일합니다.
1단계
LED 스트립 끝단 하니스를 약 1cm 남기고 자른 후 선 끝을 스트립하세요.
2단계
전압 레귤레이터에 동봉된 구부러진 헤더 핀을 분리해 그린/옐로 와이어 끝에 두 개 납땜하세요. 이렇게 하면 Arduino 101 핀에 쉽게 꽂을 수 있습니다.
3단계
레드 와이어를 전압 레귤레이터 VIN 단자에 납땜하고, GND와 VOUT 핀에 직각 헤더 두 개를 사진과 같이 납땜하세요.
4단계
배럴 잭 어댑터 연결. 배터리 케이스 선 끝을 스트립한 후 수컷 배럴 잭 단자에 장착하고 드라이버로 조이세요. 빨강은 (+), 검정은 (-) 단자.
암컷 배럴 잭 어댑터를 LED 스트립 시작 부분의 느슨한 선에 연결. 옐로우는 (-), 레드는 (+) 단자.
5단계
하니스를 Arduino 101에 연결. 그린 와이어 → PIN 6, 옐로우 와이어 → #13 근처 GND 핀. 전압 레귤레이터의 두 헤더 핀으로 GND → GND, VOUT → Arduino 101 "VIN" 핀. 절대 반대로 꽂지 마세요! 역연결 시 냄새와 연기가 나며 손상됩니다. 경험담입니다.
예제 코드 업로드
1단계
배터리 팩을 끈 상태에서 USB 케이블로 Arduino 101을 컴퓨터에 연결하고 Arduino IDE로 예제 코드 업로드.
Arduino 101 프로그래밍이 처음이라면 여기 훌륭한 지침 참조: https://www.arduino.cc/en/Guide/Arduino101
코드 업로드 성공 후 USB 분리, 배터리 팩 켜고 USB 포트가 아래, 핀이 사용자 쪽을 향하게 하여 주문 제스처 테스트. 수직으로 4번 움직여 레드 주문 호출 테스트.
코드 설명: (예제 코드 그대로 사용하려면 '지팡이 제작'으로 건너뛰세요)
예제 코드는 Arduino 101의 충격 감지 기능으로 충격을 세며, 새 충격이 없는 짧은 시간 후 충격 카운트를 리셋하는 타이머를 실행합니다. 타이머 만료 전 올바른 조합을 맞추면 "주문" 함수가 호출됩니다.
땅에 단단히 탭하면 초기 충격과 지팡이 진동으로 인한 여러 "노이즈" 충격이 함께 감지되므로, loop의 첫 코드는 각 충격 묶음에서 주요 충격을 찾아 수직, 좌우, 전후로 단순 분류합니다. "gesture" 변수로 각 주요 충동 보관: 1 = 수직 충동, 2 = 전후 충동, 3 = 좌우 충동.
조합 추적을 위해 "switch" 문 사용, 제스처가 누적됨에 따라 이동. "다음 충동이 좌우면 2단계로, 타이머 만료면 0으로 돌아가라" 같은 식의 '모험 선택' 책과 유사합니다.
주문:
각 주문이 수행하는 동작을 쉽게 변경할 수 있습니다. 현재는 극장 추격 예제 코드를 다른 색상으로 실행합니다. 쉽게 추가/색상 변경/자체 조명 함수 작성 가능. theaterChase 함수의 첫 3개 변수는 빨강, 초록, 파랑 값, 마지막 숫자는 속도(숫자 클수록 느림).