Оглавление:

Говорящий датчик цвета на основе голосового набора AIY: 4 шага
Говорящий датчик цвета на основе голосового набора AIY: 4 шага

Видео: Говорящий датчик цвета на основе голосового набора AIY: 4 шага

Видео: Говорящий датчик цвета на основе голосового набора AIY: 4 шага
Видео: Arduino Nano 33 BLE Sense — плата с голосовым управлением, IMU, датчиком цвета и метеосенсором. 2024, Ноябрь
Anonim
Говорящий датчик цвета на основе голосового набора AIY
Говорящий датчик цвета на основе голосового набора AIY
Говорящий датчик цвета на основе голосового набора AIY
Говорящий датчик цвета на основе голосового набора AIY
Говорящий датчик цвета на основе голосового набора AIY
Говорящий датчик цвета на основе голосового набора AIY
Говорящий датчик цвета на основе голосового набора AIY
Говорящий датчик цвета на основе голосового набора AIY

Узнав немного о шрифте Брайля недавно, я подумал, смогу ли я создать что-нибудь, используя голосовой комплект AIY для Raspberry Pi, что может иметь реальную пользу для слабовидящих. Так, как описано ниже, вы найдете прототип простого устройства определения цвета, которое зачитывает результаты своих исследований вслух.

Более сложная версия этой системы может быть полезна людям с ослабленным зрением или дальтонизмом.

В системе используется Raspberry Pi с прикрепленной голосовой шляпой AIY. Разъем датчика RGB TCS34725 подключен к порту I2C HAT. Разъем содержит яркий теплый белый светодиод для освещения анализируемого объекта. Переходник был помещен в корпус для оптимизации и стандартизации условий измерения.

Трехцветный датчик измеряет примерно те же три частотных диапазона, что и цветовые датчики в ваших глазах. Затем значения красного, зеленого и синего (RGB) используются для расчета общего цветового восприятия.

Эта специальная система хороша тем, что теперь она сообщает вам цвет устно, используя команду «сказать» голосового набора AIY. Пожалуйста, посмотрите сопроводительное видео.

Устройство также может быть полезно в качестве примера для сенсорного устройства I2C, подключенного к голосовой шляпе AIY.

Шаг 1: Используемые материалы

Raspberry Pi 3. ~ 35 долларов США или евро

Голосовой комплект AIY с припаянными к HAT разъемами. ~ 25 долларов США или евро

Переходник Adafruit TCS34725, с припаянным заголовком. ~ 8 долларов США или евро

Соединительные кабели.

Макетная плата (по желанию)

Для корпуса датчика: - использованная кофейная капсула «Dolce Gusto» - небольшой круглый кусок Forex 2 мм (пластина из вспененного ПВХ), диаметром около 37 мм - неотражающий черный материал для покрытия внутренних стенок корпуса. Я использовал самоклеящуюся поролон черного цвета.

Дополнительно: небольшой переключатель для вызова измерений

Несколько капель пластикового клея и резак.

Шаг 2: сборка и использование

Сборка и использование
Сборка и использование
Сборка и использование
Сборка и использование
Сборка и использование
Сборка и использование

Raspberry Pi с голосовой шапкой AIY был настроен, как описано в руководстве AIY. Перед сборкой коллекторы припаивались к портам на HAT. Из корпуса датчика опустошили, очистили кофейную капсулу "Dulce Gusto" и осторожно удалили ножом часть дна. Для этой цели можно использовать что-нибудь другое, капсула с кофе как раз имела нужный размер и форму. Круглый кусок Forex 2 мм был вырезан из пластины, затем отверстие было размещено по центру пластины Forex, положение отмечено фломастером, а прорезь для заголовка на выступе была вырезана в соответствующем месте.

Теперь кусок Forex был приклеен к корпусу, а разъем датчика прикреплен к пластине Forex с помощью липучки. Затем внутренние стены покрыли светопоглощающим материалом черного цвета, я применил самоклеящуюся поролон. Черный картон тоже подойдет. Теперь, используя соединительные кабели, порт I2C «3.3V» HAT был подключен к «V in» на датчике, земля к Gnd, sda к sda и scl к scl. Я использовал макетную плату для соединения обеих частей, но это не обязательно.

Поместите скрипт Python AIY_TCS34725 в папку src и запустите скрипт из терминала разработчика, введя «sec / AIY_TCS34752.py». Возможно, вам сначала придется сделать исполняемый файл сценария python. Когда вас попросят, поместите сенсор на объект, который нужно измерить, нажмите кнопку на устройстве AIY и подождите секунду или две.

Затем на основе измеренных значений RGB и белого устройство сначала вычисляет соответствующее значение оттенка, затем оценивает цвет на основе этого значения и передает их устно через голосовую систему AIY, например. грамм. как «темно-красный», но также дает значение оттенка. Значения RGB, оттенка и яркости (точнее, яркости) также выводятся на экран.

Чтобы упростить процесс цветовой аннотации, значения RGB преобразуются в формат HSV (оттенок, насыщенность, значение). Это позволяет аннотировать цвет для определенного диапазона углов (например, кусочка круговой диаграммы) и выбирать цвет на основе вычисленного значения оттенка.

Вам нужно нормализовать ваше устройство относительно белого и черного эталонов. Просто измерьте самые белые и самые черные листы бумаги, которые у вас есть, сделайте измерение каждого и поместите эти значения в качестве максимальных и минимальных значений в код. Только оптимальные контрольные значения обеспечат хорошее распознавание цвета.

Одна из основных проблем - это отражение. Если у вас есть объект с глянцевой или полированной поверхностью, он будет отражать много света, излучаемого светодиодом, и будет казаться намного светлее, чем есть на самом деле. Вы можете использовать лист мембраны, чтобы рассеять свет, но вам может потребоваться поправочный коэффициент.

В случае полупрозрачных объектов может быть удобно разместить их на белой бумаге, в противном случае количество отраженного света будет слишком маленьким, и объект будет отмечен как «черный».

Если вы хотите измерить цвет объектов, излучающих свет, вам следует выключить светодиод на коммутационном контакте, подключив порт «светодиода» на разъеме к «земле». Теперь установите значения нормализации соответственно.

Еще одна общая проблема - это освещенность объекта. Тепло-белый светодиод на коммутационной панели излучает прерывистый световой спектр. Поэтому некоторые цвета могут быть пере- или недостаточно представлены в спектре RGB. Для получения дополнительной информации по этой теме, пожалуйста, ознакомьтесь с моими предыдущими инструкциями по колориметрам / фотометрам и спектрометрам:

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

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

Шаг 3: Код

Код
Код

Код представляет собой комбинацию модификации кода из голосового руководства AIY и кода датчика TCS34725 от Bradspi.

Я также пытался использовать код Python TCS34725 от Adafruit, но у меня возникли проблемы с запуском этого и некоторых других кодов, которые используют внешние библиотеки в сочетании с AIY HAT. Любая помощь приветствуется.

Как упоминалось ранее, цветовая аннотация основана на преобразовании значений RGB в значения оттенка. Вы должны установить параметры нормализации на основе экспериментальных измерений белых и черных благоговейных материалов. Введите абсолютные значения для R, G и B min или max соответственно.

В скрипте используется новая версия команды «say», позволяющая регулировать громкость и высоту звука. В этом случае вам, возможно, придется либо обновить файлы драйверов audio.py и tty, либо удалить «части громкости и высоты тона» из сценария.

#! / usr / bin / env python3 # Этот сценарий представляет собой адаптацию сценария servo_demo.py для голосовой шапки AIY, # оптимизированной для распознавания цвета с помощью Afafruit TCS34725 breakout import aiy.audio import aiy.cloudspeech import aiy.voicehat # from gpiozero import LED # может быть полезен для внешнего светодиода на сервопорте # from gpiozero import Button # может быть полезен для внешней кнопки на сервопорте import time import smbus bus = smbus. SMBus (1) import colorsys def hue2color (hue): # интерпретация цвета на основе вычисленных значений оттенка if ((hue> 12) and (hue 25) and (hue 69) and (hue 164) and (hue 194) and (hue 269) and (hue 319) или (оттенок <20)): color = "red" вернуть цвет else: print ("что-то пошло не так")

def tcs34725 (): # измерение и интерпретация.

# Измерение выполняется скриптом Bradspi TCS34725: # https://bradsrpi.blogspot.com/2013/05/tcs34725-rg… bus.write_byte (0x29, 0x80 | 0x12) ver = bus.read_byte (0x29) # version # должно быть 0x44, если ver == 0x44: print ("Устройство найдено / n") bus.write_byte (0x29, 0x80 | 0x00) # 0x00 = ВКЛЮЧИТЬ регистр bus.write_byte (0x29, 0x01 | 0x02) # 0x01 = Включение, 0x02 Датчики RGB включены bus.write_byte (0x29, 0x80 | 0x14) # Чтение результатов начального регистра 14, LSB, затем MSB data = bus.read_i2c_block_data (0x29, 0) clear = clear = data [1] << 8 | данные [0] красный = данные [3] << 8 | данные [2] зеленый = данные [5] << 8 | данные [4] синий = данные [7] << 8 | data [6] crgb = "Абсолютные значения: C:% s, R:% s, G:% s, B:% s / n"% (прозрачный, красный, зеленый, синий) print (crgb) time.sleep (1) else: print ("Устройство не найдено / n") # нормализация и преобразование измеренных значений RGBW col = "" # Максимальные значения Коэффициенты нормализации, должны быть определены экспериментально # например против белого листа бумаги. Проверяйте и время от времени исправляйте. max_bright = 5750 max_red = 1930 max_green = 2095 max_blue = 1980 # Коэффициенты нормализации фона / минимальных значений должны быть определены экспериментально # например, против черного листа бумаги. Проверяйте и время от времени исправляйте. min_bright = 750 min_red = 340 min_green = 245 min_blue = 225 # нормализованные значения, от 0 до 1 rel_bright = ((clear - min_bright) / (max_bright - min_bright)) rel_red = ((red - min_red) / (max_red - min_red)) rel_green = ((зеленый - min_green) / (max_green - min_green)) rel_blue = ((синий - min_blue) / (max_blue - min_blue)) hsv_col = colorsys.rgb_to_hsv (rel_red, rel_green, rel_blue) hue = hsv_col [0] if rel_bright> 0.9: col = "white" # если очень яркий -> белый elif rel_bright черный else: col = hue2color (hue) # выбор цвета по значениям оттенка # print ("относительные значения яркий, красный, зеленый, синий:") # print (rel_bright, rel_red, rel_green, rel_blue) # print («Значения HSV (оттенок, насыщенность, значение):», hsv_col) # print («оттенок в °», оттенок) return [col, rel_bright, rel_red, rel_green, rel_blue, оттенок]

def main ():

button = aiy.voicehat.get_button () # изменить статус кнопки led = aiy.voicehat.get_led () # изменить статус кнопки-светодиода aiy.audio.get_recorder (). start () # buttoni = Button (5) # датчик расстояния или другая внешняя кнопка, подключенная к серво3 / GPIO 05

aiy.audio.say ("Hello!",, volume = 50, pitch = 100) # для громкости и высоты тона требуется ноябрьская версия драйвера audio.py и _tty.py от ноября 2017 года!

aiy.audio.say («Для начала переместите датчик над объектом. Затем нажмите синюю кнопку»,, volume = 50, pitch = 100) print («Чтобы активировать измерение цвета, поместите датчик над объектом, затем нажмите синюю кнопку ") while True: led.set_state (aiy.voicehat. LED. ON) button.wait_for_press () # для внешней кнопки, замените кнопку на buttoni led.set_state (aiy.voicehat. LED. BLINK) aiy.audio.say (" Измерение ",, volume = 50, pitch = 100) result = tcs34725 () # вызывает измерение и интерпретацию col = result [0] # цвет, как текст hue = str (int (result [5])) # оттенок в °, как текст r_red = str (int (result [2] * 255)) # значение R, как текст r_green = str (int (result [3] * 255)) # значение G, как текст r_blue = str (int (result [4] * 255)) # значение B в виде текста r_bright = str (int (result [1] * 100)) # значение W в виде текста led.set_state (aiy.voicehat. LED. OFF) if col == "white "or col ==" black ": bright =" "elif (result [1]> 0.69): # яркость / яркость цвета bright =" light "elif (result [1] <0.25): bright =" dark "else: bright = "medium" # общение t он результаты color_text = ("Цвет объекта" + яркий + "" + col) print (color_text) aiy.audio.say (color_text`` volume = 75, pitch = 100) hue_text = ("Значение оттенка равно "+ оттенок +" градусы ") print (hue_text) aiy.audio.say (hue_text`` volume = 75, pitch = 100)

если _name_ == '_main_': main ()

Шаг 4. Некоторые ссылки и примечания

Технический паспорт датчика TCS34725 можно найти здесь:

Код для чтения датчика, который я использовал, был описан здесь:

Вы можете найти дополнительную информацию об измерениях цвета с помощью этого и другого датчика в моих предыдущих инструкциях:

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

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

Рекомендуемые: