Bluetooth-камера Arduino (ABC)
Компоненты и расходные материалы
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 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 и телевизором с дистанционным управлением

Производственный процесс
- Камера
- Объектив камеры
- Читалка BrickPi
- Робот Raspberry Pi, управляемый через Bluetooth
- Моторизованный слайдер камеры Arduino с управлением через Bluetooth
- Arduino с Bluetooth для управления светодиодом!
- Устройства с голосовым управлением Bluetooth с OK Google
- Мобильная камера удаленного наблюдения
- Система обнаружения падений на базе Arduino, Windows и Azure
- Arduino Uno + электрическое устройство (лампочка) + телефон Android