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

Control de actuador y sensor Raspberry Pi

Normalmente, como programador, trabajará con datos en disco y, si tiene suerte, hará dibujos en la pantalla. Esto contrasta con la informática física, que le permite a usted, como programador, trabajar con datos detectados en el mundo real y controlar dispositivos que se mueven en el mundo real.

Objetivo

Utilice una Raspberry Pi para leer el valor del acelerómetro y controlar un servomotor.

Definiciones

En este artículo, repasaré cuatro proyectos básicos de Python para demostrar las capacidades de hardware de Raspberry Pi. Esos proyectos son:

Hacer parpadear un LED.

Un LED es un diodo emisor de luz. Un diodo es un elemento de circuito que permite que la corriente fluya en una dirección pero no en la otra. Medios emisores de luz ... emite luz. Su LED típico necesita corriente en el rango de 10-30 mA y caerá alrededor de 2-3 voltios. Si conecta un LED directamente al GPIO de su Pi, generará mucho más de 30 mA y probablemente freirá su LED (y posiblemente su Pi). Para evitar esto tenemos que poner una resistencia. Si quieres hacer matemáticas, puedes calcular la resistencia apropiada usando la siguiente ecuación:

 R =(Vs - Vd) / I 

Pero si no quiere hacer matemáticas, elija una resistencia entre 500-1500 ohmios. Una vez que haya reunido todos los elementos de su circuito (LED y resistencia)

El código también es bastante simple. Pero primero deberá instalar RPi.GPIO. (Puede venir preinstalado en su sistema operativo).

 import timefrom itertools import cycleimport RPi.GPIO as ioio.setmode (io.BCM) io.setup (12, io.OUT) o =cycle ([1, 0]) while True:io.output (12, o .next ()) time.sleep (0.5) 

Las líneas importantes básicamente son:

 io.setup (12, io.OUT) io.output (12, 1) 

Estas líneas de código configuran el pin 12 como salida y luego dan salida a 1 (3,3 voltios). Ejecute el código anterior conectado al circuito y debería ver su LED parpadeando cada medio segundo.

Leer una olla.

Una olla es la abreviatura de potenciómetro, que es una resistencia variable. Esta es solo una palabra elegante para perilla. Básicamente, al girar la perilla, se afecta la resistencia, lo que afecta el voltaje a través de la olla. ( V =IR , ¿recordar?). Cambiar el voltaje en relación con algún valor físico es la cantidad de sensores que funcionan, y esta clase de sensor se conoce como sensor analógico . ¿Recuerdas cuando dije que los pines GPIO solo pueden representar un estado binario? Tendremos que llamar a la ayuda de un poco más de silicio para convertir ese valor de voltaje analógico en un flujo binario de bits que nuestro Pi puede manejar.

Ese trozo de silicio se conoce como un convertidor analógico a digital (ADC). El que me gusta se llama MCP3008, tiene 8 canales de 10 bits, lo que significa que podemos leer los valores de 8 sensores con una resolución de 1024 cada uno (2 ^ 10). Esto mapeará nuestro voltaje de entrada de 0 - 3.3 voltios a un número entero entre 0 y 1023.

He convertido el Pi en etiquetas amarillas efímeras para simplificar el diagrama

Para hablar con el chip, necesitaremos un paquete de Python llamado spidev. Para obtener más información sobre el paquete y cómo funciona con el MCP3008, consulte esta excelente publicación de blog

Con spidev instalado y el circuito construido, ejecute el siguiente programa para leer los valores de los sensores en vivo e imprimirlos en la salida estándar.

 import spidev import timespi =spidev.SpiDev () spi.open (0,0) def readadc (adcnum):si no es 0 <=adcnum <=7:return -1 r =spi.xfer2 ([1, ( 8 + adcnum) <<4, 0]) adcout =((r [1] &3) <<8) + r [2] return adcout while True:val =readadc (0) print val time.sleep (0.5) 

Las partes más importantes son estas dos líneas:

 r =spi.xfer2 ([1, (8 + adcnum) <<4, 0]) adcout =((r [1] &3) <<8) + r [2] 

Envían el comando de lectura y extraen los bits devueltos relevantes. Consulte la publicación del blog que vinculé anteriormente para obtener más información sobre lo que está sucediendo aquí.

Transmitir datos.

Para transmitir datos a través del cable, usaremos la biblioteca de redes ØMQ e implementaremos el patrón REQUEST / REPLY. ØMQ hace que sea muy sencillo configurar un cliente y un servidor en Python. El siguiente es un ejemplo de trabajo completo.

Servidor

 importar zmqcontext =zmq.Context () socket =context.socket (zmq.REP) socket.bind ('tcp:// *:1980') while True:message =socket.recv () imprimir mensaje socket.send ("Estoy aquí") 

Cliente

 import zmqcontext =zmq.Context () socket =context.socket (zmq.REQ) a ='tcp://192.168.1.6:1980'socket.connect (a) para solicitud en el rango (10):socket. enviar ('¿Estás en casa?') mensaje =socket.recv () imprimir mensaje 

Ahora podemos usar rasgos y enaml para crear una bonita interfaz de usuario en el lado del cliente. Consulte la demostración de acc_plot en el repositorio de github para ver un ejemplo de los datos de transmisión de Pi a través del cable que un cliente trazará.

Controla un servo

Los servos son motores (a menudo pequeños) que puede conducir a determinadas posiciones. Por ejemplo, para un servo dado, es posible que pueda configurar el eje de transmisión de 0 a 18o grados, o en cualquier punto intermedio. Como puede imaginar, esto podría ser útil para muchas tareas, entre las que se encuentra la robótica.

La rotación del eje se controla mediante la modulación de ancho de pulso (PWM) en la que codifica la información en la duración de un pulso de alto voltaje en los pines GPIO. La mayoría de los servos de hobby siguen un significado de ancho de pulso estándar. Un pulso de 0.5 ms significa ir a su posición mínima y un pulso de 2.5 ms significa ir a su posición máxima. Ahora repita este pulso cada 20 ms y estará controlando un servo.

El ancho del pulso es mucho más crítico que la frecuencia

Este tipo de tiempos no son posibles con Python. De hecho, no son realmente posibles con un sistema operativo moderno. Una interrupción podría aparecer en cualquier momento en su código de control, causando un pulso más largo de lo deseado y un jitter en su servo. Para cumplir con los requisitos de tiempo, tenemos que ingresar al divertido mundo de los módulos del kernel. ServoBlaster es un módulo del kernel que hace uso de los bloques de control DMA para omitir la CPU por completo. Cuando se carga, el módulo del kernel abre un archivo de dispositivo en / dev / servoblaster en el que puede escribir comandos de posición.

Escribí una pequeña capa orientada a objetos alrededor de esto que simplifica el control de servo. Puede encontrar mi biblioteca aquí:

https://github.com/jminardi/RobotBrain

Simplemente conecte el servo a 5v y a tierra en su Pi y luego conecte el cable de control al pin 4.

El código de Python es bastante simple:

 import timeimport numpy as npfrom robot_brain.servo import Servoservo =Servo (0, min =60, max =200) for val in np.arange (0, 1, 0.05):servo.set (val) time.sleep ( 0.1) 

Todo lo que tienes que hacer es crear una instancia de un servo y llamar a su set () método con un valor de punto flotante entre 0 y 1. Consulte la demostración de servo_slider en github para ver el servocontrol implementado en la red.

Para más detalles:Sensor Raspberry Pi y control de actuador


Proceso de manufactura

  1. Comunicación MQTT entre NodeMCU y Raspberry Pi 3 B +
  2. Registrador de temperatura Raspberry Pi
  3. Mide temperaturas con un sensor DS18B20 de 1 cable y Raspberry Pi
  4. Sensor de temperatura Python y Raspberry Pi
  5. Estación meteorológica Raspberry Pi
  6. Sensor ultrasónico (HC-SR04) + Raspberry Pi
  7. Sensor de movimiento con Raspberry Pi
  8. Sensor de humedad del suelo Raspberry Pi
  9. Sensor de pasillo digital Raspberry Pi en JAVA
  10. Sensor de temperatura y luz Raspberry Pi
  11. Sensor de luz habilitado para voz y SMS con Raspberry Pi y Twilio