Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Increíble computadora de control con movimiento manual y Arduino

Componentes y suministros

Arduino UNO
× 1
Sensor ultrasónico - HC-SR04 (genérico)
× 2
Cables de puente (genéricos)
× 1

Aplicaciones y servicios en línea

Arduino IDE
Python IDLE
PySerial Library
Biblioteca Pyautogui

Acerca de este proyecto

En este proyecto, aprenderemos cómo construir computadoras portátiles o computadoras controladas por gestos. Se basa en el uso de la combinación de Arduino y Python.

En lugar de usar un teclado, mouse o joystick, podemos usar nuestros gestos con las manos para controlar ciertas funciones de una computadora, como reproducir / pausar un video, movernos hacia la izquierda / derecha en una presentación de diapositivas de fotos, desplazarse hacia arriba / abajo en una página web y muchas más. más. Es por eso que decidí controlar VLC Media Player como un proyecto de gestos con la mano.

La idea detrás del proyecto es bastante sencilla mediante el uso de dos sensores ultrasónicos (HC-SR04) con Arduino. Colocaremos los dos sensores en la parte superior de la pantalla de un portátil y calcularemos la distancia entre la mano y el sensor. Contando con la información de Arduino que se envía a Python a través del puerto serie, esta información luego será leída por Python que se está ejecutando en la computadora para realizar ciertas acciones.

Componentes de hardware:

  • Arduino
  • Dos sensores ultrasónicos (HC-SR04)
  • Algunos cables

Aplicaciones de software:

  • IDE de Arduino
  • Python IDLE
  • Biblioteca PySerial (la usaremos para comunicarnos con puertos seriales).
  • Biblioteca PyAutogui (la usaremos para realizar acciones).

Así que supongo que ya ha instalado Python y la biblioteca PySerial y ha realizado con éxito algunos proyectos básicos. Si no es así, no se preocupe; Te aconsejo que sigas mi tutorial anterior (Programación de Arduino usando Python). Además, si desea familiarizarse con el sensor ultrasónico, puede echar un vistazo (aquí).

Paso 1:vea el video para obtener más detalles

Paso 2:Propósito de los gestos con las manos

Los siguientes son los 5 comandos de gestos con las manos que he programado para fines de demostración.

  • Primer gesto de la mano:nos permite 'Reproducir / Pausar' VLC colocando las dos manos frente al sensor ultrasónico derecho / izquierdo a una distancia particular.
  • Segundo gesto:nos permite "Rebobinar" el video colocando una mano frente al sensor izquierdo a una distancia determinada.
  • Tercer gesto:nos permite "Reenviar" el video colocando una mano frente al sensor derecho a una distancia determinada.
  • Cuarto gesto:nos permite 'aumentar el volumen' del video colocando una mano frente al sensor izquierdo a una distancia lejana particular y alejándonos del sensor.
  • Quinto gesto:nos permite 'Disminuir el volumen' del video colocando una mano frente al sensor izquierdo a una distancia lejana particular y acercarnos al sensor.

Paso 3:esquema

El esquema es bastante simple, solo debe seguir las instrucciones a continuación. Entonces cada sensor tiene 4 pines:

  • Vcc:este pin está conectado a 5V +.
  • Trig:debe definir este pin en su programa.
  • Echo:este pin es el mismo que Trig, también debe definirlo.
  • GND:este pin está conectado a tierra.

Paso 4:Programación de Python

1. Instale Python IDLE

Puede omitir este paso si ya instaló Python IDLE en su computadora. En caso afirmativo, vaya al paso 2 o consulte las siguientes instrucciones.

  • Vaya al sitio web de Python y descárguelo (aquí).
  • Una vez que haya terminado, continúe con la instalación manteniendo el directorio en el que se está instalando Python de forma predeterminada.

NOTA:Incluso si su computadora está operando en 64 bits, puede usar Python de 32 bits debido a la falta de compatibilidad con las bibliotecas de Arduino.

2. Instale la biblioteca PySerial

PySerial es un módulo API de Python que se utiliza para leer y escribir datos en serie en Arduino o cualquier otro microcontrolador. Para instalar en Windows, simplemente visite la página de descarga de PySerial y siga los pasos a continuación:

  • Descargue PySerial desde el enlace anterior.
  • Instálelo manteniendo la configuración predeterminada. Debe asegurarse de que Pyserial funciona correctamente. Para hacer esto; escribe:
  importar serie  

Si no se ha enfrentado a ningún error, está bien. De lo contrario, le aconsejo que verifique su instalación y la extensión IDLE de Python.

3. Instale la biblioteca PyAutogui

El propósito de PyAutoGUI es proporcionar un módulo Python multiplataforma para la automatización de GUI para seres humanos. La API está diseñada para ser lo más simple posible con valores predeterminados sensibles. Siga los pasos a continuación para instalar pyautogui para Windows. (Para seguir estos pasos, ya debería haber instalado Python IDLE).

Si está utilizando otras plataformas, le aconsejo que eche un vistazo aquí.

  • Abrir comando de Windows
  • Escriba el siguiente comando
  cd C:\ Python27  
  • Luego escribe:
  python –m pip install –upgrade pip  
  • El último comando es:
  python –m pip install pyautogui  

NOTA:Para asegurarse de que pyautogui funcionó correctamente, simplemente escriba:

  importar pyautogui  

Si no se ha enfrentado a ningún error, está bien.

Paso 5:Código Arduino

Para iniciar una conexión con Arduino desde Python, primero tenemos que averiguar en qué puerto COM se encuentra Arduino. Esta tarea simplemente la realiza el entorno de programación Ardunio como señalé en la imagen de arriba.

  const int trigger1 =2; // Pin de disparo del 1er Sesnorconst int echo1 =3; // Pin de eco del 1er. Sesnorconst int trigger2 =4; // Pin de disparo del segundo Sesnorconst int echo2 =5; // Pin de eco del segundo Sesnorlong time_taken; int dist, distL, distR; void setup () {Serial.begin (9600); pinMode (trigger1, OUTPUT); pinMode (echo1, ENTRADA); pinMode (trigger2, OUTPUT); pinMode (echo2, ENTRADA); } / * ### Función para calcular la distancia ### * / void calculate_distance (int trigger, int echo) {digitalWrite (trigger, LOW); delayMicroseconds (2); digitalWrite (trigger, HIGH); delayMicroseconds (10); digitalWrite (disparador, BAJO); time_taken =pulseIn (echo, HIGH); dist =time_taken * 0.034 / 2; if (dist> 60) dist =60;} void loop () {// infinite loopycalculate_distance (trigger1, echo1); distL =dist; // obtener la distancia del sensor izquierdocalculate_distance (trigger2, echo2); distR =dist; // obtener la distancia del sensor derecho // Modos de pausa -Holdif ((distL> 40 &&distR> 40) &&(distL <60 &&distR <60)) // Detectar ambas manos {Serial.println ("Play / Pause"); delay (500);} calcular_distancia (disparador1, eco1); distL =dist; calcular_distancia (disparador2, eco2); distR =dist; // Modos de control // Bloquear a la izquierda - Modo de controlif (distL> =13 &&distL <=17) {retraso (100); // Hand Hold Time calcular_distancia (trigger1, echo1); distL =dist; if (distL> =13 &&distL <=17) {Serial.println ("Izquierda bloqueada"); while (distL <=40) {calcular_distancia (disparador1, eco1); distL =dist; if (distL <10) // Presionado manualmente {Serial.println ("Volumen aumentado"); delay (300);} if (distL> 20) // Mano sacada {Serial.println ("Volumen disminuido"); delay (300);}}}} // Bloquear a la derecha - Modo de controlif (distR> =13 &&distR <=17) {delay (100); // Tiempo de espera de mano calculate_distance (trigger2, echo2); distR =dist; if (distR> =13 &&distR <=17) {Serial.println ("Bloqueado a la derecha"); while (distR <=40) {calcular_distancia (disparador2, eco2); distR =dist; if (distR <10) // Mano derecha presionada {Serial.println ("Rebobinar"); delay (300);} if (distR> 20) // Mano derecha sacada {Serial.println ("Adelante"); delay (300);}}}} delay (200);}  

Si lee el código Arduino, observará 5 comandos que controlan ciertas funciones del teclado para lograr la tarea requerida.

arduino_pythogui.ino Descargar

arduino_pythogui.ino

Paso 6:Código Python

Primero, necesitamos un programa simple para que Python envíe datos a través del puerto serie.

  import serial #Serial importado para comunicación serialimport time #Require to use delay functionsimport pyautogui #Required to to perform actionsArduinoSerial =serial.Serial ('com15', 9600) #Create Serial port object called arduinoSerialDatatime.sleep (2 ) # espere 2 segundos para que se establezca la comunicación mientras 1:entrante =str (ArduinoSerial.readline ()) # lea los datos en serie e imprímalos como impresión de línea entrante si 'Reproducir / Pausa' en entrante:pyautogui.typewrite ([ 'espacio'], 0.2) si 'Rebobinar' en entrante:pyautogui.hotkey ('ctrl', 'izquierda') si 'Adelante' en entrante:pyautogui.hotkey ('ctrl', 'derecha') si 'Volumen aumentado' en entrante:pyautogui.hotkey ('ctrl', 'abajo') si 'Volumen disminuido' en entrante:pyautogui.hotkey ('ctrl', 'up') entrante ="";  

Código

  • Fragmento de código n. ° 5
  • Fragmento de código n. ° 6
Fragmento de código n. ° 5 Texto sin formato
 const int trigger1 =2; // Pin de disparo del 1er Sesnorconst int echo1 =3; // Pin de eco del 1er. Sesnorconst int trigger2 =4; // Pin de disparo del segundo Sesnorconst int echo2 =5; // Pin de eco del segundo Sesnorlong time_taken; int dist, distL, distR; void setup () {Serial.begin (9600); pinMode (trigger1, OUTPUT); pinMode (echo1, ENTRADA); pinMode (trigger2, OUTPUT); pinMode (echo2, ENTRADA); } / * ### Función para calcular la distancia ### * / void calculate_distance (int trigger, int echo) {digitalWrite (trigger, LOW); delayMicroseconds (2); digitalWrite (trigger, HIGH); delayMicroseconds (10); digitalWrite (disparador, BAJO); time_taken =pulseIn (echo, HIGH); dist =time_taken * 0.034 / 2; if (dist> 60) dist =60;} void loop () {// infinite loopycalculate_distance (trigger1, echo1); distL =dist; // obtener la distancia del sensor izquierdocalculate_distance (trigger2, echo2); distR =dist; // obtener la distancia del sensor derecho // Modos de pausa -Holdif ((distL> 40 &&distR> 40) &&(distL <60 &&distR <60)) // Detectar ambas manos {Serial.println ("Play / Pause"); delay (500);} calcular_distancia (disparador1, eco1); distL =dist; calcular_distancia (disparador2, eco2); distR =dist; // Modos de control // Bloquear a la izquierda - Modo de controlif (distL> =13 &&distL <=17) {retraso (100); // Hand Hold Time calcular_distancia (trigger1, echo1); distL =dist; if (distL> =13 &&distL <=17) {Serial.println ("Izquierda bloqueada"); while (distL <=40) {calcular_distancia (disparador1, eco1); distL =dist; if (distL <10) // Presionado manualmente {Serial.println ("Volumen aumentado"); delay (300);} if (distL> 20) // Mano sacada {Serial.println ("Volumen disminuido"); delay (300);}}}} // Bloquear a la derecha - Modo de controlif (distR> =13 &&distR <=17) {delay (100); // Tiempo de espera de mano calculate_distance (trigger2, echo2); distR =dist; if (distR> =13 &&distR <=17) {Serial.println ("Bloqueado a la derecha"); while (distR <=40) {calcular_distancia (disparador2, eco2); distR =dist; if (distR <10) // Mano derecha presionada {Serial.println ("Rebobinar"); delay (300);} if (distR> 20) // Mano derecha sacada {Serial.println ("Adelante"); retraso (300);}}}} retraso (200);} 
Fragmento de código n. ° 6 Texto sin formato
 import serial #Serial importado para comunicación serialimport time #Required para usar funciones de retardoimport pyautogui #Required to para realizar accionesArduinoSerial =serial.Serial ('com15', 9600) #Crear un objeto de puerto serial llamado arduinoSerialDatatime.sleep (2) #wait durante 2 segundos para que la comunicación se establezca mientras 1:entrante =str (ArduinoSerial.readline ()) # lea los datos en serie e imprímalos como línea de impresión entrante si 'Reproducir / Pausa' en entrante:pyautogui.typewrite (['espacio' ], 0.2) si 'Rebobinar' en entrante:pyautogui.hotkey ('ctrl', 'izquierda') si 'Adelante' en entrante:pyautogui.hotkey ('ctrl', 'derecha') si 'Volumen incrementado' en entrante:pyautogui.hotkey ('ctrl', 'abajo') si 'Volumen disminuido' en la entrada:pyautogui.hotkey ('ctrl', 'arriba') entrante =""; 

Proceso de manufactura

  1. Hacer Monitor Ambilight usando Arduino
  2. Control remoto universal usando Arduino, 1Sheeld y Android
  3. Voltímetro de bricolaje con Arduino y un teléfono inteligente
  4. Uso de IoT para controlar de forma remota un brazo robótico
  5. Medición de frecuencia y ciclo de trabajo con Arduino
  6. Controla Arduino Rover usando Firmata y el controlador Xbox One
  7. Pistola de agua con sensor de movimiento
  8. Control del brillo del LED usando Bolt y Arduino
  9. Brazo robótico simple e inteligente con Arduino
  10. Control total de su televisor con Alexa y Arduino IoT Cloud
  11. Radio FM usando Arduino y RDA8057M