Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Câmera Bluetooth Arduino (ABC): Conecte seu Celular via Bluetooth para Capturar Imagens

Componentes e Materiais

Arduino UNO1
Módulo Bluetooth HC-051
Câmera OV76701
Shield TFT Arduino1

Sobre o Projeto

Hoje em dia dificilmente se surpreende alguém com celular com câmera, gadgets sem fio e outros avanços técnicos. Graças à plataforma Arduino, milhões descobriram o maravilhoso mundo da eletrônica e programação. Centenas de instruções foram escritas sobre como trocar dados entre celular e Arduino via bluetooth... O que quero? Trocar dados entre celular Android e Arduino UNO via bluetooth pela 501ª vez. Mas quero transmitir não apenas caracteres e números, mas imagens.

Alguém dirá que é impossível, Arduino é lento para processar grandes quantidades de dados com boa velocidade. E estará absolutamente certo. E se dermos uma ajudinha ao Arduino – transferir todo o trabalho "pesado" para outro dispositivo? E existe tal dispositivo!

Este é um shield TFT único para Arduino. Informações sobre este logo estão nestes artigos: artigo 1, artigo 2. Neste tutorial, demonstrarei como conectar via bluetooth entre Arduino e celular Android, obter imagem da câmera OV7670 no Arduino UNO e transferir para o celular. E, inversamente, transferir imagem (da câmera) do celular para Arduino UNO e exibi-la na tela do shield TFT único.

Um aplicativo especial foi escrito para o celular Android.

Características do Shield TFT

Lista de Componentes Necessários

Câmera Bluetooth Arduino (ABC): Conecte seu Celular via Bluetooth para Capturar Imagens

Hardware:

Atenção: É necessário (!) usar adaptador 6-12V para operar o shield TFT, pois os 500mA máximos do USB não são suficientes.

Software:

Preparação

Software

Todos os sketches de demonstração são escritos no Arduino IDE, portanto instale-o: https://www.arduino.cc/en/main/software. Depois instale biblioteca para shield TFT: github.com/YATFT/YATFT (baixe e descompacte na pasta "libraries" do diretório Arduino IDE).

Após instalar Arduino IDE, programe o Arduino UNO. Por simplicidade, recomendo gravar separadamente, sem shield TFT:

Se programado com sucesso, prossiga.

Sketch ArduinoBluetoothCamera.ino

/********************************************************************** 
 * SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT WARRANTY... 
 ***********************************************************************/
#include <YATFT.h> 
#include <util/yacam.h> 
#include <util/yacodec.h> 
#include <util/yasrl.h> 
#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 240 
uint8_t mode = 0; 
uint8_t last_mode = 0; 
uint8_t start_capt = 0; 
uint16_t err; 

void setup() { 
  Serial.begin(115200); 
  tft.begin(); 
  tft.SetColor(BRIGHTRED); 
  tft.ClearDevice(); 
} 

void loop() { 
  if (Serial.available()) { 
    uint8_t temp = Serial.read(); 
    switch (temp) { 
      case 0x10: // Enviar Foto Única 
        mode = 1; start_capt = 1; 
        if (last_mode != mode && last_mode != 2) { 
          tft.begin(); tft.SetRGB(); 
          cam.CamInit(&OV7670_QVGA[0][0]); 
          cam.CamVideoPreview(0, 0, 1, true); 
          codec.JPEGInit(); 
          codec.JPEGSetRegs(IMG_SizeX, IMG_SizeY); 
          delay(1000); 
        } 
        break; 
      case 0x20: // Envio Contínuo 
        mode = 2; start_capt = 2; 
        if (last_mode != mode && last_mode != 1) { 
          tft.begin(); tft.SetRGB(); 
          cam.CamInit(&OV7670_QVGA[0][0]); 
          cam.CamVideoPreview(0, 0, 1, true); 
          codec.JPEGInit(); 
          codec.JPEGSetRegs(IMG_SizeX, IMG_SizeY); 
        } 
        break; 
      case 0x30: // Receber Foto Única 
        mode = 3; start_capt = 3; 
        if (last_mode != mode && last_mode != 4) { 
          tft.begin(); tft.SetYUV(); 
        } 
        break; 
      case 0x40: // Recebimento Contínuo 
        mode = 4; start_capt = 4; 
        if (last_mode != mode && last_mode != 3) { 
          tft.begin(); tft.SetYUV(); 
        } 
        break; 
      default: break; 
    } 
  } 
  // ... lógica dos 4 modos (código completo no original)
} 

uint8_t CamCapture(void) { 
  // Captura JPEG da câmera e envia via serial 
  // ... implementação completa no original
}

OV7670_regs.h

#ifndef OV7670_REGS_H 
#define OV7670_REGS_H 
const uint8_t OV7670_VGA[][2] PROGMEM = { 
  { 1, 0x42}, { 640/16, 480/16}, {0b01000010, 0b00000100}, 
  {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}, { 320/16, 240/16}, {0b01000010, 0b00000100}, 
  {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

No celular Android, instale o ArduinoTFT.apk. Permita que o app use Bluetooth e Câmera.

Atualização 26/05/2020! Adicionei código fonte do ArduinoTFT.apk. AS IS! Baixe ArduinoTFT.zip.h, renomeie para ArduinoTFT.zip e descompacte.

Atualização 25/07/2020! "Oi, tive mesmo problema com App Android que não funciona. Resolvi após autorizar o App a acessar a câmera do smartphone. É isso. Tchau"

Módulo Bluetooth

Configure a taxa de transmissão do módulo Bluetooth para 115200 (comando "AT+UART=115200, 0, 0"). É a velocidade ótima para o Arduino UNO receber e processar dados. Instruções detalhadas: https://www.instructables.com/id/Communication-Bluetooth-Module-With-HC-05-HC-06/.

(!) O módulo Bluetooth conecta à porta de debug do Arduino UNO. Assim, ao trabalhar com bluetooth, a porta de debug não está disponível. Antes de programar o Arduino UNO (com módulo Bluetooth) deve desconectar o módulo Bluetooth. E após programar, recolocá-lo (!)

Montagem

Câmera Bluetooth Arduino (ABC): Conecte seu Celular via Bluetooth para Capturar Imagens
Câmera Bluetooth Arduino (ABC): Conecte seu Celular via Bluetooth para Capturar Imagens
Câmera Bluetooth Arduino (ABC): Conecte seu Celular via Bluetooth para Capturar Imagens
Câmera Bluetooth Arduino (ABC): Conecte seu Celular via Bluetooth para Capturar Imagens
Câmera Bluetooth Arduino (ABC): Conecte seu Celular via Bluetooth para Capturar Imagens
Câmera Bluetooth Arduino (ABC): Conecte seu Celular via Bluetooth para Capturar Imagens
Câmera Bluetooth Arduino (ABC): Conecte seu Celular via Bluetooth para Capturar Imagens
Câmera Bluetooth Arduino (ABC): Conecte seu Celular via Bluetooth para Capturar Imagens
Câmera Bluetooth Arduino (ABC): Conecte seu Celular via Bluetooth para Capturar Imagens

Montagem é simples:

Após ligar, a tela do shield TFT deve ficar vermelha. Isso indica prontidão para receber comandos do celular Android.

Demonstração

Câmera Bluetooth Arduino (ABC): Conecte seu Celular via Bluetooth para Capturar Imagens
Câmera Bluetooth Arduino (ABC): Conecte seu Celular via Bluetooth para Capturar Imagens
Câmera Bluetooth Arduino (ABC): Conecte seu Celular via Bluetooth para Capturar Imagens
Câmera Bluetooth Arduino (ABC): Conecte seu Celular via Bluetooth para Capturar Imagens
Câmera Bluetooth Arduino (ABC): Conecte seu Celular via Bluetooth para Capturar Imagens
Câmera Bluetooth Arduino (ABC): Conecte seu Celular via Bluetooth para Capturar Imagens

No celular Android:

Devem aparecer duas janelas e quatro botões:

Funções dos botões:

Tamanho da imagem: 320x240 pixels (2-5 kB). Este capítulo tem vídeo demo.

Se gostou, agradeço uma avaliação. Talvez me motive para novos artigos. :-)

Obrigado por assistir!

Artigos anteriores:

  1. Unique TFT Shield for Arduino Uno - Start
  2. Unique Arduino TFT Shield - OV7670 Cam

Próximos artigos:

  1. TFT shield for Arduino Nano - Start
  2. Photos and RGB video on TFT SPI display
  3. Control by Smartphone 4WD Robot Car over Bluetooth

Atualização 01.04.2021: Biblioteca atualizada para série de telas (dois shields e duas breakout boards). O sketch compila dependendo da versão selecionada (1 a 4) e tipo de microcontrolador (MegaAVR ou ESP-32). Mais info em https://github.com/Ekaburg/EkaTFT.

Código

Biblioteca para Shield TFT

https://github.com/YATFT/YATFT

Peças Personalizadas e Gabinetes

Câmera Bluetooth Arduino (ABC): Conecte seu Celular via Bluetooth para Capturar Imagens Câmera Bluetooth Arduino (ABC): Conecte seu Celular via Bluetooth para Capturar Imagens

Processo de manufatura

  1. A Evolução e Design das Câmeras Modernas
  2. Entendendo Lentes de Câmera: Design, História e Inovações Futuras
  3. BrickPi Bookreader: Automatize Leitura no Kindle com Raspberry Pi e LEGO Mindstorms
  4. Construa um Robô Raspberry Pi Controlado por Bluetooth com Feedback de Áudio
  5. Slider Motorizado para Câmera com Bluetooth e Arduino para Tomadas Cinematográficas Suaves
  6. Controlar um LED via Bluetooth com Arduino – Guia DIY Simples
  7. Eletrodomésticos Ativados por Voz: Controle Bluetooth com Google Assistant
  8. Sistema Portátil de Câmera de Vigilância Remota
  9. Sistema Avançado de Detecção de Quedas com Arduino, Windows IoT e Azure Cloud
  10. Controle Remoto de Lâmpada com Arduino Uno, Relé e App Android (Blynk)