Tabla de contenido:

Un sensor de color parlante, basado en el kit de voz AIY: 4 pasos
Un sensor de color parlante, basado en el kit de voz AIY: 4 pasos

Video: Un sensor de color parlante, basado en el kit de voz AIY: 4 pasos

Video: Un sensor de color parlante, basado en el kit de voz AIY: 4 pasos
Video: Introducción a la robótica educativa mediante hardware libre.Caso de uso arduino Uno y Raspberry Pi. 2024, Noviembre
Anonim
Un sensor de color parlante, basado en el kit de voz AIY
Un sensor de color parlante, basado en el kit de voz AIY
Un sensor de color parlante, basado en el kit de voz AIY
Un sensor de color parlante, basado en el kit de voz AIY
Un sensor de color parlante, basado en el kit de voz AIY
Un sensor de color parlante, basado en el kit de voz AIY
Un sensor de color parlante, basado en el kit de voz AIY
Un sensor de color parlante, basado en el kit de voz AIY

Habiendo aprendido un poco sobre Braille recientemente, me preguntaba si podría construir algo usando el kit de voz AIY para Raspberry Pi, que puede tener un beneficio real para las personas con discapacidad visual. Como se describe a continuación, encontrará un prototipo de un dispositivo de detección de color simple que lee sus hallazgos en voz alta.

Una versión más elaborada de este sistema podría ser útil para personas con discapacidad visual o daltonismo.

El sistema utiliza una Raspberry Pi con un SOMBRERO de voz AIY adjunto. Una ruptura del sensor TCS34725 RGB está conectada al puerto I2C del HAT. La ruptura contiene un LED blanco cálido brillante para iluminar el objeto que se analizará. La ruptura se colocó en una carcasa para optimizar y estandarizar las condiciones de medición.

El sensor de tres colores mide aproximadamente los mismos tres rangos de frecuencia que los sensores de color en sus ojos. Luego, los valores de rojo, verde y azul (RGB) se utilizan para calcular la impresión de color general.

Lo bueno de este sistema especial es que ahora te dice el color verbalmente, usando el comando "decir" de los kits de voz AIY. Por favor, eche un vistazo al video adjunto.

El dispositivo también podría ser útil como ejemplo para un dispositivo sensor I2C conectado al AIY voice HAT.

Paso 1: Materiales utilizados

Raspberry Pi 3. ~ 35 US $ o EUR

Kit de voz AIY, con encabezados soldados al HAT. ~ 25US $ o EUR

Rotura Adafruit TCS34725, con un cabezal soldado. ~ 8 dólares estadounidenses o euros

Cables de salto.

Una placa de pruebas (opcional)

Para la carcasa del sensor: - una cápsula de café "Dolce Gusto" usada - una pequeña pieza redonda de Forex (placa de espuma de PVC) de 2 mm, de unos 37 mm de diámetro - un material negro no reflectante para cubrir las paredes internas de la carcasa. Usé espuma de goma negra autoadhesiva.

Opcional: un pequeño interruptor para evocar las medidas.

Unas gotas de pegamento plástico y un cúter.

Paso 2: montaje y uso

Montaje y uso
Montaje y uso
Montaje y uso
Montaje y uso
Montaje y uso
Montaje y uso

La Raspberry Pi con AIY voice HAT se configuró como se describe en el manual AIY. Antes del montaje, los encabezados se soldaron a los puertos del HAT. Para la carcasa del sensor, se vació una cápsula de café "Dulce Gusto", se limpió y una parte del fondo se retiró cuidadosamente con un cuchillo. Puede usar otra cosa para este propósito, la cápsula de café tenía el tamaño y la forma correctos. Se cortó una pieza redonda de Forex de 2 mm de una placa, luego se colocó la ruptura en el centro de la placa de Forex, se marcó la posición con un rotulador y se cortó una ranura para el encabezado en la ruptura en la posición apropiada.

Ahora, la pieza de Forex se pegó a la carcasa y la ruptura del sensor se unió a la placa de Forex, usando una tira de velcro. Luego, las paredes internas se cubrieron con un material negro que absorbe la luz, utilicé una espuma de goma autoadhesiva. El cartón negro también debería funcionar. Ahora, usando cables de puente, el puerto I2C "3.3V" del HAT se conectó a "V in" en el sensor, tierra a tierra, sda a sda y scl a scl. Había usado una placa de pruebas para conectar ambas partes, pero eso no es necesario.

Coloque el script de Python AIY_TCS34725 en la carpeta src y ejecute el script desde la terminal de desarrollo, ingresando "sec / AIY_TCS34752.py". Es posible que primero deba hacer que el script de Python sea ejecutable. Cuando se le solicite, coloque la unidad del sensor sobre el objeto a medir, presione el botón en el dispositivo AIY y espere uno o dos segundos.

Luego, basándose en los valores de blanco y RGB medidos, el dispositivo calcula primero el valor de tono correspondiente, luego estima el color en función de este valor y los comunica verbalmente a través del sistema de voz AIY, e. gramo. como "rojo oscuro", pero también da el valor de tono. Los valores de RGB, tono y brillo (luminosidad, para ser exactos) también se imprimen en la pantalla.

Para simplificar el proceso de anotación de color, los valores RGB se transforman en formato HSV (tono, saturación, valor). Esto permite anotar un color en un cierto rango de ángulos (es decir, un sector circular) y elegir el color en función del valor de tono calculado.

Necesita normalizar su dispositivo contra una referencia blanca y negra. Simplemente mida las hojas de papel más blancas y negras que tenga disponibles, tome una medida de cada una y coloque estos valores como valores máximo y mínimo en el código. Solo los valores de referencia óptimos darán un buen reconocimiento de color.

Un problema básico es la reflexión. Si tiene un objeto con una superficie brillante o pulida, reflejará gran parte de la luz emitida por el LED y parecerá mucho más claro de lo que realmente es. Puede usar una lámina de membrana para dispersar la luz, pero es posible que deba implementar un factor de corrección.

En el caso de objetos translúcidos, puede ser útil colocarlos en un papel blanco, de lo contrario, la cantidad de luz reflejada será demasiado pequeña y el objeto se informará como "negro".

Si desea medir el color de los objetos que emiten luz, debe apagar el LED en el breakout conectando el puerto "LED" en el breakout a "Ground". Ahora establezca los valores de normalización en consecuencia.

Otro problema general es la iluminación del objeto. El LED blanco cálido en la salida emite un espectro de luz no continuo. Por lo tanto, ciertos colores pueden estar sobrerrepresentados o subrepresentados en el espectro RGB. Para obtener más información sobre este tema, eche un vistazo a mis instrucciones anteriores sobre colorímetros / fotómetros y espectrómetros:

www.instructables.com/id/An-Inexpensive-Ph…

www.instructables.com/id/A-Mimimal-Six-Col…

Paso 3: el código

El código
El código

El código es una combinación de una modificación de un código del manual de voz AIY y el código del sensor TCS34725 de Bradspi.

También intenté usar el código Python TCS34725 de Adafruit, pero tuve problemas para ejecutar este y algunos otros códigos que usan bibliotecas externas en combinación con AIY HAT. Cualquier ayuda bienvenida.

Como se mencionó anteriormente, la anotación de color se basa en una transformación del RGB a valores de tono. Debe establecer la configuración de normalización basada en mediciones experimentales de materiales de reverencia blancos y negros. Complete los valores absolutos para R, G y B mínimo o máximo según corresponda.

El script utiliza una nueva versión del comando "decir" que permite regular el volumen y el tono. En caso de que tenga que actualizar los archivos del controlador audio.py y tty o eliminar las "partes de volumen y tono" del script.

#! / usr / bin / env python3 # Este script es una adaptación del script servo_demo.py para AIY voice HAT, # optimizado para el reconocimiento de color con el Afafruit TCS34725 breakout import aiy.audio import aiy.cloudspeech import aiy.voicehat #desde gpiozero import LED # podría ser útil para un LED externo en el puerto de servo #desde gpiozero import Button # podría ser útil para un botón externo en el servopuerto import time import smbus bus = smbus. SMBus (1) import colorsys def hue2color (tono): # interpretación del color basada en los valores de tono calculados si ((tono> 12) y (tono 25) y (tono 69) y (tono 164) y (tono 194) y (tono 269) y (tono 319) o (tono <20)): color = "rojo" return color else: print ("algo salió mal")

def tcs34725 (): # medición e interpretación.

# La medición se realiza mediante el script Bradspi TCS34725: # https://bradsrpi.blogspot.com/2013/05/tcs34725-rg… bus.write_byte (0x29, 0x80 | 0x12) ver = bus.read_byte (0x29) # versión # debe ser 0x44 si ver == 0x44: print ("Dispositivo encontrado / n") bus.write_byte (0x29, 0x80 | 0x00) # 0x00 = ENABLE registro bus.write_byte (0x29, 0x01 | 0x02) # 0x01 = Encendido, 0x02 Sensores RGB habilitados bus.write_byte (0x29, 0x80 | 0x14) # Los resultados de lectura inician el registro 14, LSB luego MSB data = bus.read_i2c_block_data (0x29, 0) clear = clear = data [1] << 8 | datos [0] rojo = datos [3] << 8 | datos [2] verde = datos [5] << 8 | datos [4] azul = datos [7] << 8 | data [6] crgb = "Recuentos absolutos: C:% s, R:% s, G:% s, B:% s / n"% (claro, rojo, verde, azul) print (crgb) time.sleep (1) else: print ("Dispositivo no encontrado / n") # normalización y transformación de los valores RGBW medidos col = "" # Valores máximos Factores de normalización, deben definirse experimentalmente # ej. frente a una hoja de papel en blanco. Verifique y corrija de vez en cuando. max_bright = 5750 max_red = 1930 max_green = 2095 max_blue = 1980 # Factores de normalización de antecedentes / valores mínimos, deben definirse experimentalmente # p. ej. vs hoja de papel negra. Verifique y corrija de vez en cuando. min_bright = 750 min_red = 340 min_green = 245 min_blue = 225 # valores normalizados, entre 0 y 1 rel_bright = ((clear - min_bright) / (max_bright - min_bright)) rel_red = ((red - min_red) / (max_red - min_red)) rel_green = ((verde - min_green) / (max_green - min_green)) rel_blue = ((azul - min_blue) / (max_blue - min_blue)) hsv_col = colorsys.rgb_to_hsv (rel_red, rel_green, rel_blue) tono = hsv_col [0] if rel_bright> 0.9: col = "white" # if very bright -> white elif rel_bright black else: col = hue2color (hue) # selección de color por valores de matiz # print ("valores relativos brillante, rojo, verde, azul:") # print (rel_bright, rel_red, rel_green, rel_blue) # print ("valores HSV (tono, saturación, valor):", hsv_col) # print ("tono en °", tono) return [col, rel_bright, rel_red, rel_green, rel_blue, matiz]

def principal ():

button = aiy.voicehat.get_button () # change Button status led = aiy.voicehat.get_led () # change Button-LED status aiy.audio.get_recorder (). start () # buttoni = Button (5) # sensor de distancia o otro botón externo, conectado a servo3 / GPIO 05

aiy.audio.say ("¡Hola!", volumen = 50, tono = 100) # ¡El volumen y el tono requieren la revisión de noviembre de 2017 del controlador audio.py y _tty.py!

aiy.audio.say ("Para comenzar, mueva el sensor sobre el objeto. Luego presione el botón azul", volumen = 50, tono = 100) print ("Para activar la medición de color, coloque el sensor sobre el objeto, luego presione el botón azul ") while True: led.set_state (aiy.voicehat. LED. ON) button.wait_for_press () # para el botón externo, reemplace el botón por buttoni led.set_state (aiy.voicehat. LED. BLINK) aiy.audio.say (" Midiendo ",, volumen = 50, tono = 100) resultado = tcs34725 () # evoca medición e interpretación col = resultado [0] # color, como texto tono = str (int (resultado [5])) # tono en °, como texto r_red = str (int (resultado [2] * 255)) # Valor R, como texto r_green = str (int (resultado [3] * 255)) # Valor G, como texto r_blue = str (int (resultado [4] * 255)) # Valor B, como texto r_bright = str (int (resultado [1] * 100)) # Valor W, como texto led.set_state (aiy.voicehat. LED. OFF) if col == "blanco "o col ==" negro ": brillante =" "elif (resultado [1]> 0.69): # brillo / claridad del color brillante =" claro "elif (resultado [1] <0.25): brillante =" oscuro "más: brillante = "medio" # comunicando t El resultado es color_text = ("El color del objeto es" + brillante + "" + col) print (color_text) aiy.audio.say (color_text`` volumen = 75, tono = 100) hue_text = ("El valor de tono es "+ tono +" grados ") print (tono_text) aiy.audio.say (tono_text`` volumen = 75, tono = 100)

if _name_ == '_main_': main ()

Paso 4: algunos enlaces y comentarios

La hoja de datos del sensor TCS34725 se puede encontrar aquí:

El código para leer el sensor que he utilizado se describió aquí:

Puede encontrar información adicional sobre las medidas de color con este y otro sensor en mis instrucciones anteriores:

www.instructables.com/id/An-Inexpensive-Ph…

www.instructables.com/id/A-Mimimal-Six-Col…

Recomendado: