====== 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}}