Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Cámara Bluetooth Arduino (ABC)

Componentes y suministros

Arduino UNO
× 1
Módulo Bluetooth HC-05
× 1
Cámara OV7670
× 1
Arduino TFT shield
× 1

Acerca de este proyecto

Hoy en día, difícilmente puede sorprender a nadie con un teléfono móvil con cámara, dispositivos inalámbricos y otros avances técnicos. Gracias a la plataforma Arduino, millones de personas han descubierto el maravilloso mundo de la electrónica y la programación. Se escribieron 100, 500 instrucciones sobre cómo intercambiar datos entre un teléfono móvil y Arduino a través de bluetooth ... ¿De qué estoy hablando? Si. Quiero intercambiar datos entre un teléfono móvil con Android y Arduino UNO a través de bluetooth en 100, 501 veces. Pero quiero transmitir no solo un conjunto de caracteres y números, sino imágenes.

Alguien dirá que esto es imposible, Arduino es demasiado lento para procesar grandes cantidades de datos con buena velocidad. Y tendrá toda la razón. ¿Y si un poco de ayuda Arduino - para transferir todo el trabajo "duro" sobre los hombros de otro dispositivo? ¡Y existe tal dispositivo!

Este es un escudo TFT único para Arduino. La información sobre este logotipo se encuentra en estos artículos:artículo 1, artículo 2 En este tutorial, demostraré cómo puede conectarse a través de bluetooth entre Arduino y un teléfono Android, obtener una imagen de la cámara OV7670 en Arduino UNO y transferirla a un teléfono Android. Luego, por el contrario, transfiera la imagen (imagen de la cámara) del teléfono Android a Arduino UNO y muéstrela en la pantalla de un escudo TFT único.

Se escribió una aplicación especial para el teléfono Android.

Breves características del escudo TFT:

  • Tamaño de 3,5 "en diagonal,
  • Resolución 320x240,
  • Número de colores 65536 (16 bits),
  • Pantalla táctil resistiva (controlador XPT2046),
  • 5 botones,
  • RTC IC DS1307 con batería de litio de 3 V CR1220,
  • Ranura para conectar una tarjeta micro SD,
  • Conector de 4 pines (2,54 mm) para conectar el módulo Bluetooth HC-05 (-06), módulo WiFi ESP8286.
  • Conector de 20 pines (2,54 mm) para cámara (OV7670).

Lista de componentes necesarios

Hardware :

  • Arduino UNO;
  • Escudo TFT exclusivo;
  • Adaptador de corriente AC-DC 6-12 voltios,> 600mA;
  • Cámara OV7670;
  • Módulo Bluetooth HC-06 (HC-05);
  • teléfono Android.

Atención:Es necesario (!) Usar un adaptador de corriente de 6-12 voltios para operar el blindaje TFT, porque la corriente máxima de 500 mA desde USB no es suficiente para el funcionamiento normal.

Software :

  • IDE de Arduino;
  • Biblioteca para el escudo TFT exclusivo;
  • Archivo APK para teléfono Android.

Preparando

Software

Todos los bocetos de demostración están escritos en el entorno IDE de Arduino, por lo que al principio es necesario instalar el IDE de Arduino - https://www.arduino.cc/en/main/software Luego debe instalar una biblioteca para el escudo TFT - github.com/YATFT/YATFT (descargue la biblioteca y descomprímala en la carpeta "bibliotecas" en el directorio IDE de Arduino).

Después de instalar el IDE de Arduino, debe programar la placa Arduino UNO. Por simplicidad, recomiendo flashearlo por separado, sin protector TFT. Para esto:

  • Conecte el cable USB a la placa Arduino UNO;
  • Ejecute el IDE de Arduino en la computadora;
  • Seleccione el puerto correspondiente al que está conectado Arduino UNO;
  • Descargue ArduinoBluetoothCamera.ino boceto de demostración (y archivo ov7670_regs.h para inicio de cámara);
  • Haga clic en el botón Subir .

Si la placa Arduino UNO está programada correctamente, puede continuar con el siguiente paso.

ArduinoBluetoothCamera.ino bosquejo:

  / ***************************************** *************************** EL SOFTWARE Y LA DOCUMENTACIÓN SE PROPORCIONAN "TAL CUAL" SIN GARANTÍA DE * NINGÚN TIPO, YA SEA EXPRESA O IMPLÍCITA, INCLUYENDO SIN LIMITACIÓN, CUALQUIER * GARANTÍA DE COMERCIALIZACIÓN, TÍTULO, NO INFRACCIÓN Y APTITUD PARA UN * PROPÓSITO PARTICULAR. EN NINGÚN CASO EL AUTOR O SUS LICENCIANTES SERÁN * RESPONSABLES U OBLIGADOS BAJO CONTRATO, NEGLIGENCIA, RESPONSABILIDAD ESTRICTA, * CONTRIBUCIÓN, INCUMPLIMIENTO DE GARANTÍA U OTRA TEORÍA LEGAL EQUITATIVA * CUALQUIER DAÑO O GASTO * DIRECTO O INDIRECTO INCLUYENDO, PERO NO LIMITADO A * DAÑOS ESPECIALES, INDIRECTOS, PUNITIVOS O CONSECUENTES, * PÉRDIDA DE BENEFICIOS O DATOS, COSTO DE ADQUISICIÓN DE BIENES SUSTITUTOS, * TECNOLOGÍA, SERVICIOS O CUALQUIER RECLAMO DE TERCEROS (INCLUYENDO PERO * SIN LIMITARSE A CUALQUIER COSTOS DE DEFENSA) U OTROS COSTOS SIMILARES . *********************************************** ********************** / # incluir  #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_mode8 =0; uint8_t start_capt =0; uint16_t err; void setup () {// inicializar el puerto serie Serial.begin (115200); // inicializar la pantalla tft.begin (); tft.SetColor (BRILLANTE); tft.ClearDevice ();} void loop () {// ponga su código principal aquí, para que se ejecute repetidamente:if (Serial.available ()) {uint8_t temp =Serial.read (); switch (temp) {case 0x10:// Enviar modo de foto única =1; start_capt =1; if (last_mode! =mode &&last_mode! =2) {tft.begin (); tft.SetRGB (); // Cambiar al modo RGB cam.CamInit (&OV7670_QVGA [0] [0]); cam.CamVideoPreview (0, 0, 1, verdadero); codec.JPEGInit (); codec.JPEGSetRegs (IMG_SizeX, IMG_SizeY); retraso (1000); } descanso; case 0x20:// Modo de foto de envío continuo =2; start_capt =2; if (last_mode! =mode &&last_mode! =1) {tft.begin (); tft.SetRGB (); // Cambiar al modo RGB cam.CamInit (&OV7670_QVGA [0] [0]); cam.CamVideoPreview (0, 0, 1, verdadero); codec.JPEGInit (); codec.JPEGSetRegs (IMG_SizeX, IMG_SizeY); } descanso; case 0x30:// Recibir modo de foto única =3; start_capt =3; if (last_mode! =mode &&last_mode! =4) {tft.begin (); tft.SetYUV (); // Cambiar al modo YUV} break; case 0x40:// Modo de foto de recepción continua =4; start_capt =4; if (last_mode! =mode &&last_mode! =3) {tft.begin (); tft.SetYUV (); // Cambiar al modo YUV} break; predeterminado:descanso; }} if (mode ==1) // Enviar una sola foto {if (start_capt ==1) {start_capt =0; last_mode =modo; modo =0; CamCapture (); }} else if (modo ==2) // Continuo enviar foto {while (1) {uint8_t temp =Serial.read (); if (start_capt ==2) {start_capt =0; } if (temp ==0x21) // ¿Detener? {start_capt =0; last_mode =modo; modo =0; descanso; } si (CamCapture ()) continuar; }} else if (mode ==3) // Recibir una sola foto {if (start_capt ==3) {// Iniciar captura start_capt =0; last_mode =modo; modo =0; Serial.print ("!"); srl.JPEGReadFromSerial (&jpeg_decode, // jpeg decodificar estructura 0, // x0 (izquierda) 0, // y0 (arriba) GetMaxX () + 1, // x1 (derecha) GetMaxY () + 1, // y1 (abajo ) 32000); // tamaño máximo de la imagen}} else if (modo ==4) // Foto de recepción continua {uint8_t temp =Serial.read (); while (1) {if (start_capt ==4) {// Iniciar captura start_capt =0; } if (temp ==0x41) // ¿Detener? {start_capt =0; last_mode =modo; modo =0; descanso; } Serial.print ("!"); srl.JPEGReadFromSerial (&jpeg_decode, // jpeg decodificar estructura 0, // x0 (izquierda) 0, // y0 (arriba) GetMaxX () + 1, // x1 (derecha) GetMaxY () + 1, // y1 (abajo ) 32000); // tamaño máximo de imagen}}} uint8_t CamCapture (void) {uint8_t temp =0xff, temp_last =0; bool is_header =false; uint32_t longitud =0; longitud =codec.JPEGStart (); uint32_t en_jpeg_address =ifc.rdReg32 (0x414) <<2; int k =0; if ((longitud> =0x5FFFF) | (longitud ==0)) {start_capt =2; return 1; } temp =ifc.GetMem (en_jpeg_address + k); k ++; longitud --; while (longitud--) {temp_last =temp; temp =ifc.GetMem (en_jpeg_address + k); k ++; if (is_header ==true) {Serial.write (temp); } más si ((temp ==0xD8) &(temp_last ==0xFF)) {is_header =true; Serial.write (temp_last); Serial.write (temp); } if ((temp ==0xD9) &&(temp_last ==0xFF)) // Si encuentra el final, romper mientras, romper; } is_header =false; return 0;}  

OV7670_regs.h:

  #ifndef OV7670_REGS_H # define OV7670_REGS_Hconst uint8_t OV7670_VGA [] [2] PROGMEM ={{1, 0x42}, // Tamaño del byte, Dirección (ID) {640/16, 480/16}, // Tamaño X, Tamaño 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}, // Tamaño del byte, Dirección (ID) {320/16, 240/16}, // Tamaño X, Tamaño 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

En el teléfono Android, debe instalar ArduinoTFT.apk . Permita que la aplicación utilice Bluetooth y la cámara.

¡Actualización 26/05/2020!

Agregué el código fuente de ArduinoTFT.apk. ¡COMO ES! Descarga ArduinoTFT.zip.h

, cambie el nombre a ArduinoTFT.zip y descomprimir. ¡Disfrutar!

¡Actualización 25/07/2020!

"Hola, tuve el mismo problema con la aplicación de Android que no funciona. Resuelto después de autorizar el acceso de la aplicación a la cámara del teléfono inteligente. Eso es todo. Adiós" (c)

Módulo Bluetooth

Es necesario establecer el tipo de cambio en el módulo Bluetooth en 115200 (comando "AT + UART =115200, 0, 0"). Esta es la velocidad óptima a la que Arduino UNO logra recibir y procesar datos. (Teóricamente, puede aumentar la velocidad, optimizar la recepción y el procesamiento de datos, pero esto requiere una mayor cantidad de RAM) .En Internet se pueden encontrar instrucciones más detalladas sobre cómo establecer el tipo de cambio, por ejemplo, aquí:https:/ /www.instructables.com/id/Communication-Bluetooth-Module-With-HC-05-HC-06/.

(!) Tenga en cuenta que el módulo Bluetooth se conecta al puerto de depuración de Arduino UNO. Por lo tanto, cuando se trabaja con bluetooth, el puerto de depuración no está disponible. Y antes de programar el Arduino UNO (completo con el módulo Bluetooth) debes desconectar el módulo Bluetooth. Y después de la programación, vuelva a configurarlo (!)

Ensamblaje

El montaje del dispositivo es bastante sencillo:

  • Conecte juntos Arduino UNO y TFT-shield;
  • Conecte la cámara OV7670 al conector de 20 pines en el blindaje TFT del blindaje (a veces utilizo un conector en ángulo de 18-20 pines con un paso de 2,54 mm como adaptador);
  • Conecte el módulo Bluetooth HC-06 (HC-05) al conector de 4 pines con las palabras "Bluetooth" en el protector TFT;
  • Conecte el adaptador de corriente de 6-12V a la entrada de corriente de la placa Arduino UNO.

Después de encender la alimentación, la pantalla del escudo TFT debería volverse roja. Esto significa la voluntad de recibir comandos desde el teléfono Android.

Demostración

Realice las siguientes operaciones en el teléfono Android:

  • Inicie ArduinoTFT aplicación en el teléfono Android;
  • Gire el teléfono en posición horizontal;
  • Habilite la conexión Bluetooth, seleccione el módulo Bluetooth detectado (HC-06);

Deben aparecer dos ventanas y cuatro botones en la pantalla:

  • La ventana superior derecha es la ventana del visor de la cámara del teléfono;
  • Gran ventana izquierda:imágenes enviadas o recibidas.

Funciones de los botones:

  • Transfiere una sola imagen desde un teléfono Android a Arduino;
  • Transferencia continua de imágenes desde el teléfono Android a Arduino;
  • Transfiera una sola imagen desde Arduino a un teléfono Android;
  • Transferencia continua de imágenes desde Arduino a un teléfono Android.

El tamaño de la imagen es de 320x240 píxeles (2-5 kB). Este capítulo tiene un video de demostración.

Si te gusta mi artículo, agradecería una valoración. Quizás esto me dé motivación para nuevos artículos. :-)

¡Gracias por mirar!

Artículos anteriores:

1) Escudo TFT único para Arduino Uno - Inicio,

2) Escudo Arduino TFT único - OV7670 Cam.

Artículos siguientes:

3) Escudo TFT para Arduino Nano - Inicio,

4) Fotos y video RGB en pantalla TFT SPI.

5) Control mediante el coche robot 4WD con teléfono inteligente a través de Bluetooth.

Actualización 01.04.2021:

¡Hola de nuevo! Existe una biblioteca actualizada para una serie de pantallas, que actualmente consta de dos escudos y dos placas de conexión. El boceto se compila en función de la versión seleccionada (de 1 a 4) y el tipo de microcontrolador (MegaAVR o ESP-32). Fotos agregadas, ejemplos. Puede encontrar más información en https://github.com/Ekaburg/EkaTFT.

Código

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

Piezas y carcasas personalizadas

Experimente con el OV7670 y el televisor con control remoto Experimente con la cámara OV7670 y el control remoto del televisor

Proceso de manufactura

  1. Cámara
  2. Lente de la cámara
  3. Lector de libros BrickPi
  4. Robot Raspberry Pi controlado por Bluetooth
  5. Deslizador de cámara motorizado controlado por Bluetooth Arduino
  6. ¡Arduino con Bluetooth para controlar un LED!
  7. Dispositivos Bluetooth controlados por voz con OK Google
  8. Cámara de vigilancia remota móvil
  9. Un sistema de detección de caídas basado en Arduino, Windows y Azure
  10. Arduino Uno + Dispositivo eléctrico (bombilla) + Teléfono Android
  11. Controla tu sistema de iluminación mediante un teléfono inteligente