En este emocionante tutorial, te mostraremos cómo construir tu propia cámara de seguridad utilizando una ESP32-CAM y un sensor PIR AM312 para detectar movimiento. Lo mejor de todo, ¡las fotos se guardarán directamente en una tarjeta SD!
Tal vez pueda interesarte proyectos en arduino, pic, robótica, telecomunicaciones, suscribete en http://www.youtube.com/user/carlosvolt?sub_confirmation=1 mucho videos con código fuentes completos y diagramas
A lo largo de este video, te guiaremos a través de los siguientes pasos:
- Conexión de Hardware: Te mostraremos cómo conectar la ESP32-CAM y el sensor PIR AM312 a tu protoboard, garantizando una correcta alimentación.
- Configuración del Arduino IDE: Aprenderás a configurar el entorno de desarrollo en Arduino IDE para trabajar con la ESP32-CAM y seleccionar la tarjeta adecuada.
- Programación: Te proporcionaremos el código necesario para configurar la ESP32-CAM y programarla para capturar imágenes cuando se detecte movimiento. Además, mostraremos cómo almacenar las imágenes en una tarjeta SD.
- Prueba en la Vida Real: Verás en acción nuestro sistema de detección de movimiento. Lo probaremos en un entorno real para que puedas ver cómo funciona.
- Consejos y Personalización: Compartiremos algunos consejos útiles y te mostraremos cómo personalizar y ampliar este proyecto según tus necesidades.
Este proyecto es perfecto para crear una cámara de seguridad asequible y funcional para tu hogar, oficina o cualquier lugar que desees monitorear.
Componentes electrónicos
Adaptador usb serial
Descripción
FTDI Basic Program Downloader USB to TTL FT232RL 3.3V 5V DTR
Esta es una placa de conexión básica para el FTDI FT232RL USB a serie IC. El pinout de esta placa coincide con el cable FTDI para funcionar con placas Arduino oficiales y placas Arduino de 5V clonadas. También se puede utilizar para aplicaciones seriales generales. La principal diferencia con esta placa es que resalta el pin DTR en lugar del pin RTS del cable FTDI. El pin DTR permite que un objetivo Arduino se reinicie automáticamente cuando se descarga un nuevo Sketch. Esta es una característica realmente agradable y permite descargar un boceto sin tener que presionar el botón de reinicio. Esta placa reiniciará automáticamente cualquier placa Arduino que tenga el pin de reinicio en un conector de 6 pines.
Esta placa tiene LED TX y RX que hacen que sea un poco mejor usarla sobre el cable FTDI. De hecho, puede ver el tráfico en serie en los LED para verificar si la placa está funcionando.
Esta placa fue diseñada para disminuir el costo del desarrollo de Arduino y aumentar la facilidad de uso (¡la función de reinicio automático es genial!). Nuestras placas Arduino Pro y LilyPads utilizan este tipo de conector.
Una de las características agradables de esta placa es un puente en la parte posterior de la placa que permite que la placa se configure a 3.3 V o 5 V (tanto la salida de potencia como el nivel de E / S). Esta placa se envía de forma predeterminada a 5 V, pero puede cortar la traza predeterminada y agregar un puente de soldadura si necesita cambiar a 3,3 V.
CARACTERÍSTICAS
- Diseño de interfaz estándar, compatible con una variedad de Arduinos como el Pro Mini
- Chip FTDI FT232 original, rendimiento estable
- Con indicador de encendido, envío, recepción, indicadores LED de estado de funcionamiento
- Con opciones de suministro de nivel TTL de 3,3 V y 5 V
- Módulo TTL de USB a serie, descargue STC SCM
- Conexión de puerto mini USB
- Standard interface, compliant with Arduino official controller; With power, sending, reveiving indicator, With 3.3V / 5V power supply; Can be used as ordinary USB to serial TTL module, download STC singlechip
Hardware introduction
- Adopt FTDI company’s FT232RL chip
- Lead out FT232RL chip all signal port, TTL / CMOS level
- RXD/TXD send-receive communication indicator
- USB power supply, can choose 5V or 3.3V interface level (if you need other level, can provide target voltage in VCC and GND pin)
Cables Dupont
Esp32Cam
Descripción
Esp32 Cam Camara Modulo Wifi Bt Arduino Ov2640 2mp Esp 32
ESP32 CAM Modulo WiFi con Bluetooth y Camara OV2640 2MP, es una tarjeta de desarrollo que integra una pequeña cámara que puede funcionar de manera independiente.
La camara OV2640 de 2MP integra un sensor de imagen CMOS UXGA (1632*1232) de 1/4 de pulgada. El pequeño tamaño del sensor y el bajo voltaje de operación brindan todas las características de una sola cámara UXGA y un procesador de imágenes. A través del control de bus SCCB, puede generar datos de imagen de 8/10 bits de varias resoluciones, como fotograma completo, submuestreo, zoom y ventanas.
La imagen UXGA de esta camara puede alcanzar hasta 15 cuadros por segundo (hasta 30 cuadros para SVGA y 60 cuadros para CIF). Los usuarios tienen un control completo sobre la calidad de la imagen, el formato de datos y la transmisión.
Todas las funciones de procesamiento de imágenes, incluida la curva gamma, el balance de blancos, el contraste, el croma, etc. se pueden programar a través de la interfaz SCCB.
Los sensores de imagen Omni Vision utilizan una tecnología de sensor única para mejorar la calidad de la imagen y reducir las imágenes en color nítidas y estables mediante la reducción o eliminación de defectos ópticos o electrónicos, como el ruido de patrón fijo, manchas y flotación.
Principales Características:
• Modelo: ESP32-CAM + Cámara OV2640
• Voltaje de Alimentación ESP 32 CAM: 5V
• Módulo Wi-Fi BT 802.11b/g/n
• Tipo de cámara: OV2640 2MP
• El modulo ESP 32CAM tiene CPU 32 bits de doble núcleo de baja potencia
• Frecuencia principal de hasta 240 MHz
• Potencia informática de hasta 600 DMIPS
• Velocidad de reloj de hasta 160 MHz
• Incorpora SRAM 520Kb, 4MPSRAM externa
• El modulo ESP-32 CAM Soporta interfaces: UART / SPI / I2C / PWM / ADC / DAC
• El modulo ESP-32-CAM Soporta cámaras OV2640 y OV7670, Flash Incorporado
• El modulo ESP 32-CAM Soporta tarjetas TF micro SD (Máximo 4 GB)
• El modulo ESP-32CAM Soporta la carga de imagen WiFi
• Compatible con modos de operación STA / AP / STA+AP
• Con antena PCB
• El modulo ESP32CAM integra conectores u.FL y FPC
Features:
– Ultra-small 802.11b/g/n Wi-Fi + BT/BLE SoC module
– Low-power dual-core 32-bit CPU for application processors
– Up to 240MHz, up to 600 DMIPS
– Built-in 520 KB SRAM, external 4M PSRAM
– Supports interfaces such as UART/SPI/I2C/PWM/ADC/DAC
– Support OV2640 and OV7670 cameras with built-in flash
– Support for images WiFI upload
-Support TF card
– Support multiple sleep modes
– Embedded Lwip and FreeRTOS
– Support STA/AP/STA+AP working mode
– Support Smart Config/AirKiss One-click distribution network
– Support for serial local upgrade and remote firmware upgrade (FOTA)
– Support secondary development
Product Specifications:
Module model: ESP32-CAM
Package: DIP-16
Size: 27*40.5*4.5(±0.2)mm
SPI Flash: default 32Mbit
RAM: internal520KB+external 4M PSRAM
bluetooth: bluetooth4.2BR/EDR and BLE standards
Wi-Fi: 802.11 b/g/n/e/i
Support interface: UART, SPI, I2C, PWM
Support TF card: Maximum support 4G
IO port: 9
Serial port rate: default 115200 bps
Image output format: JPEG (only supported by OV2640), BMP, GRAYSCALE
Spectrum range: 2412 ~ 2484MHz
Antenna form: onboard PCB antenna , gain 2dBi
Transmit power: 802.11b: 17±2 dBm (@11Mbps)
802.11g: 14±2 dBm (@54Mbps)
802.11n: 13±2 dBm (@MCS7)
Receiving sensitivity: CCK, 1 Mbps : -90dBm
CCK, 11 Mbps: -85dBm
6 Mbps (1/2 BPSK): -88dBm
54 Mbps (3/4 64-QAM): -70dBm
MCS7 (65 Mbps, 72.2 Mbps): -67dBm
Power consumption Turn off the flash: 180mA@5V
Turn on the flash and adjust the brightness to the maximum: 310mA@5V
Deep-sleep: The lowest power consumption can reach 6mA@5V
Moderm-sleep: up to 20mA@5V
Light-sleep: up to 6.7mA@5V
Security WPA/WPA2/WPA2-Enterprise/WPS
Power supply range: 5V
Operating temperature: -20 °C ~ 85 °C
Storage environment: -40 °C ~ 90 °C, < 90%RH
Un Jumper
Pines Hembra
Pines macho
AM312 Mini Sensor de Movimiento PIR 12V DC
- Tipo: Mini Sensor PIR
- Modelo: AM312
- Voltaje de entrada: 2.7V a 12V DC
- Consumo de energía estática: < 0.1mA
- Voltaje de salida VOUT: 3.3V (Activado) / 0V (No activado)
- Rango de detección: ≤ Ángulo cónico de 100 grados
- Distancia de detección: 3 a 5 Metros Apróx.
- Tiempo de Retardo / Bloqueo: 2 segundos
- Modo de disparo: Repetible
- Dimensiones: 10.5mm x 8.2mm
- Tamaño de lente: 11.8 mm (Diámetro)
- Peso: 2g
Pines:
- VCC: Terminal (+) de fuente de alimentación
- GND: Terminal (-) de fuente de alimentación
- VOUT: Salida Digital
Un resistor de 10 K
PCB
Circuito
Código Fuente
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 |
// Librerías para la cámara #include "esp_camera.h" #include "soc/soc.h" #include "soc/rtc_cntl_reg.h" #include "driver/rtc_io.h" // Librerías para la trajeta MicroSD #include "FS.h" #include "SD_MMC.h" // Librerías para me memoria EEPROM #include "EEPROM.h" // Utilice 1 byte de espacio EEPROM #define EEPROM_SIZE 1 // Contador de número de imagen unsigned int contadorFoto = 0; // definiciones de pines para CAMERA MODELO AI THINKER #define PWDN_GPIO_NUM 32 #define RESET_GPIO_NUM -1 #define XCLK_GPIO_NUM 0 #define SIOD_GPIO_NUM 26 #define SIOC_GPIO_NUM 27 #define Y9_GPIO_NUM 35 #define Y8_GPIO_NUM 34 #define Y7_GPIO_NUM 39 #define Y6_GPIO_NUM 36 #define Y5_GPIO_NUM 21 #define Y4_GPIO_NUM 19 #define Y3_GPIO_NUM 18 #define Y2_GPIO_NUM 5 #define VSYNC_GPIO_NUM 25 #define HREF_GPIO_NUM 23 #define PCLK_GPIO_NUM 22 int pin = 4; void configuracionCamara() { //Configurar los parámetros de la cámara // Objeto para almacenar los parámetros de configuración de la cámara. camera_config_t config; config.ledc_channel = LEDC_CHANNEL_0; config.ledc_timer = LEDC_TIMER_0; config.pin_d0 = Y2_GPIO_NUM; config.pin_d1 = Y3_GPIO_NUM; config.pin_d2 = Y4_GPIO_NUM; config.pin_d3 = Y5_GPIO_NUM; config.pin_d4 = Y6_GPIO_NUM; config.pin_d5 = Y7_GPIO_NUM; config.pin_d6 = Y8_GPIO_NUM; config.pin_d7 = Y9_GPIO_NUM; config.pin_xclk = XCLK_GPIO_NUM; config.pin_pclk = PCLK_GPIO_NUM; config.pin_vsync = VSYNC_GPIO_NUM; config.pin_href = HREF_GPIO_NUM; config.pin_sscb_sda = SIOD_GPIO_NUM; config.pin_sscb_scl = SIOC_GPIO_NUM; config.pin_pwdn = PWDN_GPIO_NUM; config.pin_reset = RESET_GPIO_NUM; config.xclk_freq_hz = 20000000; config.pixel_format = PIXFORMAT_JPEG; // Las opciones son YUV422, ESCALA DE GRISES, RGB565, JPEG // Seleccione un tamaño de fotograma más bajo si la cámara no es compatible con PSRAM if (psramFound()) { config.frame_size = FRAMESIZE_UXGA; // TAMAÑO DEL MARCO_ + QVGA|CIF|VGA|SVGA|XGA|SXGA|UXGA config.jpeg_quality = 10; //10-63 un número más bajo significa mayor calidad config.fb_count = 2; } else { config.frame_size = FRAMESIZE_SVGA; config.jpeg_quality = 12; config.fb_count = 1; } // Inicializar la cámara esp_err_t err = esp_camera_init(&config); if (err != ESP_OK) { Serial.printf("El inicio de la cámara falló con el error 0x%x", err); return; } // Ajustes de calidad de la cámara. sensor_t * seteoCamara = esp_camera_sensor_get(); // BRILLO (-2 to 2) seteoCamara->set_brightness(seteoCamara, 0); // CONTRASTE (-2 to 2) seteoCamara->set_contrast(seteoCamara, 0); // SATURACIÓN (-2 to 2) seteoCamara->set_saturation(seteoCamara, 0); // EFECTOS ESPECIALES (0 - Sin efecto, 1 - Negativo, 2 - Escala de grises, 3 - Tinte rojo, 4 - Tinte verde, 5 - Tinte azul, 6 - Sepia) seteoCamara->set_special_effect(seteoCamara, 0); //BALANCE DE BLANCOS (0 = Desactivar, 1 = Activar) seteoCamara->set_whitebal(seteoCamara, 1); // GANANCIA AWB (0 = Desactivar, 1 = Activar) seteoCamara->set_awb_gain(seteoCamara, 1); // MODOS WB (0 - Automático, 1 - Soleado, 2 - Nublado, 3 - Oficina, 4 - Hogar) seteoCamara->set_wb_mode(seteoCamara, 0); // CONTROLES DE EXPOSICIÓN (0 = Desactivar, 1 = Activar) seteoCamara->set_exposure_ctrl(seteoCamara, 1); // AEC2 (0 = Desactivar, 1 = Activar) seteoCamara->set_aec2(seteoCamara, 0); // NIVELES DE AE (-2 a 2) seteoCamara->set_ae_level(seteoCamara, 0); // VALORES AEC (0 a 1200) seteoCamara->set_aec_value(seteoCamara, 300); // CONTROLES DE GANANCIA (0 = Desactivar, 1 = Activar) seteoCamara->set_gain_ctrl(seteoCamara, 1); // GANANCIA AGC (0 a 30) seteoCamara->set_agc_gain(seteoCamara, 0); // GANANCIA TECHO (0 a 6) seteoCamara->set_gainceiling(seteoCamara, (gainceiling_t)0); // BPC (0 = Desactivar, 1 = Activar) seteoCamara->set_bpc(seteoCamara, 0); // WPC (0 = Desactivar, 1 = Activar) seteoCamara->set_wpc(seteoCamara, 1); // GMA RAW (0 = Desactivar, 1 = Activar) seteoCamara->set_raw_gma(seteoCamara, 1); // LENC (0 = Desactivar, 1 = Activar) seteoCamara->set_lenc(seteoCamara, 1); // ESPEJO ORIZ (0 = Desactivar, 1 = Activar) seteoCamara->set_hmirror(seteoCamara, 0); // VERT FLIP (0 = Desactivar, 1 = Activar) seteoCamara->set_vflip(seteoCamara, 0); // DCW (0 = Desactivar, 1 = Activar) seteoCamara->set_dcw(seteoCamara, 1); // PATRÓN DE BARRA DE COLOR (0 = Desactivar, 1 = Activar) seteoCamara->set_colorbar(seteoCamara, 0); } void initMicroSDCard() { // Inicia la tarjeta MicroSD Serial.println("Montaje de la tarjeta MicroSD"); if (!SD_MMC.begin()) { Serial.println("Error al montar la tarjeta MicroSD"); return; } uint8_t cardType = SD_MMC.cardType(); if (cardType == CARD_NONE) { Serial.println("No se encontró ninguna tarjeta MicroSD"); return; } } void takeNewPhoto(String path) { // Tomar una foto con la cámara Configurar frame buffer camera_fb_t * fb = esp_camera_fb_get(); if (!fb) { Serial.println("Falló la captura de la cámara"); return; } // Guardar imagen en la tarjeta microSD fs::FS &fs = SD_MMC; File file = fs.open(path.c_str(), FILE_WRITE); if (!file) { Serial.println("No se pudo abrir el archivo en modo de escritura"); } else { file.write(fb->buf, fb->len); // payload (image), payload length Serial.printf("Archivo guardado en la ruta: %s\n", path.c_str()); } // Cerrar el archivo file.close(); // Devolver el frame buffer al controlador para su reutilización esp_camera_fb_return(fb); } void setup() { pinMode(pin, OUTPUT); // declaramos el pin como salida ( OUTPUT ) digitalWrite (pin,LOW); // Desactivar el detector de caída de tensión WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); // Iniciar monitor serie Serial.begin(115200); // Inicializa la cámara Serial.print("Inicializando el módulo de la cámara..."); configuracionCamara(); Serial.println("Camera OK!"); // Inicializa la MicroSD Serial.print("Inicializando el módulo de la tarjeta MicroSD... "); initMicroSDCard(); // inicializar EEPROM con tamaño predefinido EEPROM.begin(EEPROM_SIZE); contadorFoto = EEPROM.read(0) + 1; // Ruta donde se guardará la nueva imagen en la tarjeta SD String path = "/foto" + String(contadorFoto) + ".jpg"; Serial.printf("Nombre del archivo de imagen: %s\n", path.c_str()); // Tomar y guardar foto takeNewPhoto(path); // Actualizar el contador de números de imagen EEPROM EEPROM.write(0, contadorFoto); EEPROM.commit(); digitalWrite (pin,LOW); // Vincular Wakeup a GPIO13 en estado HIGH esp_sleep_enable_ext0_wakeup(GPIO_NUM_13, 1); digitalWrite (pin,LOW); Serial.println("Entrar en modo de suspensión"); delay(1000); // Ingrese al modo de sueño profundo esp_deep_sleep_start(); } void loop() { } |
PROYECTO RECOMENDADO