OpenMV LCD Shield: подключение, настройка и начало работы

Используйте LCD Shield для мгновенного отображения картинки с камерного модуля OpenMV без использования внешних проводов и мультимедийных устройств.

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

Подключение и настройка

LCD Shield предназначен и совместим со всеми камерами машинного зрения от компании OpenMV. В качестве примера рассмотрим коммуникацию экрана с платформой OpenMV H7.

Шаг 1

Припаяйте контактные колодки к камере OpenMV H7.

Шаг 2

Оденьте LCD Shield снизу на платформу OpenMV H7 методом бутерброда.

Шаг 3

Примеры работы

Рассмотрим несколько примеров работы с дисплеем.

Захват изображения с камеры

  1. Откройте пример: Файл Примеры LCD-Shield lcd.py
    lcd-image-capture.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.
  2. Загрузите скрипт в плату.
  3. Весь буфер изображения с камеры транслируется в программе OpenMV IDE и дублируется на дисплей.
  4. Обратите внимания, что изображение как будто сплющено по вертикали. Это связано с тем, что камера снимает с разрешением 640×480, т. е. соотношение сторон 16:9 с горизонтальным кадром. А разрешение дисплея 128×160, т. е. соотношение сторон 4:5 с вертикальным кадром. Есть два пути решения:
    1. Выставить специальное разрешение для дисплея 128×160 используя параметр sensor.QQVGA2. Результат: всё изображение вместится в рамки экрана, но пропорции картинки будут изменены и изображение будет искажено. Именно такой случай в стандартном примере.
    2. Выставить разрешение 160×128 используя параметр sensor.QQVGA. Результат: по вертикали изображение не вместится в экран, по горизонтали останется свободное место. Но пропорции картинки останутся правильными.

Захват изображения камеры с буфером данных

Дисплей позволяет также выводит не только изображение с камеры, но и дополнительную обработанную информацию. Другими словами можно адаптировать любой пример из среды OpenMV IDE с дисплеем. Рассмотрим изменения на эксперименте с детектированием лица.

  1. Откройте пример: Файл Примеры Face-Detection face_detection.py
    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())
  2. Адаптируйте код под дисплей:
    1. Добавьте объект lcd. Замените строку
      import sensor, time, image

      на

      import sensor, time, image, lcd
    2. Добавьте строку инициализации дисплея.
      lcd.init()
    3. Выведите картинку с камеры с обработанными данными на дисплей.
      lcd.display(img)
  3. Адаптированный код под дисплей.
    lcd-face-detection.py
    # 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.
  4. Загрузите скрипт в плату.
  5. Видоискатель начнет распознавать лицо в программе OpenMV IDE и дублировать буфер на дисплей.

Элементы платы

Дисплейный модуль

Дисплейный модуль JD-T18003-T01 выполнен по технологии TFT TN с диагональю 1,8 дюйма, разрешением 128×160 точек и глубиной 65536 цветов.

Матрица дисплея подключена к встроенному чипу ST7735R, который выполняет роль моста между экраном и управляющий микроконтроллером.

Контактные колодки

LCD Shield подключается к камерам машинного зрения OpenMV через две параллельных 8-пиновых контактных колодки. Контроллер дисплея получает команды от микроконтроллера по шине SPI с дополнительными пинами. Остальные GPIO контакты остаются доступны для коммуникации с другими платами и модулями. Все подробности про назначения контактов читайте в разделе распиновка.

Управление подсветкой

По умолчанию подсветка дисплея всегда включена. Но если вы хотите программно управлять яркостью экрана, капните каплей припоя на отведённую контактную площадку на обратной стороне платы.

В итоге при подачи высокого или низкого сигнала на пин P6, вы сможете соответственно включать или выключать подсветку. Для управления подсветкой используйте готовый метод библиотеки дисплея.

Распиновка

Пин 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 Общая земля

Принципиальная и монтажная схемы

Габаритный чертёж

Характеристики

  • Модель: LCD Shield
  • Диагональ: 1,8 дюйма
  • Разрешение: 128×160
  • Тип матрицы: TFT TN
  • Подсветка: светодиодная (LED)
  • Глубина цвета: 16 бит (65536 цветов)
  • Контролер дисплея: ST7735
  • Интерфейс: SPI с дополнительными пинами
  • Ток потребления в фоновом режиме: <30 мА
  • Ток потребления в активном режиме: <40 мА
  • Габариты: 48×38×13 мм

Ресурсы