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 Arduino Bluetooth (ABC)

Componentes e suprimentos

Arduino UNO
× 1
Módulo Bluetooth HC-05
× 1
Câmera OV7670
× 1
Arduino TFT shield
× 1

Sobre este projeto


Hoje você dificilmente pode surpreender alguém com um telefone celular com câmera, aparelhos sem fio e outros avanços técnicos. Graças à plataforma Arduino, milhões de pessoas descobriram o maravilhoso mundo da eletrônica e da programação. 100, 500 instruções foram escritas sobre como trocar dados entre um telefone celular e o Arduino via bluetooth ... Do que estou falando? sim. Quero trocar dados entre um telefone celular no Android e o Arduino UNO por bluetooth em 100, 501 vezes. Mas quero transmitir não apenas um conjunto de caracteres e números, mas também imagens.

Alguém dirá que isso é impossível, o Arduino é muito lento para processar grandes quantidades de dados com boa velocidade. E ele estará absolutamente certo. E se um pouco de ajuda Arduino - para transferir todo o trabalho "duro" para os ombros de outro dispositivo? E esse dispositivo existe!

Este é um escudo TFT exclusivo para Arduino. As informações sobre esse logotipo estão nestes artigos:artigo 1, artigo 2 Neste tutorial, demonstrarei como você pode se conectar via bluetooth entre o Arduino e o telefone Android, obter uma foto da câmera OV7670 no Arduino UNO e transferi-la para o telefone Android. Então, ao contrário, transfira a imagem (imagem da câmera) do telefone Android para o Arduino UNO e exiba-a na tela de um escudo TFT exclusivo.

Um aplicativo especial foi escrito para o telefone Android.

Breves características do escudo TFT:
  • Tamanho 3,5 "na diagonal,
  • Resolução 320x240,
  • Número de cores 65536 (16 bits),
  • Tela de toque resistiva (controlador XPT2046),
  • 5 botões,
  • RTC IC DS1307 com bateria de lítio de 3 V CR1220,
  • Slot para conectar um cartão micro SD,
  • Conector de 4 pinos (2,54 mm) para conectar o módulo Bluetooth HC-05 (-06), módulo WiFi ESP8286.
  • Conector de 20 pinos (2,54 mm) para câmera (OV7670).





Lista de componentes necessários


Hardware :
  • Arduino UNO;
  • Escudo TFT exclusivo;
  • Adaptador de alimentação AC-DC 6-12 volts,> 600mA;
  • Câmera OV7670;
  • Módulo Bluetooth HC-06 (HC-05);
  • telefone Android.

Atenção:É necessário (!) Usar um adaptador de alimentação de 6-12 volts para operar a blindagem TFT, pois a corrente máxima de 500 mA do USB não é suficiente para a operação normal.

Software :
  • Arduino IDE;
  • Biblioteca para escudo TFT exclusivo;
  • Arquivo APK para telefone Android.





Preparando


Software

Todos os esboços de demonstração são escritos no ambiente Arduino IDE, portanto, no início é necessário instalar o Arduino IDE - https://www.arduino.cc/en/main/software. Em seguida, você precisa instalar uma biblioteca para o escudo TFT - github.com/YATFT/YATFT (baixe a biblioteca e descompacte-a na pasta "libraries" no diretório IDE do Arduino).

Após instalar o Arduino IDE, você deve programar a placa Arduino UNO. Para simplificar, eu recomendo piscar separadamente, sem escudo TFT. Por esta:
  • Conecte o cabo USB à placa Arduino UNO;
  • Execute o IDE Arduino no computador;
  • Selecione a porta correspondente à qual o Arduino UNO está conectado;
  • Baixe o ArduinoBluetoothCamera.ino esboço de demonstração (e arquivo ov7670_regs.h para câmera init);
  • Clique no botão Upload .

Se a placa Arduino UNO for programada com sucesso, você pode prosseguir para a próxima etapa.

ArduinoBluetoothCamera.ino esboço:
  / ******************************************* ***************************** O SOFTWARE E A DOCUMENTAÇÃO SÃO FORNECIDOS "TAL COMO ESTÃO" SEM GARANTIA DE * QUALQUER TIPO, EXPRESSA OU IMPLÍCITA, INCLUINDO SEM LIMITAÇÃO, QUALQUER * GARANTIA DE COMERCIALIZAÇÃO, TÍTULO, NÃO VIOLAÇÃO E ADEQUAÇÃO A UM * FIM ESPECÍFICO. EM NENHUMA HIPÓTESE O AUTOR OU SEUS LICENCIADORES SERÁ * RESPONSÁVEL OU OBRIGADO SOB CONTRATO, NEGLIGÊNCIA, RESPONSABILIDADE RIGOROSA, * CONTRIBUIÇÃO, QUEBRA DE GARANTIA OU OUTRA TEORIA LEGAL EQUITATIVA QUALQUER * DANOS OU DESPESAS DIRETOS OU INDIRETOS, INCLUINDO *, SEM LIMITAÇÃO, INCLUINDO * SEM LIMITAÇÃO. DANOS ESPECIAIS, INDIRETOS, PUNITIVOS OU CONSEQÜENCIAIS, * PERDA DE LUCROS OU DADOS, CUSTO DE AQUISIÇÃO DE MERCADORIAS DE SUBSTITUIÇÃO, * TECNOLOGIA, SERVIÇOS OU QUAISQUER RECLAMAÇÕES DE TERCEIROS (INCLUINDO, MAS * NÃO SE LIMITANDO A QUALQUER DEFESA SIMILAR, OU OUTROS CUSTO SEMELHANTE A ESSES. . ************************************************* *********************** / # 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_teste8_tode modo =0; uint8_tode =0; uint8_tode mode =0; uint8 0; uint8_t start_capt =0; uint16_t err; void setup () {// inicializa a porta serial Serial.begin (115200); // inicializa o display tft.begin (); tft.SetColor (BRIGHTRED); tft.ClearDevice ();} void loop () {// coloque seu código principal aqui, para executar repetidamente:if (Serial.available ()) {uint8_t temp =Serial.read (); switch (temp) {case 0x10:// Send single Photo mode =1; start_capt =1; if (last_mode! =mode &&last_mode! =2) {tft.begin (); tft.SetRGB (); // Muda para o modo RGB cam.CamInit (&OV7670_QVGA [0] [0]); cam.CamVideoPreview (0, 0, 1, verdadeiro); codec.JPEGInit (); codec.JPEGSetRegs (IMG_SizeX, IMG_SizeY); atraso (1000); } pausa; case 0x20:// Envio contínuo modo Foto =2; start_capt =2; if (last_mode! =mode &&last_mode! =1) {tft.begin (); tft.SetRGB (); // Muda para o modo RGB cam.CamInit (&OV7670_QVGA [0] [0]); cam.CamVideoPreview (0, 0, 1, verdadeiro); codec.JPEGInit (); codec.JPEGSetRegs (IMG_SizeX, IMG_SizeY); } pausa; case 0x30:// Recebe modo de uma única foto =3; start_capt =3; if (last_mode! =mode &&last_mode! =4) {tft.begin (); tft.SetYUV (); // Muda para o modo YUV} break; case 0x40:// Recebimento contínuo modo Foto =4; start_capt =4; if (last_mode! =mode &&last_mode! =3) {tft.begin (); tft.SetYUV (); // Muda para o modo YUV} break; padrão:break; }} if (mode ==1) // Enviar uma única foto {if (start_capt ==1) {start_capt =0; last_mode =mode; modo =0; CamCapture (); }} else if (mode ==2) // Envio contínuo de foto {while (1) {uint8_t temp =Serial.read (); if (start_capt ==2) {start_capt =0; } if (temp ==0x21) // Parar? {start_capt =0; last_mode =mode; modo =0; pausa; } if (CamCapture ()) continue; }} else if (mode ==3) // Receber uma única foto {if (start_capt ==3) {// Iniciar a captura start_capt =0; last_mode =mode; modo =0; Serial.print ("!"); srl.JPEGReadFromSerial (&jpeg_decode, // estrutura de decodificação jpeg 0, // x0 (esquerda) 0, // y0 (superior) GetMaxX () + 1, // x1 (direita) GetMaxY () + 1, // y1 (inferior ) 32000); // tamanho máximo da imagem}} else if (mode ==4) // Recebimento contínuo da foto {uint8_t temp =Serial.read (); while (1) {if (start_capt ==4) {// Iniciar captura start_capt =0; } if (temp ==0x41) // Parar? {start_capt =0; last_mode =mode; modo =0; pausa; } Serial.print ("!"); srl.JPEGReadFromSerial (&jpeg_decode, // estrutura de decodificação jpeg 0, // x0 (esquerda) 0, // y0 (superior) GetMaxX () + 1, // x1 (direita) GetMaxY () + 1, // y1 (inferior ) 32000); // tamanho máximo da imagem}}} uint8_t CamCapture (void) {uint8_t temp =0xff, temp_last =0; bool is_header =false; comprimento uint32_t =0; comprimento =codec.JPEGStart (); uint32_t en_jpeg_address =ifc.rdReg32 (0x414) <<2; int k =0; if ((comprimento> =0x5FFFF) | (comprimento ==0)) {start_capt =2; return 1; } temp =ifc.GetMem (en_jpeg_address + k); k ++; comprimento --; enquanto (comprimento--) {temp_último =temp; temp =ifc.GetMem (en_jpeg_address + k); k ++; if (is_header ==true) {Serial.write (temp); } else if ((temp ==0xD8) &(temp_last ==0xFF)) {is_header =true; Serial.write (temp_last); Serial.write (temp); } if ((temp ==0xD9) &&(temp_last ==0xFF)) // Se encontrar o fim, interrompa enquanto, interrompe; } is_header =false; return 0;}  

OV7670_regs.h:
  #ifndef OV7670_REGS_H # define OV7670_REGS_Hconst uint8_t OV7670_VGA [] [2] PROGMEM ={{1, 0x42}, // Tamanho do byte, Endereço (ID) {640/16, 480/16}, // Tamanho X, Tamanho Y {0b01000010, 0b00000100}, // Reset_Enable_N, 7 | 6 | 5 | 5 | 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}, // Tamanho do byte, Endereço (ID) {320/16, 240/16}, // Tamanho X, Tamanho Y {0b01000010, 0b00000100}, // Reset_Enable_N, 7 | 6 | 5 | 4 | 3 | Inverter Vsync | Inverter Hsync | 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

No telefone Android, você precisa instalar o ArduinoTFT.apk . Permita que o aplicativo use o Bluetooth e a câmera.

Atualização em 26/05/2020!

Eu adicionei código fonte de ArduinoTFT.apk. COMO É! Baixe ArduinoTFT.zip.h

, renomeie para ArduinoTFT.zip e descompacte. Aproveitar!

Atualização em 25/07/2020!

"Olá, tive o mesmo problema com o App Android que não funciona. Resolvido após autorizar o acesso do App pela câmera do smartphone. É isso. Tchau" (c)

Módulo Bluetooth

É necessário definir a taxa de câmbio no módulo Bluetooth para 115200 (comando "AT + UART =115200, 0, 0"). Esta é a velocidade ideal na qual o Arduino UNO consegue receber e processar dados. (Teoricamente, você pode aumentar a velocidade, otimizar a recepção e processamento de dados, mas isso requer uma quantidade maior de RAM). Instruções mais detalhadas sobre como definir a taxa de câmbio podem ser encontradas na Internet, por exemplo, aqui:https:/ /www.instructables.com/id/Communication-Bluetooth-Module-With-HC-05-HC-06/.

(!) Observe que o módulo Bluetooth se conecta à porta de depuração do Arduino UNO. Portanto, ao trabalhar com bluetooth, a porta de depuração não está disponível. E antes de programar o Arduino UNO (completo com o módulo Bluetooth) deve desconectar o módulo Bluetooth. E depois de programar, configure novamente (!)





Montagem


A montagem do dispositivo é bastante simples:
  • Conecte o Arduino UNO e o escudo TFT;
  • Conecte a câmera OV7670 ao conector de 20 pinos na blindagem TFT da blindagem (às vezes eu uso um conector angular de 18-20 pinos com um passo de 2,54 mm como adaptador);
  • Conecte o módulo Bluetooth HC-06 (HC-05) ao conector de 4 pinos com as palavras "Bluetooth" no escudo TFT;
  • Conecte o adaptador de alimentação 6-12 V à entrada de alimentação na placa Arduino UNO.

Depois de ligar a energia, a tela do escudo TFT deve ficar vermelha. Isso significa a disposição de receber comandos do telefone Android.





Demonstração


Execute as seguintes operações no telefone Android:
  • Inicie o ArduinoTFT aplicativo no telefone Android;
  • Vire o telefone na posição horizontal;
  • Habilite a conexão Bluetooth, selecione o módulo Bluetooth detectado (HC-06);

Duas janelas e quatro botões devem aparecer na tela:
  • A janela superior direita é a janela do visor da câmera do telefone;
  • Grande janela esquerda - imagens recebidas ou enviadas.

Funções dos botões:
  • Transfira uma única imagem do telefone Android para o Arduino;
  • Transferência contínua de imagens do telefone Android para o Arduino;
  • Transfira uma única imagem do Arduino para o telefone Android;
  • Transferência contínua de imagens do Arduino para o telefone Android.

O tamanho da imagem é 320x240 pixels (2-5 kB). Este capítulo tem um vídeo de demonstração.

Se você gosta do meu artigo, gostaria de receber uma avaliação. Talvez isso me dê motivação para novos artigos. :-)

Obrigado por assistir!

Artigos anteriores:

1) Escudo TFT exclusivo para Arduino Uno - Iniciar,

2) Escudo TFT Arduino exclusivo - OV7670 Cam.

Próximos artigos:

3) Escudo TFT para Arduino Nano - Iniciar,

4) Fotos e vídeo RGB em exibição TFT SPI.

5) Controle por Smartphone 4WD Robot Car sobre Bluetooth.

Atualização 01.04.2021:

Olá de novo! Há uma biblioteca atualizada para uma série de telas, que atualmente consiste em dois escudos e duas placas de quebra. O esboço é compilado dependendo da versão selecionada (de 1 a 4) e do tipo de microcontrolador (MegaAVR ou ESP-32). Adicionadas fotos, exemplos. Mais informações podem ser encontradas em https://github.com/Ekaburg/EkaTFT.


Código

Biblioteca para escudo TFT
http://github.com/YATFT/YATFT

Peças personalizadas e gabinetes

Experimente o OV7670 e o controle remoto da TV Experimente com a câmera OV7670 e o controle remoto da TV

Processo de manufatura

  1. Câmera
  2. Lente da câmera
  3. BrickPi Bookreader
  4. Robô Raspberry Pi controlado por Bluetooth
  5. Deslizador de câmera motorizada Arduino controlado por Bluetooth
  6. Arduino com Bluetooth para controlar um LED!
  7. Dispositivos Bluetooth controlados por voz com OK Google
  8. Câmera de vigilância remota móvel
  9. Um sistema de detecção de queda baseado em Arduino, Windows e Azure
  10. Arduino Uno + Dispositivo elétrico (Bulb) + Telefone Android