Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Bluetooth-камера Arduino (ABC)

Компоненты и расходные материалы

Arduino UNO
× 1
Модуль Bluetooth HC-05
× 1
Камера OV7670
× 1
TFT-экран Arduino
× 1

Об этом проекте

Сегодня уже никого не удивишь мобильным телефоном с камерой, беспроводными гаджетами и прочими техническими достижениями. Благодаря платформе Arduino миллионы людей открыли для себя чудесный мир электроники и программирования. Было написано 100, 500 инструкций по обмену данными между мобильным телефоном и Arduino по bluetooth ... О чем я? да. Я хочу обмениваться данными между мобильным телефоном на Android и Arduino UNO по bluetooth 100, 501 раз. Но я хочу передать не просто набор символов и цифр, а картинки.

Кто-то скажет, что это невозможно, Arduino слишком медленно обрабатывает большие объемы данных с хорошей скоростью. И он будет абсолютно прав. А что, если немного помочь Arduino - переложить всю «тяжелую» работу на плечи другого устройства? А есть такой прибор!

Это уникальный TFT-экран для Arduino. Информация об этом логотипе находится в следующих статьях:статья 1, статья 2 В этом руководстве я продемонстрирую, как вы можете подключиться через Bluetooth между Arduino и телефоном Android, получить изображение с камеры OV7670 на Arduino UNO и передать его на телефон Android. Затем, наоборот, перенесите картинку (изображение с камеры) с телефона Android на Arduino UNO и отобразите ее на экране уникального TFT-экрана.

Для телефона Android написано специальное приложение.

Краткие характеристики экрана TFT:

  • Размер диагонали 3,5 дюйма,
  • Разрешение 320x240,
  • Количество цветов 65536 (16-бит),
  • Резистивный сенсорный экран (контроллер XPT2046),
  • 5 кнопок,
  • RTC IC DS1307 с литиевой батареей CR1220 3 В,
  • Слот для подключения карты памяти micro SD,
  • 4-контактный (2,54 мм) разъем для подключения модуля Bluetooth HC-05 (-06), модуля ESP8286 WiFi.
  • 20-контактный (2,54 мм) разъем для камеры (OV7670).

Список необходимых компонентов

Оборудование :

  • Arduino UNO;
  • Уникальный экран TFT;
  • адаптер питания AC-DC 6-12 В,> 600 мА;
  • Камера OV7670;
  • Bluetooth-модуль HC-06 (HC-05);
  • Телефон Android.

Внимание:необходимо (!) Использовать адаптер питания на 6-12 вольт для работы экрана TFT, потому что максимального тока в 500 мА от USB недостаточно для нормальной работы.

Программное обеспечение :

  • IDE Arduino;
  • Библиотека уникального экрана TFT;
  • APK-файл для телефона Android.

Подготовка

Программное обеспечение

Все демонстрационные скетчи написаны в среде Arduino IDE, поэтому для начала необходимо установить Arduino IDE - https://www.arduino.cc/en/main/software, затем установить библиотеку для экрана TFT. - github.com/YATFT/YATFT (скачайте библиотеку и распакуйте ее в папку «библиотеки» в каталоге Arduino IDE).

После установки Arduino IDE необходимо запрограммировать плату Arduino UNO. Для простоты рекомендую прошивать отдельно, без экрана TFT. Для этого:

  • Подключите кабель USB к плате Arduino UNO;
  • Запустите Arduino IDE на компьютере;
  • Выберите соответствующий порт, к которому подключена Arduino UNO;
  • Загрузите ArduinoBluetoothCamera.ino . демонстрационный эскиз (и файл ov7670_regs.h для инициализации камеры);
  • Нажмите кнопку Загрузить . .

Если плата Arduino UNO успешно запрограммирована, можно переходить к следующему шагу.

ArduinoBluetoothCamera.ino эскиз:

  / ****************************************** *************************** ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ И ДОКУМЕНТАЦИЯ ПРЕДОСТАВЛЯЮТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ БЕЗ ОГРАНИЧЕНИЙ, ЛЮБАЯ * ГАРАНТИЯ КОММЕРЧЕСКОЙ ЦЕННОСТИ, НАИМЕНОВАНИЯ, НЕТ НАРУШЕНИЯ И ПРИГОДНОСТИ ДЛЯ * ОПРЕДЕЛЕННОЙ ЦЕЛИ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ АВТОР ИЛИ ЕГО ЛИЦЕНЗИАРЫ НЕ НЕСУТ * ОТВЕТСТВЕННОСТИ ИЛИ НЕ ОБЯЗАНЫ ПО ДОГОВОРАМ, НЕБРЕЖНОСТИ, СТРОГОЙ ОТВЕТСТВЕННОСТИ *, НАРУШЕНИЮ ГАРАНТИЙ ИЛИ ДРУГИХ ЮРИДИЧЕСКИХ СООТВЕТСТВУЮЩИХ ТЕОРИЯХ * ПРЯМЫЕ ИЛИ КОСВЕННЫЕ УБЫТКИ, НЕ ВКЛЮЧАЮЩИЕ УБЫТКИ ИЛИ НЕЗАВИСИМЫЕ УБЫТКИ * ОСОБЫЕ, КОСВЕННЫЕ, КАРАТЕЛЬНЫЕ ИЛИ КОСВЕННЫЕ УБЫТКИ, * ПОТЕРЯ ПРИБЫЛИ ИЛИ УТЕРЯ ДАННЫХ, СТОИМОСТЬ ЗАКУПКИ ЗАМЕНЯЮЩИХСЯ ТОВАРОВ, * ТЕХНОЛОГИИ, УСЛУГИ ИЛИ ЛЮБЫЕ ПРЕТЕНЗИИ ТРЕТЬИХ СТОРОН (ВКЛЮЧАЯ, НО * НЕ ОГРАНИЧИВАЯСЬ ​​ИЛИ НИКОМУ ЗАЩИТУ) . ************************************************ ********************** / # include  #include  #include  #include  #include "ov7670_regs.h" JPEG_DECODE jpeg_decode; YATFT tft (0); INTRFC ifc; CAM cam; CODEC codec; SRL srl; #define IMG_SizeX 320 # define IMG_SizeY 240uint8_t mode =0; uint8_t mode_t last_moint8 mode_t last_moint8 0; uint8_t start_capt =0; uint16_t err; void setup () {// инициализируем последовательный порт Serial.begin (115200); // инициализируем дисплей tft.begin (); tft.SetColor (ЯРКОСТЬ); tft.ClearDevice ();} void loop () {// поместите сюда ваш основной код для повторного запуска:if (Serial.available ()) {uint8_t temp =Serial.read (); switch (temp) {case 0x10:// Отправить одиночное фото mode =1; start_capt =1; если (last_mode! =режим &&last_mode! =2) {tft.begin (); tft.SetRGB (); // Переключение в режим RGB cam.CamInit (&OV7670_QVGA [0] [0]); cam.CamVideoPreview (0, 0, 1, истина); codec.JPEGInit (); codec.JPEGSetRegs (IMG_SizeX, IMG_SizeY); задержка (1000); } ломать; case 0x20:// Непрерывная отправка Photo mode =2; start_capt =2; если (last_mode! =режим &&last_mode! =1) {tft.begin (); tft.SetRGB (); // Переключение в режим RGB cam.CamInit (&OV7670_QVGA [0] [0]); cam.CamVideoPreview (0, 0, 1, истина); codec.JPEGInit (); codec.JPEGSetRegs (IMG_SizeX, IMG_SizeY); } ломать; case 0x30:// Получение одиночного фото mode =3; start_capt =3; если (last_mode! =режим &&last_mode! =4) {tft.begin (); tft.SetYUV (); // Переключение в режим YUV} break; case 0x40:// Непрерывный прием Photo mode =4; start_capt =4; если (last_mode! =режим &&last_mode! =3) {tft.begin (); tft.SetYUV (); // Переключение в режим YUV} break; по умолчанию:перерыв; }} if (mode ==1) // Отправить одну фотографию {if (start_capt ==1) {start_capt =0; last_mode =режим; mode =0; CamCapture (); }} else if (mode ==2) // Непрерывная отправка фото {while (1) {uint8_t temp =Serial.read (); если (start_capt ==2) {start_capt =0; } if (temp ==0x21) // Остановить? {start_capt =0; last_mode =режим; mode =0; ломать; } если (CamCapture ()) продолжить; }} else if (mode ==3) // Получение одной фотографии {if (start_capt ==3) {// Начать захват start_capt =0; last_mode =режим; mode =0; Serial.print ("!"); srl.JPEGReadFromSerial (&jpeg_decode, // структура декодирования jpeg 0, // x0 (слева) 0, // y0 (вверху) GetMaxX () + 1, // x1 (справа) GetMaxY () + 1, // y1 (внизу ) 32000); // максимальный размер изображения}} else if (mode ==4) // Непрерывное получение фото {uint8_t temp =Serial.read (); while (1) {if (start_capt ==4) {// Начать захват start_capt =0; } if (temp ==0x41) // Остановить? {start_capt =0; last_mode =режим; mode =0; ломать; } Serial.print ("!"); srl.JPEGReadFromSerial (&jpeg_decode, // структура декодирования jpeg 0, // x0 (слева) 0, // y0 (вверху) GetMaxX () + 1, // x1 (справа) GetMaxY () + 1, // y1 (внизу ) 32000); // максимальный размер изображения}}} uint8_t CamCapture (void) {uint8_t temp =0xff, temp_last =0; bool is_header =false; uint32_t length =0; длина =codec.JPEGStart (); uint32_t en_jpeg_address =ifc.rdReg32 (0x414) <<2; int k =0; если ((длина> =0x5FFFF) | (длина ==0)) {start_capt =2; возврат 1; } temp =ifc.GetMem (en_jpeg_address + k); k ++; длина --; в то время как (длина--) {temp_last =temp; temp =ifc.GetMem (en_jpeg_address + k); k ++; если (is_header ==true) {Serial.write (временный); } иначе, если ((temp ==0xD8) &(temp_last ==0xFF)) {is_header =true; Serial.write (temp_last); Serial.write (темп); } if ((temp ==0xD9) &&(temp_last ==0xFF)) // Если найти конец, break while, break; } is_header =false; возврат 0;}  

OV7670_regs.h:

  #ifndef OV7670_REGS_H # define OV7670_REGS_Hconst uint8_t OV7670_VGA [] [2] PROGMEM ={{1, 0x42}, // Размер байта, Адрес (ID) {640/16, 480/16}, // Размер X, Размер Y {0b01000010, 0b00000100}, // Reset_Enable_N, 7 | 6 | 5 | 4 | 3 | Vsync Invert | Hsync Invert | 0 {0x3a, 0x0C}, {0x40, 0xC0}, {0x12, 0x00}, {0x0c, 0x00}, {0x3e, 0x00}, {0x70, 0x3A}, {0x71, 0x35}, {0x72, 0x11}, {0x73, 0xF0}, {0xa2, 0x02}, {0x11, 0x80}, {0x7a , 0x18}, {0x7b, 0x02}, {0x7c, 0x07}, {0x7d, 0x1F}, {0x7e, 0x49}, {0x7f, 0x5A}, {0x80, 0x6A}, {0x81, 0x79}, {0x82, 0x87 }, {0x83, 0x94}, {0x84, 0x9F}, {0x85, 0xAF}, {0x86, 0xBB}, {0x87, 0xCF}, {0x88, 0xEE}, {0x89, 0xEE}, {0x13, 0xE0}, {0x00, 0x00}, {0x10, 0x00}, {0x0d, 0x00}, {0x24, 0x98}, {0x25, 0x63}, {0x26, 0xD3}, {0x2a, 0x00}, {0x2b, 0x00}, {0x2d , 0x00}, {0x13, 0xe5}, {0x13, 0xe7}, {0x1e, 0x30}, {0x74, 0x60}, {0x01, 0x80}, {0x02, 0x80}, {0x15, 0x10}, {0x4f, 0x40 }, {0x50, 0x34}, {0x51, 0x0C}, {0x52, 0x17}, {0x53, 0x29}, {0x54, 0x40}, {0x57, 0x80}, {0x58, 0x1e}, {0x41, 0x10},{0x75, 0x60}, {0x76, 0x50}, {0x77, 0x48}, {0x3d, 0x92}, {0x3b, 0x00}, {0x04, 0x00}, {0xff, 0xff},}; const uint8_t OV7670_QVGA [] [2] PROGMEM ={{1, 0x42}, // Размер байта, Адрес (ID) {320/16, 240/16}, // Размер X, Размер Y {0b01000010, 0b00000100}, // Reset_Enable_N, 7 | 6 | 5 | 4 | 3 | Vsync Invert | Hsync Invert | 0 {0x3a, 0x0C}, {0x40, 0xC0}, {0x12, 0x10}, {0x0c, 0x00}, {0x3e, 0x00} , {0x70, 0x3A}, {0x71, 0x35}, {0x72, 0x11}, {0x73, 0xF0}, {0xa2, 0x02}, {0x11, 0x80}, {0x7a, 0x18}, {0x7b, 0x02}, { 0x7c, 0x07}, {0x7d, 0x1F}, {0x7e, 0x49}, {0x7f, 0x5A}, {0x80, 0x6A}, {0x81, 0x79}, {0x82, 0x87}, {0x83, 0x94}, {0x84, 0x9F}, {0x85, 0xAF}, {0x86, 0xBB}, {0x87, 0xCF}, {0x88, 0xEE}, {0x89, 0xEE}, {0x13, 0xE0}, {0x00, 0x00}, {0x10, 0x00} , {0x0d, 0x00}, {0x24, 0x98}, {0x25, 0x63}, {0x26, 0xD3}, {0x2a, 0x00}, {0x2b, 0x00}, {0x2d, 0x00}, {0x13, 0xe5}, { 0x13, 0xe7}, {0x1e, 0x30}, {0x74, 0x60}, {0x01, 0x80}, {0x02, 0x80}, {0x15, 0x10}, {0x4f, 0x40}, {0x50, 0x34}, {0x51, 0x0C}, {0x52, 0x17}, {0x53, 0x29}, {0x54, 0x40}, {0x57, 0x80}, {0x58, 0x1e}, {0x41, 0x10}, {0x75, 0x60}, {0x76, 0x50} , {0x77, 0x48}, {0x3d, 0x92 }, {0x3b, 0x00}, {0x04, 0x00}, {0xff, 0xff},}; #endif  

Android

На телефоне Android необходимо установить ArduinoTFT.apk . Разрешите приложению использовать Bluetooth и камеру.

Обновление 26.05.2020!

Я добавил исходный код ArduinoTFT.apk. КАК ЕСТЬ! Загрузите ArduinoTFT.zip.h

, переименуйте в ArduinoTFT.zip и разархивируйте. Наслаждаться!

Обновление 25.07.2020!

«Привет, у меня была та же проблема с приложением Android, которое не работает. Решено после авторизации приложения для доступа к камере смартфона. Вот и все. Пока» (c)

Модуль Bluetooth

В модуле Bluetooth необходимо установить скорость обмена 115200 (команда «AT + UART =115200, 0, 0»). Это оптимальная скорость, с которой Arduino UNO может получать и обрабатывать данные. (Теоретически можно увеличить скорость, оптимизировать прием и обработку данных, но для этого потребуется больший объем оперативной памяти.) Более подробные инструкции по установке курса обмена можно найти в Интернете, например, здесь:https:/ /www.instructables.com/id/Communication-Bluetooth-Module-With-HC-05-HC-06/.

(!) Обратите внимание, что модуль Bluetooth подключается к порту отладки Arduino UNO. Таким образом, при работе с bluetooth порт отладки недоступен. А перед программированием Arduino UNO (в комплекте с модулем Bluetooth) необходимо отключить модуль Bluetooth. А после программирования установите обратно (!)

Сборка

Сборка устройства довольно проста:

  • Соединить вместе Arduino UNO и TFT-экран;
  • Подключите камеру OV7670 к 20-контактному разъему на TFT-экране экрана (иногда в качестве переходника я использую угловой 18-20-контактный разъем с шагом 2,54 мм);
  • Подключите модуль Bluetooth HC-06 (HC-05) к 4-контактному разъему с надписью «Bluetooth» на TFT-экране;
  • Подключите адаптер питания 6–12 В к входу питания на плате Arduino UNO.

После включения питания экран TFT-экрана должен стать красным. Это означает готовность получать команды с телефона Android.

Демонстрация

Выполните следующие операции на телефоне Android:

  • Запустите ArduinoTFT . приложение на телефоне Android;
  • Поверните телефон горизонтально;
  • Включите соединение Bluetooth, выберите обнаруженный модуль Bluetooth (HC-06);

На экране должны появиться два окна и четыре кнопки:

  • Правое верхнее окно - это окно видоискателя камеры телефона;
  • Большое левое окно - полученные или отправленные изображения.

Функции кнопок:

  • Перенести одно изображение с телефона Android на Arduino;
  • Непрерывная передача изображений с телефона Android на Arduino;
  • Перенести одно изображение с Arduino на телефон Android;
  • Непрерывная передача изображений с Arduino на телефон Android.

Размер изображения 320x240 пикселей (2-5 кБ). В этой главе есть демонстрационное видео.

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

Спасибо за просмотр!

Предыдущие статьи:

1) Уникальный TFT Shield для Arduino Uno - Start,

2) Уникальный экран Arduino TFT - камера OV7670

Следующие статьи:

3) TFT-экран для Arduino Nano - Старт,

4) Фотографии и видео в формате RGB на дисплее TFT SPI.

5) Управление с помощью смартфона 4WD Robot Car по Bluetooth.

Обновление 01.04.2021:

И снова здравствуйте! Существует обновленная библиотека для серии экранов, которая в настоящее время состоит из двух экранов и двух коммутационных плат. Скетч составляется в зависимости от выбранной версии (от 1 до 4) и типа микроконтроллера (MegaAVR или ESP-32). Добавил фото, примеры. Более подробную информацию можно найти на https://github.com/Ekaburg/EkaTFT.

Код

Библиотека для экрана TFT
http://github.com/YATFT/YATFT

Изготовленные на заказ детали и корпуса

Экспериментируйте с OV7670 и телевизором с дистанционным управлением Экспериментируйте с камерой OV7670 и пультом дистанционного управления телевизором.

Производственный процесс

  1. Камера
  2. Объектив камеры
  3. Читалка BrickPi
  4. Робот Raspberry Pi, управляемый через Bluetooth
  5. Моторизованный слайдер камеры Arduino с управлением через Bluetooth
  6. Arduino с Bluetooth для управления светодиодом!
  7. Устройства с голосовым управлением Bluetooth с OK Google
  8. Мобильная камера удаленного наблюдения
  9. Система обнаружения падений на базе Arduino, Windows и Azure
  10. Arduino Uno + электрическое устройство (лампочка) + телефон Android