Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Computador de controle incrível usando movimento manual e Arduino

Componentes e suprimentos

Arduino UNO
× 1
Sensor ultrassônico - HC-SR04 (genérico)
× 2
Fios de jumpers (genérico)
× 1

Aplicativos e serviços online

Arduino IDE
Python IDLE
Biblioteca PySerial
Biblioteca Pyautogui

Sobre este projeto


Neste projeto, vamos aprender a construir laptops ou computadores controlados por gestos. Baseia-se no uso da combinação de Arduino e Python.

Em vez de usar um teclado, mouse ou joystick, podemos usar nossos gestos manuais para controlar certas funções de um computador, como reproduzir / pausar um vídeo, mover para a esquerda / direita em uma apresentação de slides de fotos, rolar para cima / para baixo em uma página da web e muitos mais. É por isso que decidi controlar o VLC Media Player como um projeto de gestos com as mãos.

A ideia por trás do projeto é bem fácil usando dois sensores ultrassônicos (HC-SR04) com Arduino. Colocaremos os dois sensores no topo da tela de um laptop e calcularemos a distância entre a mão e o sensor. Contando com as informações do Arduino que são enviadas ao Python pela porta serial, essas informações serão lidas pelo Python que está rodando no computador para realizar determinadas ações.

Componentes de hardware:
  • Arduino
  • Dois sensores ultrassônicos (HC-SR04)
  • Alguns fios

Aplicativos de software:
  • Arduino IDE
  • Python IDLE
  • Biblioteca PySerial (usaremos para nos comunicar com portas seriais).
  • Biblioteca PyAutogui (usaremos para realizar ações).

Então, presumo que você já tenha instalado a biblioteca Python e PySerial e tenha feito alguns projetos básicos com sucesso. Se não, não se preocupe; Aconselho você a seguir meu tutorial anterior (Programando Arduino usando Python). Além disso, se você deseja se familiarizar com o Sensor Ultrassônico, dê uma olhada (aqui).





Etapa 1:assista ao vídeo para obter mais detalhes





Etapa 2:Objetivo dos gestos manuais


A seguir estão os 5 comandos de gestos com as mãos que programei para fins de demonstração.
  • Gesto de primeira mão:permite "Reproduzir / pausar" o VLC colocando as duas mãos na frente do sensor ultrassônico direito / esquerdo a uma determinada distância.
  • Segundo gesto:permite-nos 'retroceder' o vídeo colocando a mão na frente do sensor esquerdo a uma determinada distância.
  • Terceiro gesto:permite-nos 'Avançar' o vídeo colocando a mão na frente do sensor certo a uma determinada distância.
  • Quarto gesto:permite-nos 'aumentar o volume' do vídeo colocando a mão na frente do sensor esquerdo a uma determinada distância e afastando-se do sensor.
  • Quinto gesto:nos permite 'Diminuir o Volume' do vídeo, colocando a mão na frente do sensor esquerdo a uma distância particular e chegando perto do sensor.





Etapa 3:esquemático


O esquema é bastante simples, você deve apenas seguir as instruções abaixo. Portanto, cada sensor tem 4 pinos:
  • Vcc - este pino está conectado a 5V +.
  • Trig - você precisa definir este pin em seu programa.
  • Echo - este pino é o mesmo que Trig, você também precisa defini-lo.
  • GND - este pino é conectado ao aterramento.





Etapa 4:Programação em Python





1. Instale Python IDLE


Você pode pular esta etapa se já tiver instalado o Python IDLE em seu computador. Em caso afirmativo, vá para a etapa 2 ou siga as instruções a seguir.
  • Vá para o site do python e faça o download (aqui).
  • Depois de fazer isso, prossiga para a instalação mantendo o diretório no qual o python está sendo instalado por padrão.

NOTA:Mesmo se seu computador estiver operando em 64 bits, você pode usar o próprio Python de 32 bits devido à falta de compatibilidade com as bibliotecas do Arduino.





2. Instale a biblioteca PySerial


PySerial é um módulo Python API que é usado para ler e escrever dados seriais para Arduino ou qualquer outro microcontrolador. Para instalar no Windows, basta visitar a página de download do PySerial e seguir as etapas abaixo:
  • Baixe o PySerial no link acima.
  • Instale-o mantendo a configuração padrão. Certifique-se de que o Pyserial funcione corretamente. Para fazer isso; você digita:
  import serial  

Se você não se deparou com nenhum erro, você está bem. Caso contrário, aconselho você a verificar sua instalação e extensão Python IDLE.





3. Instale a biblioteca PyAutogui


O objetivo do PyAutoGUI é fornecer um módulo Python de plataforma cruzada para automação de GUI para seres humanos. A API foi projetada para ser o mais simples possível, com padrões razoáveis. Siga as etapas abaixo para instalar o pyautogui para Windows. (Para seguir essas etapas, você já deve ter instalado o Python IDLE.)

Se você estiver usando outras plataformas, aconselho que dê uma olhada aqui.
  • Abra o Windows Command
  • Digite o seguinte comando
  cd C:\ Python27  
  • Então você digita:
  python –m pip install –upgrade pip  
  • O último comando é:
  python –m pip install pyautogui  

NOTA:Para ter certeza de que o pyautogui funcionou corretamente, basta digitar:
  import pyautogui  

Se você não se deparou com nenhum erro, você está bem.





Etapa 5:Código Arduino


Para iniciar uma conexão com o Arduino a partir do Python, primeiro temos que descobrir em qual porta COM o Arduino está. Esta tarefa é feita simplesmente pelo ambiente de programação Ardunio como observei na imagem acima.
  const int trigger1 =2; // Trigger pin da 1ª Sesnorconst int echo1 =3; // Echo pin do 1º Sesnorconst int trigger2 =4; // Trigger pin do 2º Sesnorconst int echo2 =5; // Echo pin do 2º Sesnorlong time_taken; int dist, distL, distR; void setup () {Serial.begin (9600); pinMode (trigger1, OUTPUT); pinMode (echo1, INPUT); pinMode (trigger2, OUTPUT); pinMode (echo2, INPUT); } / * ### Função para calcular a distância ### * / void describe_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 () {// infinito loopycalculate_distance (trigger1, echo1); distL =dist; // obtém a distância do sensorcalculate_distance esquerdo (trigger2, echo2); distR =dist; // obter distância do sensor correto // Modos de pausa -Holdif ((distL> 40 &&distR> 40) &&(distL <60 &&distR <60)) // Detectar ambas as mãos {Serial.println ("Reproduzir / Pausar"); delay (500);} calcule_distância (gatilho1, echo1); distL =dist; calcule_distância (gatilho2, echo2); distR =dist; // Modos de controle // Bloquear à esquerda - Modo de controleif (distL> =13 &&distL <=17) {atraso (100); // Tempo de espera da mão calcule_distance (trigger1, echo1); distL =dist; if (distL> =13 &&distL <=17) {Serial.println ("Bloqueado à esquerda"); while (distL <=40) {calcular distância_ (gatilho1, eco1); distL =dist; if (distL <10) // Empurrado manualmente em {Serial.println ("Volume aumentado"); delay (300);} if (distL> 20) // Retirado manualmente {Serial.println ("Volume diminuído"); delay (300);}}}} // Lock Right - Control Modeif (distR> =13 &&distR <=17) {delay (100); // Tempo de espera da mão calcule_distance (trigger2, echo2); distR =dist; if (distR> =13 &&distR <=17) {Serial.println ("Right Locked"); while (distR <=40) {calcular distância_ (gatilho2, eco2); distR =dist; if (distR <10) // Mão direita empurrada em {Serial.println ("Rewind"); delay (300);} if (distR> 20) // Mão direita retirada {Serial.println ("Forward"); atraso (300);}}}} atraso (200);}  

Se você ler o código do Arduino, observará 5 comandos que controlam certas funções do teclado para realizar a tarefa necessária.

arduino_pythogui.ino Download
arduino_pythogui.ino





Etapa 6:Código Python


Primeiro, precisamos de um programa simples para que o Python envie dados pela porta serial.
  import serial #Serial importado para comunicação serialimport time #Required to use delay functionsimport pyautogui #Required to to perform actionsArduinoSerial =serial.Serial ('com15', 9600) #Create Serial port object chamado arduinoSerialDatatime.sleep (2 ) #espere 2 segundos para que a comunicação seja estabelecida antes de 1:entrante =str (ArduinoSerial.readline ()) # leia os dados seriais e imprima-os como impressão de linha de entrada se 'Reproduzir / Pausa' em entrada:pyautogui.typewrite ([ 'espaço'], 0.2) se 'Retroceder' na entrada:pyautogui.hotkey ('ctrl', 'esquerda') se 'Avançar' na entrada:pyautogui.hotkey ('ctrl', 'direita') se 'Volume incrementado' na entrada:pyautogui.hotkey ('ctrl', 'down') se 'Volume diminuiu' na entrada:pyautogui.hotkey ('ctrl', 'up') entrada ="";  

Código

  • Snippet de código # 5
  • Snippet de código # 6
Snippet de código # 5 Texto simples
 const int trigger1 =2; // Trigger pin da 1ª Sesnorconst int echo1 =3; // Echo pin do 1º Sesnorconst int trigger2 =4; // Trigger pin do 2º Sesnorconst int echo2 =5; // Echo pin do 2º Sesnorlong time_taken; int dist, distL, distR; void setup () {Serial.begin (9600); pinMode (trigger1, OUTPUT); pinMode (echo1, INPUT); pinMode (trigger2, OUTPUT); pinMode (echo2, INPUT); } / * ### Função para calcular a distância ### * / void describe_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 () {// infinito loopycalculate_distance (trigger1, echo1); distL =dist; // obtém a distância do sensorcalculate_distance esquerdo (trigger2, echo2); distR =dist; // obter distância do sensor correto // Modos de pausa -Holdif ((distL> 40 &&distR> 40) &&(distL <60 &&distR <60)) // Detectar ambas as mãos {Serial.println ("Reproduzir / Pausar"); delay (500);} calcule_distância (gatilho1, echo1); distL =dist; calcule_distância (gatilho2, echo2); distR =dist; // Modos de controle // Bloquear à esquerda - Modo de controleif (distL> =13 &&distL <=17) {atraso (100); // Tempo de espera da mão calcule_distance (trigger1, echo1); distL =dist; if (distL> =13 &&distL <=17) {Serial.println ("Bloqueado à esquerda"); while (distL <=40) {calcular distância_ (gatilho1, eco1); distL =dist; if (distL <10) // Empurrado manualmente em {Serial.println ("Volume aumentado"); delay (300);} if (distL> 20) // Retirado manualmente {Serial.println ("Volume diminuído"); delay (300);}}}} // Lock Right - Control Modeif (distR> =13 &&distR <=17) {delay (100); // Tempo de espera da mão calcule_distance (trigger2, echo2); distR =dist; if (distR> =13 &&distR <=17) {Serial.println ("Right Locked"); while (distR <=40) {calcular distância_ (gatilho2, eco2); distR =dist; if (distR <10) // Mão direita empurrada em {Serial.println ("Rewind"); delay (300);} if (distR> 20) // Mão direita retirada {Serial.println ("Forward"); atraso (300);}}}} atraso (200);} 
Snippet de código # 6 Texto simples
 import serial #Serial importado para comunicação serialimport time #Required to use delay functionsimport pyautogui #Required to execute actionsArduinoSerial =serial.Serial ('com15', 9600) #Create Serial port object chamado arduinoSerialDatatime.sleep (2) #wait por 2 segundos para que a comunicação se estabeleça antes de 1:entrando =str (ArduinoSerial.readline ()) # ler os dados seriais e imprimi-los como impressão de linha entrando se 'Reproduzir / Pausar' na entrada:pyautogui.typewrite (['espaço' ], 0.2) se 'Retroceder' na entrada:pyautogui.hotkey ('ctrl', 'esquerda') se 'Avançar' na entrada:pyautogui.hotkey ('ctrl', 'direita') se 'Volume aumentado' na entrada:pyautogui.hotkey ('ctrl', 'para baixo') se 'Volume diminuiu' na entrada:pyautogui.hotkey ('ctrl', 'para cima') entrada =""; 

Processo de manufatura

  1. Faça Monitor Ambilight usando Arduino
  2. Controle remoto universal usando Arduino, 1Sheeld e Android
  3. Faça você mesmo voltímetro usando Arduino e Smartphone
  4. Usando IoT para controlar remotamente um braço robótico
  5. Medição de frequência e ciclo de trabalho usando Arduino
  6. Controle o Arduino Rover usando Firmata e o controlador do Xbox One
  7. Pistola de água com sensor de movimento
  8. Controle de brilho do LED usando Bolt e Arduino
  9. Braço robótico simples e inteligente usando Arduino
  10. Controle total de sua TV usando Alexa e Arduino IoT Cloud