Tabla de contenido:

Color-pi: 9 pasos
Color-pi: 9 pasos

Video: Color-pi: 9 pasos

Video: Color-pi: 9 pasos
Video: draw and color - 9 шагов рисования - 3 шага раскраски для Даффи Дак 2024, Octubre
Anonim
Color-pi
Color-pi

Este instructivo muestra cómo usar una Raspberry Pi para controlar por voz una tira de LED RGB, a través de un sitio web, utilizando las interfaces Web Speech API para SpeechRecognition y SpeechSynthesis.

Este ejemplo muestra cómo

  • Cree un sitio web básico usando Node.js sobre
  • Utilice las interfaces API de Web Speech para SpeechRecognition y SpeechSynthesis.
  • Utilice el marco Cylon.js para controlar una tira de LED RGB en una Raspberry Pi
  • Comuníquese a través de WSS (Secure Web sockets) desde la página web a Cylon.js para controlar el color del LED

Nota

  • Necesitará parlantes o auriculares para escuchar el sintetizador de voz.
  • Deberá dar acceso a su micrófono para que funcione el reconocimiento de voz
  • Debido a que este acceso a su micrófono, el sitio debe ejecutarse bajo
  • La biblioteca cylon-api-socketio no admite https en este momento. Tengo una solicitud de extracción a la espera de ser fusionada, pero hasta entonces debe reemplazar /node_modules/cylon-api-socketio/lib/api.js con el archivo en este repositorio
  • Se necesita pi-blaster para que esto funcione.

Paso 1: Equipo

  1. Raspberry Pi: utilicé una Raspberry Pi 2B que tenía por ahí, pero puede obtener un kit de inicio de Raspberry Pi 3 por alrededor de CAD 100
  2. Tira de luz LED RGB: estaba jugando con la tira de luz LED Minger de 32,8 pies / 10 M 600 leds RGB SMD 5050. Viene con un controlador y una fuente de alimentación por aproximadamente 40 dólares canadienses.
  3. Conector de barril: compré uno en mi tienda de electrónica local, algo como esto. Solo asegúrese de que se ajuste a su fuente de alimentación
  4. Conectores de puente / cable: tenía algunos cables de conector hembra a macho y un cable de conexión sólido de calibre 22 por ahí
  5. Placa de circuito impreso prototipo sin soldadura de placa de pruebas: algo como esto
  6. 3 resistencias de 10 kΩ
  7. 3 x MOSFET de canal N para controlar los LED: compré algunos IRL3303 en mi tienda electrónica local. Es importante que el voltaje de umbral de las puertas sea máximo. 3.3V para que pueda ser impulsado por los pines RPi; generalmente denotado por una 'L' (Nivel lógico) en el nombre.

Paso 2: Configurar la Raspberry Pi

Sistema operativo

Normalmente uso la última versión de Raspbian. Descarga la imagen y escríbela en la tarjeta SD. Si está usando una computadora con Windows, puede usar Win32 Disk Imager para escribir la imagen en la tarjeta SD.

Node.js

Instale la última versión de Node.js. En el momento de escribir este artículo, estoy usando 8.9.1

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -

sudo apt-get install nodejs

Instalar Git

sudo apt-get install git

Paso 3: Pi-blaster

Pi-blaster
Pi-blaster

pi-blaster habilita PWM en los pines GPIO que solicita de una Raspberry Pi. La técnica utilizada es extremadamente eficiente: no usa la CPU y da pulsos muy estables.

Esta modulación de ancho de pulso permite que la Raspberry Pi controle el brillo de cada uno de los canales rojo, verde y azul para la tira de LED.

Primero, clona el repositorio

cd / opt /

sudo git clone https://github.com/sarfata/pi-blaster.git sudo chown -R pi: pi pi-blaster

Luego, compile e instale

cd / opt / pi-blaster./autogen.sh &&./configure && make && sudo make install

Finalmente, configura qué pines quieres usar

En la cuenta raíz, o usando sudo, cree y edite el archivo

/ etc / default / pi-blaster

Agrega las siguientes líneas

DAEMON_OPTS = - gpio 23, 24, 25

Estos pines gpio deben coincidir con los pines que está conectando a su tira de LED.

NOTA: Existe una diferencia entre GPIO y el número de pin. Este ejemplo utiliza lo siguiente

LED - Azul, GPIO-23, Pin - 16

LED - Rojo, GPIO-24, Pin - 18 LED - Verde, GPIO-25, Pin - 22

Ajustes adicionales

Iniciar pi-blaster

sudo service pi-blaster start

Reiniciar pi-blaster

reinicio del pi-blaster del servicio sudo

Detener pi-blaster

sudo service pi-blaster stop

Inicie pi-blaster automáticamente en el momento del arranque

sudo systemctl habilitar pi-blaster

Advertencias y otras advertencias

Los pines que utiliza pi-blaster se configurarán como salidas. ¡No conectes nada en una entrada o podrías destruirlo! Este demonio usa el generador PWM de hardware de la raspberry pi para obtener tiempos precisos. Esto podría interferir con la salida de su tarjeta de sonido.

Paso 4: Configuración del código de ejemplo

Clonar el código de ejemplo

1. Configure una carpeta base para instalar en

cd / opt

sudo mkdir com.jonhaydock sudo chown pi: pi com.jonhaydockcd com.jonhaydock

2. Clonar el repositorio de git de ejemplo

clon de git

o

git clone [email protected]: haydockjp / color-pi.git

3. Instale las dependencias

cd color-pi

npm install

Esto puede tardar entre 2 y 3 minutos.

4. Este proyecto necesita comunicarse a través de HTTPS y WSS. En este momento, cylon-api-socketio no admite conexiones SSL. Hay una solicitud de extracción abierta para agregar este soporte, pero hasta que se fusione, hay un archivo de parche en este repositorio. Ejecute el siguiente comando después de la instalación de npm

git checkout módulos_nodo / cylon-api-socketio / lib / api.js

Paso 5: cree un certificado SSL autofirmado

1. Cree un archivo de clave privada

cd /opt/com.jonhaydock/colour-pi/certs

openssl genrsa -out color-pi-key.pem 2048

2. Cree una CSR (solicitud de firma de certificado)

openssl req -new -key color-pi-key.pem -out color-pi-csr.pem

En este punto, se le pedirá información para la solicitud de certificado. Como se trata de un certificado autofirmado, depende de usted la precisión con la que complete los detalles. Aquí hay un ejemplo

Nombre del país (código de 2 letras) [AU]: CA

Nombre del estado o provincia (nombre completo) [Algún estado]: Nombre de la localidad de Columbia Británica (por ejemplo, ciudad) : Nombre de la organización de Vancouver (por ejemplo, empresa) [Internet Widgits Pty Ltd]: Nombre de la unidad organizativa de Color Pi (por ejemplo, sección) : Nombre común (p. Ej. FQDN del servidor o SU nombre) : color-pi Dirección de correo electrónico : [email protected]

Una contraseña reto :

Un nombre de empresa opcional :

En este ejemplo, simplemente presione retorno para dejar la contraseña de desafío en blanco

3. Genere el certificado

openssl x509 -req -days 1095 -in color-pi-csr.pem -signkey color-pi-key.pem -out color-pi-cert.pem

4. Para mayor seguridad, también crearemos un archivo de parámetros Diffie Hellman

openssl dhparam -out dh_2048.pem 2048

Esto puede tardar entre 15 y 20 minutos.

Paso 6: cableado del circuito

Cableado del circuito
Cableado del circuito
Cableado del circuito
Cableado del circuito
Cableado del circuito
Cableado del circuito
Cableado del circuito
Cableado del circuito

Encender la tira de LED

La tira de LED funciona con 12 voltios. La Raspberry Pi solo es capaz de producir 3.3v o 5v y no es capaz de producir en ningún lugar cerca de los amperios necesarios para impulsar tantos LED.

Es importante no conectar la fuente de alimentación de 12 voltios a la Raspberry Pi. Los transistores MOSFET de canal N se utilizan para separar los 3.3v en los pines RPi y los 12v de la fuente de alimentación LED.

El MOSFET tiene tres pines Gate, Drain y Source. Si no está seguro de cuál es qué google para la hoja de datos del transistor que está utilizando, p. Ej. IRL3303

Vamos a conectar el Pin Raspberry Pi a la puerta, el cable LED al drenaje y una tierra común a la fuente. Cuando el Pin sube, el voltaje entre el Drenaje y la Fuente activará la Puerta y conectará la puerta a la Fuente.

También vamos a colocar resistencias de 10kΩ a través de la puerta y la fuente, de modo que cuando el pin RPi esté alto, podamos proteger el pin reduciendo la corriente que lo atraviesa.

Realice los siguientes pasos bajo su propia responsabilidad. No me hago responsable de nada que pueda salir mal

Hay una imagen fritzing y una foto del circuito real arriba.

Recomendaría hacer esto mientras el RPi y la tira de LED están apagados.

Configure los circuitos de transistores, uno por canal de color

  1. Inserte uno de los transistores en la placa de pruebas como se muestra en el diagrama
  2. Inserte una de las resistencias de 10 kΩ a través de los pines de drenaje y fuente del transistor. Este es el primer y último pin
  3. Use un poco de cable para conectar el pin de la fuente (último pin) al suelo en la placa de pruebas
  4. Repita los pasos 1-3 dos veces más, de modo que tenga tres juegos, uno por color (rojo, verde y azul)

Conecte los pines RPi a la placa

  1. Conecte el pin 16 al pin de la puerta (primer pin) del primer transistor: este será el canal del LED azul
  2. Conecte el pin 18 al pin de la puerta (primer pin) del primer transistor: este será el canal del LED rojo
  3. Conecte el pin 20 a una de las líneas de tierra en el costado de la placa de pruebas
  4. Conecte el pin 22 al pin de la puerta (primer pin) del primer transistor: este será el canal LED verde

He utilizado colores de cables a juego con los LED: azul, rojo y verde. He usado negro para el suelo

Conecte el conector de barril

  1. Conecte un cable blanco al extremo + del conector de barril
  2. Conecte un cable negro al - extremo del conector de barril
  3. Conecte el cable negro a la misma línea de tierra en la placa de pruebas a la que se conectó el pin 20 del RPi
  4. Conecte el cable blanco a la línea + en la placa de pruebas

Conectando la tira de LED

Mi tira de LED venía con un conector que era de un tamaño lo suficientemente bueno como para poder enchufarlo temporalmente a la placa de pruebas. Empujé el conector en la placa de pruebas y lo conecté a la prueba del circuito.

  1. El primer transistor conectado a la clavija 16. Pasé un cable azul desde la clavija de drenaje (clavija central) hasta el cable azul en el conector de la tira de LED
  2. El segundo transistor conectado al pin 18. Pasé un cable rojo desde el

    Drenar

    pin (pin central) al cable rojo en el conector de la tira de LED

  3. El tercer transistor conectado al Pin 22. Pasé un cable verde desde el

    Drenar

    pin (pin central) al cable verde en el conector de la tira de LED

  4. Finalmente, pasé un cable blanco desde la línea + en la placa de pruebas que estaba conectada al conector de barril, hasta el cable blanco en el conector de la tira de LED.

Poder

Después de verificar el circuito, debería estar listo para encender la Raspberry Pi y conectar el suministro de 12v al conector de barril.

Paso 7: Código del lado del servidor

Código del lado del servidor
Código del lado del servidor

Ejecutando el código del lado del servidor

cd /opt/com.jonhaydock/colour-pi

sudo npm start

Esto iniciará el servidor web y comenzará a escuchar solicitudes HTTPS y WSS.

NOTA: Recuerde tener pi-blaster ejecutándose primero

Variables de entorno

El puerto del sitio web predeterminado es 443, pero puede anularlo configurando una variable de entorno antes de iniciar el código. Por ejemplo

exportar COLOUR_PI_PORT = 2443

El puerto de socket web predeterminado es 1443, pero puede anularlo configurando una variable de entorno antes de iniciar el código. Por ejemplo

exportar COLOUR_PI_WSS_PORT = 3443

Nota: Como el web socket lo maneja cylon.js y no el sitio web principal, estos deben estar en puertos diferentes

Los pines que se utilizan para el azul (pin 16), verde (pin 18) y rojo (pin 22) también se pueden anular. Por ejemplo

exportar COLOUR_PI_PIN_BLUE = 36

exportar COLOUR_PI_PIN_RED = 38 exportar COLOUR_PI_PIN_GREEN = 40

Nota: Deben coincidir con los pines físicos que utilizó. Si los cambia, también necesitará actualizar los GPIO definidos en el archivo / etc / default / pi-blaster. Por ejemplo

DAEMON_OPTS = - gpio 16, 20, 21

El código del servidor principal se puede encontrar en el archivo app.js. Este archivo inicia el servidor web HTTPS y también, a través del marco Cylon.js, usa socket.io para escuchar las solicitudes de sockets web en un puerto separado.

Para acceder al sitio web, debe abrir un navegador web en su computadora principal (solo lo he probado en Chrome) y usar la dirección IP de la Raspberry Pi, p. Ej.

10.0.1.2/

Puede averiguar su dirección IP desde la línea de comando de Raspberry Pi.

ifconfig

El servidor web servirá cualquier contenido en la carpeta pública. De forma predeterminada, muestra la página index.html.

Cylon.js crea un punto final al que puede conectar Socket.io.

10.0.1.2:1443/api/robots/colour-pi

Puede enviar un mensaje set_colour a través del enchufe para configurar los valores de rojo, verde y azul

device.emit ('set_colour', r, g, b)

Que llama al comando set_colour, que llama a la función setColour en app.js. Esta función establece los niveles de brillo, para cada uno de los valores R, G y B, entre 0 y 255. Donde 0 está apagado y 255 está completamente encendido.

p.ej.

Rojo r = 255, g = 0, b = 0

Verde r = 0, g = 255, b = 0 Azul r = 0, g = 0, b = 255 Blanco r = 255, g = 255, b = 255 Negro / Apagado r = 0, g = 0, b = 0

Paso 8: Código del sitio web

Código del sitio web
Código del sitio web

General

El sitio web utiliza el reconocimiento de voz para seleccionar colores de una lista predefinida. Para agregar un color a la lista, edite el archivo en el servidor: public / data / colours.json

p.ej.

"rojo": "# FF0000", Cuando se encuentra un color, o se selecciona del menú desplegable, el cuadro de Salida se establecerá en ese color y se enviará un mensaje a través de socket.io a la Raspnerry Pi, que establecerá los LED en el mismo color.

NOTA: dependiendo de qué tan buenos sean sus LED, es posible que vea o no un color similar. Algunos son más fáciles de duplicar que otros

Cuando cargue el sitio web por primera vez, como está utilizando un certificado SSL autofirmado, deberá reconocerlo en el navegador. Debería ver una alerta de seguridad sobre el certificado.

Reconocimiento de voz

Este cuadro tiene un icono de micrófono. Si hace clic en el icono cuando está verde, comenzará a escuchar los colores. Mientras está escuchando, se pondrá rojo. Escuchará durante un breve período de tiempo y luego se detendrá. Hacer clic en el icono del micrófono cuando está en rojo también impedirá que escuche.

Como este sitio necesita acceder a su micrófono, deberá otorgarle permiso cuando se le solicite

NOTA: Necesita un micrófono para esta parte. Yo uso el de mi cámara web.

Transcripción provisional

Este cuadro rastrea las suposiciones de las palabras que está diciendo, a medida que las está diciendo.

Transcripción final

Este cuadro rastrea la suposición final de lo que dijiste.

Colores conocidos

Esta es una lista de todos los colores que conoce la página. Se crea a partir del archivo colours.json. Si selecciona uno de estos colores, la página dirá el color y establecerá el color de salida.

NOTA: Necesita parlantes o auriculares para escuchar el discurso.

Colores encontrados

Actualmente, esta página web solo admite hacer coincidir el color. Si la palabra o palabras que pronunció en el micrófono coincide con el nombre de un color conocido, o si selecciona un color de la lista de colores conocidos, se agregará aquí como un registro.

Producción

El último color encontrado se mostrará aquí. El valor de color hexadecimal (por ejemplo, # 7cb9e8) y el valor RGB (por ejemplo, 124, 185, 232) se mostrarán como texto y el fondo del cuadro en el medio se establecerá en el color real.

Este color también se envía a la Raspberry Pi y debería ver cómo cambia el color de la tira de LED.

NOTA: si no ve el cambio de color del LED, intente reiniciar pi-blaster y / o la aplicación node.js

reinicio del pi-blaster del servicio sudo

sudo npm start

Voces conocidas

Este cuadro muestra una lista de "Voces conocidas" de la síntesis de voz admitida. Al seleccionar una de estas voces, se cambiará la voz y el idioma que escuchará, y se pronunciará el nombre de la voz.

También cambiará el idioma del SpeechRecognition para que sea el mismo que el elegido en la lista.

Paso 9: finalmente

Image
Image

A continuación, se muestra un ejemplo de lo que debería ver.

Por favor, avíseme si tiene algún problema y puedo actualizar según sea necesario.

Recomendado: