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

마법사 걷기 직원

구성품 및 소모품

아두이노 101
× 1
$4 Pololu 전압 조정기
× 1
3x AA 배터리 홀더(스위치 포함)
× 1
AA 배터리
모든 유형이 좋습니다. 3개가 필요합니다.
× 1
M 배럴 잭 어댑터
$1.95 전원을 쉽게 연결 및 분리할 수 있습니다.
× 1
F 배럴 잭 어댑터
$1.95 전원을 쉽게 연결 및 분리할 수 있습니다.
× 1
주소 지정 가능한 LED 스트립
예는 NeoPixel 호환 LED, 60픽셀 스트립에 대해 작성되었습니다.
× 1
스포츠 테이프
모든 종류의 천 테이프. 이것은 전자 제품을 직원에게 잡고 좋은 그립을 만드는 데 사용됩니다.
× 1
고무 밴드
테이프를 사용할 수 있을 때까지 직원의 부품을 제자리에 고정하는 데 도움이 됩니다.
× 1
직원. (빗자루, 스프링클러 파이프, 천연 지팡이 등)
× 1

앱 및 온라인 서비스

Arduino IDE

이 프로젝트 정보

이 프로젝트는 Arduino 101, 배터리 및 LED 스트립을 사용하여 제스처로 제어되는 마법사의 지팡이를 만듭니다. 세 가지 제스처 중 하나로 지팡이를 움직여 소환할 수 있는 세 가지 다른 조명 표시 "주문"을 정의합니다.

기술:

이 코드는 Arduino 101의 관성 측정 장치를 사용하여 G-포스를 읽지만 패턴 일치 엔진을 사용하지 않습니다(예:PME를 사용하는 경우 Kitty Yeung의 PME 프로젝트 확인). 대신 이 코드는 X, Y, Z 방향의 빠른 충동을 세고 짧은 시간에 특정 조합을 수행하면 주문을 소환합니다.

주문 시전:

수직으로 빠르게 두 번 탭하면 주문이 시작되고, 지팡이를 왼쪽/오른쪽으로 크게 움직이거나 세 번 탭하여 세 가지 주문 중 하나를 선택한 다음 마지막 탭으로 주문을 시전할 수 있습니다.

시각적 피드백:

제스처에서 현재 위치를 이해하는 데 도움이 되도록 예제 코드에는 LED 스트립의 시각적 피드백이 포함되어 있습니다. 처음으로 두 번 탭하면 표시등이 흰색으로 빠르게 깜박이며 주문이 시작되었음을 알려줍니다. 어떤 주문이 ​​선택되는지 알 수 있도록 각 단계에 대한 시각적 피드백을 받게 됩니다.

주문 시전(상세):

Arduino 101이 당신을 향하도록 지팡이를 잡습니다. 먼저 지면에서 지팡이를 두 번 두드리거나(부드럽게!) 공중에서 두 번 빠르게 수직 펄스를 수행합니다. 하얀색 섬광이 보이면 지팡이를 앞뒤로 크게 움직여 주문 1을 선택하거나, 지팡이를 좌우로 기울여 주문 2를 선택하거나, 수직으로 세 번 움직여 주문 3을 선택합니다. 주문을 선택하면 불이 켜집니다. 녹색(주문 1) 파란색(주문 2) 또는 빨간색(주문 3)으로 계속 켜져 있습니다. 표시등이 고정되면 마지막 수직 탭으로 주문을 소환합니다. 조명이 선택한 색상으로 반짝거리고 깜박입니다.

제스처는 시간에 민감합니다! 제스처의 각 단계 사이에 1초만 있으면 주문이 재설정됩니다. 즉, 주문을 엉망으로 만들거나 잘못된 주문을 선택한 경우 잠시 기다렸다가 다시 시작할 수 있습니다. 주문을 정확하게 소환하는 것은 마스터하기가 조금 까다롭지만 좋은 소식은 지팡이와 함께 돌아다닐 때 우연히 주문이 호출되지 않는다는 것입니다.

전자 제품 제작:

이것은 기본적으로 Arduino 101, 배터리 및 NeoPixel LED 스트립입니다.

전원을 구성하는 방법에는 여러 가지가 있습니다. 가장 빠른 것은 9v 배터리를 사용하고 Arduino 101에서 바로 LED를 실행하는 것이지만 배터리 수명은 매우 짧습니다. 더 "프로" 빌드를 위해 전력/무게를 최대화하기 위해 LiPo 배터리를 사용할 수도 있지만 배터리를 충전하는 안전한 방법이 필요합니다. 저에게 배터리 수명과 단순성 사이의 좋은 균형은 3개의 AA 배터리와 4달러 전압 조정기를 사용하는 것입니다. 이것은 Shadow Theatre 및 Kaleidoscope Infinity Mirror에서와 동일한 전자 장치 설정입니다.

1단계

조명 끝에서 약 1cm를 잘라 LED 스트립에서 끝 하네스를 모으십시오. 와이어 끝을 벗겨냅니다.

2단계

전압 조정기와 함께 제공된 구부러진 헤더 핀을 분리하고 그 중 2개를 녹색 및 노란색 와이어 끝에 납땜합니다. 이렇게 하면 Arduino 101의 핀에 쉽게 연결할 수 있습니다.

3단계

다음으로 빨간색 와이어를 전압 조정기의 VIN 단자에 납땜하고 두 개의 직선 헤더를 그림과 같이 GND 및 VOUT 핀에 납땜합니다.

4단계

이제 배럴 잭 어댑터를 연결합니다. 먼저 배터리 케이스에서 나오는 전선의 끝을 벗겨낸 다음 수 배럴 잭의 단자에 장착하고 드라이버로 조입니다. RED는 (+) 단자로, BLACK은 (-) 단자로 이동합니다.

다음으로 암 배럴 잭 어댑터를 LED 스트립의 시작 부분에서 나오는 느슨한 전선에 연결합니다. YELLOW는 (-) 단자에, RED는 (+)에 연결됩니다.

5단계

이제 하네스를 Arduino 101에 연결하십시오. GREEN 와이어는 PIN 6으로 연결되고 노란색 와이어는 #13 근처의 GND 핀으로 연결됩니다. 전압 조정기에 있는 두 개의 헤더 핀을 사용하여 GND는 GND로 이동하고 VOUT은 Arduino 101의 "VIN" 핀으로 이동합니다. 이것을 잘못 이해하지 마십시오! 거꾸로 꽂으면 냄새와 화상을 입을 수 있습니다. 나는이 사실을 알고.

예제 코드 업로드:

1단계

배터리 팩을 끈 상태에서 USB 케이블을 사용하여 Arduino 101을 컴퓨터에 연결하고 Arduino IDE를 사용하여 첨부된 예제 코드를 업로드하십시오.

이전에 Arduino 101을 프로그래밍한 적이 없다면 Arduino 웹사이트에 훌륭한 지침이 있습니다. https://www.arduino.cc/en/Guide/Arduino101

예제 코드가 성공적으로 로드되면 USB 연결을 끊고 배터리 팩을 켜고 Arduino 101의 USB 포트가 아래를 향하고 핀이 사용자를 향하도록 하여 몇 가지 맞춤법 제스처를 시도하여 코드를 테스트할 수 있습니다. 보드를 세로로 네 번 움직여 레드 스펠을 호출하세요.

코드 토론:

(예제 코드를 있는 그대로 사용하려면 직원 만들기로 건너뛸 수 있습니다.)

예제 코드는 Arduino 101의 충격 감지 기능을 사용하여 충격을 계산하는 반면 새로운 충격 없이 짧은 시간 후에 충격 카운트를 0으로 재설정하는 타이머가 실행됩니다. 타이머가 만료되기 전에 올바른 조합을 맞추면 "주문" 기능이 호출됩니다.

땅을 세게 두드리는 것은 실제로 초기 충격과 지팡이의 진동으로 인한 여러 "소음" 충격을 등록하기 때문에 루프의 첫 번째 코드는 각 충격 배치에서 지배적인 충격을 찾고 간단히 다음과 같이 분류합니다. 세로, 왼쪽/오른쪽 또는 앞/뒤. 나는 각각의 우세한 충동을 유지하기 위해 "제스처"라는 변수를 사용합니다:1 =수직 충동, 2 =앞/뒤 충동, 3 =왼쪽/오른쪽 충동.

그런 다음 조합을 추적하기 위해 코드는 "switch" 문을 사용하고 제스처가 누적되면 이를 통해 이동합니다. 그것은 일종의 "자신만의 모험을 선택하십시오" 책과 같습니다. 각 단계에는 "다음 충동이 왼쪽/오른쪽이면 2단계로 이동하고 타이머가 만료되면 0으로 돌아가십시오"와 같은 내용이 있습니다.

주문:

여기에서 각 주문의 기능을 쉽게 변경할 수 있습니다. 이들은 현재 다른 색상으로 "극장 추적" 예제 코드를 실행 중입니다. 여기에서 쉽게 추가하거나 색상을 변경하거나 자신만의 조명 기능을 작성할 수 있습니다. TheaterChase 함수의 처음 세 변수는 빨강, 녹색 및 파랑에 대한 값입니다. 마지막 숫자는 속도입니다(높은 숫자 =더 느림).

<사전><코드>/////////////////////////////////////////////// /////spells////////////////////// void tapspell() { ///빨간 극장 조명 TheaterChase(strip.Color(127, 20, 0) ), 20); TheaterChase(strip.Color(127, 20, 50), 55); 스트립쇼(); } 무효 leftspell() { TheaterChase(strip.Color(0, 0, 100), 20); TheaterChase(strip.Color(0, 30, 120), 75); 스트립쇼(); } 무효 forwardspell() { TheaterChase(strip.Color(0, 127, 0), 30); TheaterChase(strip.Color(0, 127, 90), 55); 스트립쇼(); }

직원 만들기:

여기에 창의성을 위한 많은 공간이 있습니다! 기본적인 기술 빌드에 집중하지만 독특한 스태프를 만드는 재미가 있습니다. 얇은 명주 그물, 티슈 페이퍼 또는 플라스틱 병과 같은 광 확산기를 LED 위에 올려 놓으면 매우 멋진 조명 디스플레이를 만들 수 있습니다!

1단계:등산용 지팡이/직원 찾기

빗자루, 스프링클러 파이프를 사용하거나 천연 막대기를 찾을 수 있습니다. Michael의 공예품 상점에서도 멋진 것을 판매합니다. (스틱 섹션에서 - 정말.) 전자 제품을 위한 깨끗한 작업 공간을 만들기 위해 섹션을 스포츠 테이프로 감싸고 싶지만 이는 선택 사항입니다.

물건을 더 쉽게 붙일 수 있도록 지팡이에 고무줄을 몇 개 두십시오.

2단계:USB 포트가 아래로 향하도록 Arduino 101을 지팡이에 놓기

고무줄을 사용하여 Arduino 101을 제자리에 고정합니다.

3단계:고무 밴드를 사용하여 양쪽 끝을 돕고 LED를 감쌉니다.

4단계:Arduino 101 및 배터리 팩을 고정하기 위해 스포츠 테이프를 감습니다.

배터리 팩의 켜기/끄기 스위치에 접근할 수 있도록 하십시오. 흔들리거나 탭하지 않도록 배터리 팩을 안전하게 보호하고 싶지만 결국에는 배터리를 교체해야 한다는 점을 기억하십시오.

5단계:LED 조명 확산 및 장식

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

코드

<울>
  • Wizard Walking Staff 예제 코드
  • Wizard Walking Staff 예제 코드Arduino
    x, y 및 z축의 임펄스를 계산하고 특정 임펄스 조합은 네오픽셀 스트립에 "주문"(조명 디스플레이)을 불러옵니다.
    /* Copyright (c) 2016 Intel Corporation. 판권 소유. 파일 끝에 있는 라이선스 고지를 참조하세요.*//* Arduino 101 "Wizard's Walking Staff." 이 코드는 Adafruit Neopixel 라이브러리를 사용합니다. 라이브러리 설치 지침:https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-installation 최신 Intel Curie Core가 설치되어 있는지 확인하십시오. 자세한 내용은 https://www.arduino.cc/en/Guide/Arduino101*/#include "CurieIMU.h#include #define PIN 6 //// NeoPixels가 연결된 핀은 무엇입니까? to?Adafruit_NeoPixel 스트립 =Adafruit_NeoPixel(60, PIN, NEO_GRB + NEO_KHZ800); /// 스트립의 길이는 60픽셀입니다.int tr =0; // 스무딩을 위해 색상 대상 및 색상 현재를 유지하는 일부 변수...int tg =0;int tb =0;int r =0;int g =0;int b =0;long int globaltimer =0; /// 제스처 대 시간을 추적하는 타이머... "타이머가 0.5초를 넘기지 않고 두 번 탭하면..."과 같은 경우 long int 제스처 타이머 =0;long int ledtimer =0;int 페이드 =10; /// 조명이 얼마나 빨리 퇴색하는지. 평활화에 사용int 탭 =0; //수직 임펄스용 카운터int lr =0; //왼쪽/오른쪽 임펄스용 Coutersint fb =0; //앞으로/뒤로 Impulsesint 제스처에 대한 Couter =0; // 정수 상태 =0; /// 스위치의 경우... 이것은 series.void setup() { // 여기에 설정 코드를 넣어 한 번 실행되도록 합니다. //Serial.begin(9600); 전역 타이머 =millis(); // 현재 시간에 타임키퍼를 시작합니다.gesturetimer =millis(); ledtimer =millis(); /* IMU 초기화 */ CurieIMU.begin(); CurieIMU.attachInterrupt(eventCallback); /* 충격 감지 활성화 */ CurieIMU.setDetectionThreshold(CURIE_IMU_SHOCK, 1500); // 1.5g =1500mg CurieIMU.setDetectionDuration(CURIE_IMU_SHOCK, 50); // 인터럽트 호출에 필요한 스파이크의 밀리초 CurieIMU.interrupts(CURIE_IMU_SHOCK); strip.begin(); // 네오픽셀 스트립 초기화 strip.show(); // 모든 픽셀을 'off'로 초기화}void loop() { // 여기에 기본 코드를 넣어 반복적으로 실행합니다. ////기본 필터- IMU는 반동과 반작용으로 인한 여러 충격을 등록합니다. 이것은 각 제스처에서 지배적인 충격을 포착하려고 시도합니다. if (millis() - globaltimer> 170) { /// 이것은 각 충격에 대한 주요 이동 축을 찾으려고 시도합니다.. 탭, 좌우 및 전후 이동의 합을 비교하고 가장 큰 것을 선택합니다. if ((탭> lr) &&(탭> fb)) { Serial.println("탭"); 제스처 =1; 탭 =0; lr =0; fb =0; //// 움직임이 분류된 후 값을 재설정합니다. } else if ((lr> fb) &&(lr> 탭)) { Serial.println("lr"); 제스처 =2; 탭 =0; lr =0; fb =0; } else if ((fb> lr) || (fb> 탭)) { Serial.println("fb"); 제스처 =3; 탭 =0; lr =0; fb =0; } }/////////////////////////////////////////////////// ////////////////////////////////////////////////////// /////////////////////////// if (millis() - 전역 타이머> 1000) { /////timeoutreset 전역 타이머 =millis() - 170;tr =0; tg=0; TB =0; 상태 =0; //제스처=0; } if (millis() - 제스처 타이머> 1000) { 제스처 타이머 =millis() - 350;tr =0; tg =0; TB =0; 상태 =0; //제스처=0; }///////////////////////////////////////////////////// ////////////////////////////////////////////////////// ///////////////////////// switch (state) { // 이것은 제스처를 추적합니다. case 0:{ /// 아직 제스처가 기록되지 않았습니다... 탭을 들어보세요. 있으면 사례 1로 이동합니다. if (millis() - 제스처 타이머> 350) { if (gesture ==1) { state =1; 제스처 =0; 제스처 타이머 =밀리(); } } 부서지다; } 사례 1:{ ///// 한 번의 탭이 기록되었습니다. 두 번째 탭이 발생하면 빠른 플래시를 재생한 다음 2단계로 이동합니다. if (millis() - 제스처 타이머> 350) { if (gesture ==1) { r=10;g=10;b=10; ///피드백 플래시 상태 =2; 제스처 =0; 제스처 타이머 =밀리(); } } 부서지다; } 사례 2:{ ///////전환점 - 두 번의 탭이 기록되었습니다. 세 가지 주문은 다음 제스처에 따라 여기에서 분기됩니다. 탭이면 사례 3으로, 좌/우이면 사례 4로, 앞/뒤이면 사례 5로 이동 if (millis() - 제스처 타이머> 350) { if (gesture ==1) { 상태 =3; 제스처 =0; 제스처 타이머 =밀리(); } if (제스처 ==2) { 상태 =4; 제스처 =0; 제스처 타이머 =밀리(); } if (제스처 ==3) { 상태 =5; 제스처 =0; 제스처 타이머 =밀리(); } } 부서지다; } case 3:{ //// 세 번의 탭이 기록됨... 우리는 탭 주문에 있습니다. 지팡이를 빨간색으로 바꾸고 주문을 시작하기 위해 마지막 "탭"을 듣습니다. tr =20; tg =0; TB =0; 전역 타이머 =밀리()-250; if (millis() - 제스처 타이머> 350) { if (제스처 ==1) { 상태 =0; Serial.println("탭스펠!"); 탭스펠(); } } 부서지다; } 사례 4:{ ///// 두 번의 탭과 L 또는 R이 녹음되었습니다... 우리는 왼쪽 철자에 있습니다. 지팡이를 파란색으로 바꾸고 마지막 "탭"을 들어 주문을 시작합니다. tr =0; tg =0; TB =20; 전역 타이머 =밀리()-250; if (millis() - 제스처 타이머> 350) {; if (제스처 ==1) { 상태 =0; Serial.println("왼쪽 맞춤법!"); 왼쪽 맞춤법(); } } 부서지다; } case 5:{ ///// //// 두 번 탭하고 앞으로 또는 뒤로 녹음... 우리는 forwardspell에 있습니다. 지팡이를 녹색으로 바꾸고 주문을 시작하기 위해 마지막 "탭"을 듣습니다. tr =0; tg =20; TB =0; 전역 타이머 =밀리()-250; if (millis() - 제스처 타이머> 350) { if (제스처 ==1) { 상태 =0; Serial.println("정방향 맞춤법!"); forwardspell(); } } 부서지다; }기본값:{ 휴식; } } //Serial.println(tr); if (millis()-ledtimer> fade){ /// (페이드 값) 밀리초마다 주기적으로 다음 단계만 수행합니다. "delay()" 함수와 달리 이것은 업데이트 사이에 프로그램에서 다른 일이 발생하도록 합니다. /// 색상 스무딩. 실제 색상은 목표 색상으로 이동합니다... 목표가 현재보다 크면 위로 이동하고, 적으면 아래로 이동합니다. if (tr> r + 1) { r++; } if (tg> g + 1) { g++; } if (tb> b + 1) { b++; } if (tr   

    제조공정

    1. AC 전기장 감지
    2. 전력 계산
    3. 후처리 단계를 더 안전하게 만드는 7가지 방법
    4. 음식 색상:음식을 매력적으로 만드는 필수 성분
    5. IoT 비즈니스 모델이 작동하도록 하는 방법?
    6. 나만의 Google 보이스 HAT 만들기
    7. Arduino+Raspberry Pi 로봇 플랫폼을 만드는 방법
    8. 유리 섬유를 만드는 방법
    9. 어떤 날이든 제조일이 될 수 있습니다!
    10. Solidworks에서 장면 전환 애니메이션을 만드는 방법