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

손 동작과 Arduino를 사용하는 놀라운 제어 컴퓨터

구성품 및 소모품

Arduino UNO
× 1
초음파 센서 - HC-SR04(일반)
× 2
점퍼 와이어(일반)
× 1

앱 및 온라인 서비스

Arduino IDE
Python IDLE
PySerial 라이브러리
Pyautogui 라이브러리

이 프로젝트 정보

이 프로젝트에서 우리는 제스처로 제어되는 랩탑이나 컴퓨터를 만드는 방법을 배울 것입니다. Arduino와 Python의 조합을 기반으로 합니다.

키보드, 마우스 또는 조이스틱을 사용하는 대신 손 제스처를 사용하여 비디오 재생/일시 정지, 사진 슬라이드쇼에서 왼쪽/오른쪽으로 이동, 웹 페이지에서 위/아래로 스크롤 등 컴퓨터의 특정 기능을 제어할 수 있습니다. 더. 그래서 VLC Media Player를 손짓 프로젝트로 제어하기로 결정했습니다.

프로젝트 이면의 아이디어는 Arduino와 함께 두 개의 초음파 센서(HC-SR04)를 사용하면 매우 쉽습니다. 랩톱 화면 상단에 두 개의 센서를 배치하고 손과 센서 사이의 거리를 계산합니다. 직렬 포트를 통해 Python으로 전송되는 Arduino의 정보를 기반으로 이 정보는 특정 작업을 수행하기 위해 컴퓨터에서 실행 중인 Python에서 읽습니다.

하드웨어 구성요소:

<울>
  • 아두이노
  • <울>
  • 2개의 초음파 센서(HC-SR04)
  • <울>
  • 일부 전선
  • 소프트웨어 앱:

    <울>
  • 아두이노 IDE
  • <울>
  • 파이썬 유휴
  • <울>
  • PySerial 라이브러리(직렬 포트와 통신하는 데 사용할 것입니다).
  • <울>
  • PyAutogui 라이브러리(작업을 수행하는 데 사용할 것입니다).
  • 따라서 Python 및 PySerial 라이브러리를 이미 설치했고 몇 가지 기본 프로젝트를 성공적으로 완료했다고 가정합니다. 그렇지 않은 경우 걱정하지 마십시오. 이전 튜토리얼(Python을 사용하여 Arduino 프로그래밍)을 따르는 것이 좋습니다. 또한 초음파 센서에 대해 알고 싶다면 여기(여기)를 참조하세요.

    1단계:자세한 내용은 동영상 보기

    2단계:손 제스처 목적

    다음은 데모용으로 프로그래밍한 5가지 명령 손 제스처입니다.

    <울>
  • 첫 번째 손 제스처:특정 원거리에서 오른쪽/왼쪽 초음파 센서 앞에 두 손을 대면 VLC를 '재생/일시 중지'할 수 있습니다.
  • <울>
  • 두 번째 동작:특정 원거리에서 왼쪽 센서 앞에 손을 대면 동영상을 '되감기'할 수 있습니다.
  • <울>
  • 세 번째 동작:특정 원거리에서 오른쪽 센서 앞에 손을 대면 동영상을 '전달'할 수 있습니다.
  • <울>
  • 네 번째 제스처:특정 먼 거리에서 왼쪽 센서 앞에 손을 대고 센서에서 멀어지는 방식으로 동영상의 '볼륨을 높일 수 있습니다.
  • <울>
  • 다섯 번째 제스처:특정 먼 거리에서 왼쪽 센서 앞에 손을 대고 센서에 가까이 다가가서 동영상의 '볼륨 줄이기'를 허용합니다.
  • 3단계:도식

    회로도는 매우 간단합니다. 아래 지침을 따르기만 하면 됩니다. 따라서 각 센서에는 4개의 핀이 있습니다.

    <울>
  • Vcc - 이 핀은 5V+에 연결됩니다.
  • <울>
  • Trig - 프로그램에서 이 핀을 정의해야 합니다.
  • <울>
  • 에코 - 이 핀은 Trig와 동일하며 정의해야 합니다.
  • <울>
  • GND - 이 핀은 접지에 연결됩니다.
  • 4단계:Python 프로그래밍

    1. 파이썬 IDLE 설치

    컴퓨터에 이미 Python IDLE을 설치했다면 이 단계를 건너뛸 수 있습니다. 그렇다면 2단계로 이동하거나 다음 지침을 참조하세요.

    <울>
  • python 웹사이트로 이동하여 다운로드합니다(여기).
  • <울>
  • 완료되면 기본적으로 Python이 설치되는 디렉토리를 유지하여 설치로 이동합니다.
  • 참고:컴퓨터가 64비트에서 작동하더라도 Arduino 라이브러리와의 호환성이 없기 때문에 32비트 Python 자체를 사용할 수 있습니다.

    2. PySerial 라이브러리 설치

    PySerial은 Arduino 또는 기타 마이크로 컨트롤러에 직렬 데이터를 읽고 쓰는 데 사용되는 Python API 모듈입니다. Windows에 설치하려면 PySerial의 다운로드 페이지를 방문하여 아래 단계를 따르세요.

    <울>
  • 위 링크에서 PySerial을 다운로드합니다.
  • <울>
  • 설정을 기본값으로 유지하여 설치합니다. Pyserial이 올바르게 작동했는지 확인해야 합니다. 이것을하기 위해; 입력:
  • 시리얼 가져오기 

    오류가 발생하지 않았다면 문제가 없는 것입니다. 그렇지 않으면 설치 및 Python IDLE 확장을 확인하는 것이 좋습니다.

    3. PyAutogui 라이브러리 설치

    PyAutoGUI의 목적은 인간을 위한 GUI 자동화를 위한 크로스 플랫폼 Python 모듈을 제공하는 것입니다. API는 합리적인 기본값으로 최대한 단순하게 설계되었습니다. Windows용 pyautogui를 설치하려면 아래 단계를 따르세요. (이 단계를 따르려면 Python IDLE이 이미 설치되어 있어야 합니다.)

    다른 플랫폼을 사용 중이라면 여기를 살펴보시기 바랍니다.

    <울>
  • Windows 명령 열기
  • <울>
  • 다음 명령어 입력
  • cd C:\Python27 
    <울>
  • 그런 다음 다음을 입력합니다.
  • python –m pip 설치 –upgrade pip 
    <울>
  • 마지막 명령은 다음과 같습니다.
  • python –m pip 설치 pyautogui 

    참고:pyautogui가 올바르게 작동하는지 확인하려면 다음을 입력하세요.

    pyautogui 가져오기 

    오류가 발생하지 않았다면 문제가 없는 것입니다.

    5단계:Arduino 코드

    Python에서 Arduino와의 연결을 시작하려면 먼저 Arduino가 켜져 있는 COM 포트를 파악해야 합니다. 이 작업은 위의 그림에서 언급한 것처럼 Arduio 프로그래밍 환경에서 간단하게 수행됩니다.

    <사전><코드> const int trigger1 =2; //첫 번째 Sesnorconst의 트리거 핀 int echo1 =3; //첫 번째 Sesnorconst의 에코 핀 int trigger2 =4; //두 번째 Sesnorconst의 트리거 핀 int echo2 =5;//두 번째 Sesnorlong의 에코 핀 time_taken;int dist,distL,distR;void setup() {Serial.begin(9600); 핀모드(트리거1, 출력); 핀모드(에코1, 입력); 핀모드(트리거2, 출력); 핀모드(에코2, 입력); }/*###거리 계산 함수###*/void compute_distance(int trigger, int echo){digitalWrite(trigger, LOW);delayMicroseconds(2);digitalWrite(trigger, HIGH);delayMicroseconds(10);digitalWrite (trigger, LOW);time_taken =pulseIn(echo, HIGH);dist=time_taken*0.034/2;if (dist>60)dist =60;}void loop() { //무한 loopycalculate_distance(trigger1,echo1);distL =거리; //좌측 거리 구하기 sensorcalculate_distance(trigger2,echo2);distR =dist; //오른쪽 센서의 거리 가져오기//일시 중지 모드 -Holdif ((distL>40 &&distR>40) &&(distL <60 &&distR<60)) //양손 감지{Serial.println("재생/일시 중지"); 지연(500);}calculate_distance(trigger1,echo1);distL =dist;calculate_distance(trigger2,echo2);distR =dist;//제어 모드//왼쪽 잠금 - 제어 모드if (distL>=13 &&distL<=17) { 지연(100); //핸드 홀드 시간 계산_거리(trigger1,echo1); distL =거리; if (distL>=13 &&distL<=17) { Serial.println("왼쪽 잠김"); while(distL<=40) { count_distance(trigger1,echo1); distL =거리; if (distL<10) //손으로 밀어넣음 {Serial.println("볼륨 증가"); delay (300);} if (distL>20) //손을 빼냈습니다. {Serial.println("볼륨 감소"); delay (300);} } }}//오른쪽 잠금 - 제어 모드if (distR>=13 &&distR<=17){ delay(100); //핸드 홀드 시간 계산_거리(trigger2,echo2); distR =거리; if (distR>=13 &&distR<=17) { Serial.println("오른쪽 잠금"); while(distR<=40) { count_distance(trigger2,echo2); distR =거리; if (distR<10) //오른손으로 {Serial.println("되감기"); delay (300);} if (distR>20) //오른손이 뽑힘 {Serial.println("Forward"); 지연(300);} }}}지연(200);}

    Arduino 코드를 읽으면 필요한 작업을 수행하기 위해 특정 키보드 기능을 제어하는 ​​5가지 명령을 관찰할 수 있습니다.

    arduino_pythogui.ino 다운로드

    arduino_pythogui.ino

    6단계:Python 코드

    먼저 직렬 포트를 통해 데이터를 전송하는 Python을 가져오는 간단한 프로그램이 필요합니다.

    import serial #Serial 통신을 위해 가져온 Serialimport time #지연 기능을 사용하는 데 필요import pyautogui #동작을 수행하는 데 필요ArduinoSerial =serial.Serial('com15',9600) #arduinoSerialDatatime.sleep(2)라는 직렬 포트 객체 생성 ) #통신이 설정될 때까지 2초 동안 기다리십시오.while 1:Incoming =str (ArduinoSerial.readline()) # 직렬 데이터를 읽고 '재생/일시 중지'가 수신되는 경우 라인 인쇄로 인쇄 수신:pyautogui.typewrite([ 'space'], 0.2) 수신 시 '되감기':pyautogui.hotkey('ctrl', 'left') 수신 시 '앞으로':pyautogui.hotkey('ctrl', 'right') if '볼륨 증가' 수신 시:pyautogui.hotkey('ctrl', 'down') 수신 시 '볼륨 감소':pyautogui.hotkey('ctrl', 'up') 수신 =""; 
    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    <울>
  • 코드 스니펫 #5
  • 코드 스니펫 #6
  • 코드 스니펫 #5일반 텍스트
    <사전> const int trigger1 =2; //첫 번째 Sesnorconst의 트리거 핀 int echo1 =3; //첫 번째 Sesnorconst의 에코 핀 int trigger2 =4; //두 번째 Sesnorconst의 트리거 핀 int echo2 =5;//두 번째 Sesnorlong의 에코 핀 time_taken;int dist,distL,distR;void setup() {Serial.begin(9600); 핀모드(트리거1, 출력); 핀모드(에코1, 입력); 핀모드(트리거2, 출력); 핀모드(에코2, 입력); }/*###거리 계산 함수###*/void compute_distance(int trigger, int echo){digitalWrite(trigger, LOW);delayMicroseconds(2);digitalWrite(trigger, HIGH);delayMicroseconds(10);digitalWrite (trigger, LOW);time_taken =pulseIn(echo, HIGH);dist=time_taken*0.034/2;if (dist>60)dist =60;}void loop() { //무한 loopycalculate_distance(trigger1,echo1);distL =거리; //좌측 거리 구하기 sensorcalculate_distance(trigger2,echo2);distR =dist; //오른쪽 센서의 거리 가져오기//일시 중지 모드 -Holdif ((distL>40 &&distR>40) &&(distL <60 &&distR<60)) //양손 감지{Serial.println("재생/일시 중지"); 지연(500);}calculate_distance(trigger1,echo1);distL =dist;calculate_distance(trigger2,echo2);distR =dist;//제어 모드//왼쪽 잠금 - 제어 모드if (distL>=13 &&distL<=17) { 지연(100); //핸드 홀드 시간 계산_거리(trigger1,echo1); distL =거리; if (distL>=13 &&distL<=17) { Serial.println("왼쪽 잠김"); while(distL<=40) { count_distance(trigger1,echo1); distL =거리; if (distL<10) //손으로 밀어넣음 {Serial.println("볼륨 증가"); delay (300);} if (distL>20) //손을 빼냈습니다. {Serial.println("볼륨 감소"); delay (300);} } }}//오른쪽 잠금 - 제어 모드if (distR>=13 &&distR<=17){ delay(100); //핸드 홀드 시간 계산_거리(trigger2,echo2); distR =거리; if (distR>=13 &&distR<=17) { Serial.println("오른쪽 잠금"); while(distR<=40) { count_distance(trigger2,echo2); distR =거리; if (distR<10) //오른손으로 {Serial.println("되감기"); delay (300);} if (distR>20) //오른손이 뽑힘 {Serial.println("Forward"); 지연(300);} }}}지연(200);}
    코드 스니펫 #6일반 텍스트
    import serial #Serial 통신을 위해 import된 시간import time #지연 기능을 사용하는 데 필요import pyautogui #동작을 수행하는 데 필요ArduinoSerial =serial.Serial('com15',9600) #arduinoSerialDatatime.sleep(2)라는 직렬 포트 객체 생성 #wait 통신이 설정되는 동안 2초 동안 1:수신 =str (ArduinoSerial.readline()) # 직렬 데이터를 읽고 '재생/일시 중지'가 수신되는 경우 라인 인쇄로 인쇄 수신:pyautogui.typewrite(['space' ], 0.2) 들어오는 경우 '되감기':pyautogui.hotkey('ctrl', 'left') 들어오는 경우 '앞으로':pyautogui.hotkey('ctrl', 'right') 들어오는 경우 '볼륨 증가':pyautogui.hotkey('ctrl', 'down') 수신 시 '볼륨 감소':pyautogui.hotkey('ctrl', 'up') 수신 ="";

    제조공정

    1. Arduino를 사용하여 모니터 Ambilight 만들기
    2. Arduino, 1Sheeld 및 Android를 사용한 범용 원격 제어
    3. Arduino와 스마트폰을 사용한 DIY 전압계
    4. IoT를 사용하여 로봇 팔 원격 제어
    5. Arduino를 사용한 주파수 및 듀티 사이클 측정
    6. Firmata 및 Xbox One 컨트롤러를 사용하여 Arduino Rover 제어
    7. 모션 센서 물총
    8. 볼트와 Arduino를 사용하여 LED 밝기 제어
    9. Arduino를 사용한 간단하고 스마트한 로봇 팔
    10. Alexa 및 Arduino IoT Cloud를 사용하여 TV 전체 제어