====== OpenMV LCD Shield: подключение, настройка и начало работы ======
Используйте [[amp>product/openmv-lcd-shield?utm_source=man&utm_campaign=openmv-lcd-shield&utm_medium=wiki|LCD Shield]] для мгновенного отображения картинки с камерного модуля OpenMV без использования внешних проводов и мультимедийных устройств.
{{ :products:openmv-lcd-shield:openmv-lcd-shield.7.jpg?nolink&500 |}}
Портативный дисплей пригодится при отладки камеры в полевых условиях, например настройки чувствительности срабатывания внешних устройств в зависимости от захваченного изображения.
===== Подключение и настройка =====
LCD Shield предназначен и совместим со всеми камерами машинного зрения от компании OpenMV. В качестве примера рассмотрим коммуникацию экрана с платформой [[amp>product/openmv-cam-h7?utm_source=man&utm_campaign=openmv-lcd-shield&utm_medium=wiki|OpenMV H7]].
==== Шаг 1 ====
Припаяйте контактные колодки к камере OpenMV H7.{{ :products:openmv-lcd-shield:openmv-lcd-shield-install.1.png?nolink |}}
==== Шаг 2 ====
Оденьте LCD Shield снизу на платформу OpenMV H7 методом бутерброда.{{ :products:openmv-lcd-shield:openmv-lcd-shield-install.2.jpg?nolink&300 |}}
==== Шаг 3 ====
[[:articles:openmv-ide-install|Установите и настройте камеру OpenMV H7 c интегрированной средой разработки OpenMV IDE.]]
===== Примеры работы =====
Рассмотрим несколько примеров работы с дисплеем.
==== Захват изображения с камеры ====
- Откройте пример:
Файл
Примеры
LCD-Shield
lcd.py
# LCD Example
#
# Note: To run this example you will need a LCD Shield for your OpenMV Cam.
#
# The LCD Shield allows you to view your OpenMV Cam's frame buffer on the go.
import sensor, image, lcd
sensor.reset() # Initialize the camera sensor.
sensor.set_pixformat(sensor.RGB565) # or sensor.GRAYSCALE
sensor.set_framesize(sensor.QQVGA2) # Special 128x160 framesize for LCD Shield.
lcd.init() # Initialize the lcd screen.
while(True):
lcd.display(sensor.snapshot()) # Take a picture and display the image.
- Загрузите скрипт в плату.
- Весь буфер изображения с камеры транслируется в программе OpenMV IDE и дублируется на дисплей.{{ :products:openmv-lcd-shield:lcd-image-capture.1.png?nolink |}}
- Обратите внимания, что изображение как будто сплющено по вертикали. Это связано с тем, что камера снимает с разрешением 640×480, т. е. соотношение сторон 16:9 с горизонтальным кадром. А разрешение дисплея 128×160, т. е. соотношение сторон 4:5 с вертикальным кадром. Есть два пути решения:
- Выставить специальное разрешение для дисплея 128×160 используя параметр ''sensor.QQVGA2''. Результат: всё изображение вместится в рамки экрана, но пропорции картинки будут изменены и изображение будет искажено. Именно такой случай в стандартном примере.
- Выставить разрешение 160×128 используя параметр ''sensor.QQVGA''. Результат: по вертикали изображение не вместится в экран, по горизонтали останется свободное место. Но пропорции картинки останутся правильными. {{ :products:openmv-lcd-shield:lcd-image-capture.2.png?nolink |}}
==== Захват изображения камеры с буфером данных ====
Дисплей позволяет также выводит не только изображение с камеры, но и дополнительную обработанную информацию. Другими словами можно адаптировать любой пример из среды OpenMV IDE с дисплеем. Рассмотрим изменения на эксперименте с детектированием лица.
- Откройте пример:
Файл
Примеры
Face-Detection
face_detection.py
# Face Detection Example
#
# This example shows off the built-in face detection feature of the OpenMV Cam.
import sensor, time, image
# Reset sensor
sensor.reset()
# Sensor settings
sensor.set_contrast(3)
sensor.set_gainceiling(16)
# HQVGA and GRAYSCALE are the best for face tracking.
sensor.set_framesize(sensor.QVGA)
sensor.set_pixformat(sensor.GRAYSCALE)
# Load Haar Cascade
# By default this will use all stages, lower satges is faster but less accurate.
face_cascade = image.HaarCascade("frontalface", stages=25)
print(face_cascade)
# FPS clock
clock = time.clock()
while (True):
clock.tick()
# Capture snapshot
img = sensor.snapshot()
# Find objects.
# Note: Lower scale factor scales-down the image more and detects smaller objects.
# Higher threshold results in a higher detection rate, with more false positives.
objects = img.find_features(face_cascade, threshold=0.75, scale_factor=1.25)
# Draw objects
for r in objects:
img.draw_rectangle(r)
# Print FPS.
# Note: Actual FPS is higher, streaming the FB makes it slower.
print(clock.fps())
- Адаптируйте код под дисплей:
- Добавьте объект lcd. Замените строку import sensor, time, image
на import sensor, time, image, lcd
- Добавьте строку инициализации дисплея. lcd.init()
- Выведите картинку с камеры с обработанными данными на дисплей.lcd.display(img)
- Адаптированный код под дисплей. # Face Detection Example
#
# This example shows off the built-in face detection feature of the OpenMV Cam.
#
import sensor, time, image, lcd
# Reset sensor
sensor.reset()
# Sensor settings
sensor.set_contrast(3)
sensor.set_gainceiling(16)
# HQVGA and GRAYSCALE are the best for face tracking.
sensor.set_framesize(sensor.QVGA)
sensor.set_pixformat(sensor.GRAYSCALE)
lcd.init()
# Load Haar Cascade
# By default this will use all stages, lower satges is faster but less accurate.
face_cascade = image.HaarCascade("frontalface", stages=25)
print(face_cascade)
# FPS clock
clock = time.clock()
while (True):
clock.tick()
# Capture snapshot
img = sensor.snapshot()
# Find objects.
# Note: Lower scale factor scales-down the image more and detects smaller objects.
# Higher threshold results in a higher detection rate, with more false positives.
objects = img.find_features(face_cascade, threshold=0.75, scale_factor=1.25)
# Draw objects
for r in objects:
img.draw_rectangle(r)
# Print FPS.
# Note: Actual FPS is higher, streaming the FB makes it slower.
print(clock.fps())
lcd.display(img) # Take a picture and display the image.
- Загрузите скрипт в плату.
- Видоискатель начнет распознавать лицо в программе OpenMV IDE и дублировать буфер на дисплей.{{ :products:openmv-lcd-shield:lcd-face-detection.png?nolink |}}
===== Элементы платы =====
{{ :products:openmv-lcd-shield:openmv-lcd-shield-annotation.png?nolink |}}
==== Дисплейный модуль ====
Дисплейный модуль {{ :products:openmv-lcd-shield:jd-t18003-t01-datasheet.pdf |JD-T18003-T01}} выполнен по технологии TFT TN с диагональю 1,8 дюйма, разрешением 128×160 точек и глубиной 65536 цветов.
Матрица дисплея подключена к встроенному чипу {{ :products:openmv-lcd-shield:st7735r-datasheet.pdf |ST7735R}}, который выполняет роль моста между экраном и управляющий микроконтроллером.
==== Контактные колодки ====
LCD Shield подключается к камерам машинного зрения OpenMV через две параллельных 8-пиновых контактных колодки. Контроллер дисплея получает команды от микроконтроллера по шине SPI с дополнительными пинами. Остальные GPIO контакты остаются доступны для коммуникации с другими платами и модулями. Все подробности про назначения контактов читайте в разделе [[#распиновка|распиновка]].
==== Управление подсветкой ====
По умолчанию подсветка дисплея всегда включена. Но если вы хотите программно управлять яркостью экрана, капните каплей припоя на отведённую контактную площадку на обратной стороне платы.
В итоге при подачи высокого или низкого сигнала на пин ''P6'', вы сможете соответственно включать или выключать подсветку. Для управления подсветкой используйте [[https://docs.openmv.io/library/omv.lcd.html#lcd.lcd.set_backlight|готовый метод библиотеки дисплея]].
===== Распиновка =====
[[this>_media/products:openmv-lcd-shield:openmv-lcd-shield-pinout.pdf|{{:products:openmv-lcd-shield:openmv-lcd-shield-pinout.png}}]]
^ Пин OpenMV ^ Пин LCD Shield ^ Описание ^
| P0 | MOSI | Приём данных из микроконтроллера на шине SPI|
| P1 | NC | Не используется |
| P2 | SCK | Линия последовательного тактового сигнала на шине SPI|
| P3 | CS | Активация дисплейного модуля на шине SPI|
| P4 | NC | Не используется |
| P5 | NC | Не используется |
| P6 | LED | [[#управление_подсветкой|Управление подсветкой]] |
| 3V3 | 3V3 | Питание дисплея |
| RST | NC | Не используется |
| BOOT | NC | Не используется |
| SYN | NC | Не используется |
| P9 | NC | Не используется |
| P8 | RS | Выбор передачи: данные или команда |
| P7 | RST | Аппаратный сброс дисплея|
| VIN | NC | Не используется |
| GND | GND | Общая земля |
===== Принципиальная и монтажная схемы =====
{{:products:openmv-lcd-shield:openmv-lcd-shield-schematic.png?direct&540 }}
{{ :products:openmv-lcd-shield:openmv-lcd-shield-layout-top.png?direct&130}}
{{ :products:openmv-lcd-shield:openmv-lcd-shield-layout-bottom.png?direct&130}}
===== Габаритный чертёж =====
[[this>_media/products:openmv-lcd-shield:openmv-lcd-shield-dimensions.pdf|{{:products:openmv-lcd-shield:openmv-lcd-shield-dimensions.png}}]]
===== Характеристики =====
* Модель: LCD Shield
* Диагональ: 1,8 дюйма
* Разрешение: 128×160
* Тип матрицы: TFT TN
* Подсветка: светодиодная (LED)
* Глубина цвета: 16 бит (65536 цветов)
* Контролер дисплея: ST7735
* Интерфейс: SPI с дополнительными пинами
* Ток потребления в фоновом режиме: <30 мА
* Ток потребления в активном режиме: <40 мА
* Габариты: 48×38×13 мм
===== Ресурсы =====
* [[amp>product/openmv-lcd-shield?utm_source=man&utm_campaign=openmv-lcd-shield&utm_medium=wiki|OpenMV LCD Shield]] в магазине.
* [[https://github.com/amperka/hardware-drawings/blob/master/openmv-lcd-shield.svg|Векторное изображение LCD Shield]]
* [[https://docs.openmv.io/library/omv.lcd.html|Библиотека для LCD Shield]]
* {{ :products:openmv-lcd-shield:openmv-lcd-shield-datasheet.pdf |Datasheet на OpenMV LCD Shield}}
* {{ :products:openmv-lcd-shield:jd-t18003-t01-datasheet.pdf |Datasheet на дисплейный модуль JD-T18003-T01}}
* {{ :products:openmv-lcd-shield:st7735r-datasheet.pdf |Datasheet на контролер дисплея ST7735R}}