Como rediseñar esquema con transistor 2N2222 en vez de 2N3904

Saludos.

Intento "despertar" un ESP32 atravez del GPIO 13, siguiendo el este esquema, pero no he encontrado el Transistor 2N3904 en mi localidad no lo venden, y encargarlo por tienda en linea me resulta algo caro.

Leyendo algo (no tengo tantos conocimientos sobre electrónica), leí que podría cambiar el 2N3904 por el 2N222. Así que use el 2N222, y monte el "circuito", pero no logro que "despierte" el ESP32, solamente funciona la primera vez que lo enciendo, ya después no.

Creo que debe de haber algún cambio para que funcione, ya que si conecto dicho "circuito" con un módulo rele, este se activa.

El ejemplo que quiere replicar esta aquí:

Hi,
Creo que para que te trabaje tienes que configurar el pin de entrada del micro como INPUT_PULLUP. Otra cosa que puedes hacer es de usar un divisor de voltaje usando dos resistencia. Una de 1K conectada al salida del sensor en serie con otra de 2K a ground. El punto medio de las resistancia lo conecta al pin del micro. Cuando el sensor se activa te va dar una senal de 5 voltios y el divisor te da 3.3 voltios. El transistor se usa para bajar el voltaje del sensor de 5 voltios a 3 voltios. Primero trata de configurar el pin con el pullup. Ahora yo no se si cuando el micro se va sleep lmode as salidas no tienen voltajes.

Cuando el sensor se activa te va dar una senal de 5 voltios y el divisor te da 3.3 voltios. El transistor se usa para bajar el voltaje del sensor de 5 voltios a 3 voltios.

Solo comparto que el sensor te dará una señal de 5V. No hace falta divisor si usas un 2n2222 o el 2n3904.
Se esta polarizando con la R de base de 1k tal que Ib = (5V - Vbe)/1k = 4.3/1k = 4.3mA lo cual es una corriente de base mas que sufiente para lograr una buena saturación del transistor.
El transitor satura y su Vce cae a 0.2V o LOW. y listo.
No hace falta divisor resistivo de ningún tipo.

Usa el 2N2222 sin problemas.

Además el 2N2222 estará conectado al GPIO del ESP32 y como mucho recibirá 3.3V, listo, asunto resuelto.

Lo unico que no entiendo es porque pones el colector directo al GPIO y la resistencia entre el Gpio y el colector. Esa conexión no la veo en el link que pusiste.

Hi,
Surbyte ese circuito que el tiene esta correcto. No le trabaja porque el pin no tiene voltaje. El circuito como el lo tiene se llama "open collector". Aqui lo que sucede es que el pin no tiene voltaje a menos que no declare el pin con el pullup activo. O que conecte la resistencia a los 3.3 voltios del micro. Entonces le va a trabajar. El circuito del link que el tiene la resistencia debe conectarse como ya lo mencione a los 3.3 voltios del micro y no al pin de entrada. La salida del colector del transistor debe de ir al pin de entrada del micro. Adjunto el esquematico modificado de como hacerlo correctamente.

Que interesantes cosas que hacen en este esquema el PIR no consume mucha corriente?
-Alex.

A ver tauro, se lo que es un open collector. En el esquema veo una cosa, en el link veo otra.
Mira que dice el link

Tu has editado el esquema bajo otra idea mas.

Entonces cual corresponde? Dejen que hable el interesado porque nosotros hablamos y nos contestamos.

Saludos.

Efectivamente, el diagrama que inserte en un principio, era el que estaba, cuando consulte la pagina; la he vuelto a "consultar" y si, tiene otro diagrama. :o

Bueno me puse a revisar los proyectos de esa pagina, y vi que el diseño es de un tal David Graff, que en principio propone el diseño que adjunte.

bit.ly/2IZ7Kjz
here is a schematic of what I did. I am new to schematics so I hope everything is right. Anyway, the board pin is pulled low instead of floating by this circuit. Although I’ve been told this is not a good pin to use because it is HIGH on boot. However it seems to work OK for me.

then of course I use this code before deep sleep:
esp_sleep_enable_ext0_wakeup(GPIO_NUM_13,1);

cheers,
David

Este es el código:

/*********
  Rui Santos
  Complete project details at https://RandomNerdTutorials.com/esp32-cam-pir-motion-detector-photo-capture/
 
  IMPORTANT!!!
   - Select Board "AI Thinker ESP32-CAM"
   - GPIO 0 must be connected to GND to upload a sketch
   - After connecting GPIO 0 to GND, press the ESP32-CAM on-board RESET button to put your board in flashing mode
 
  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files.
  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
*********/
 
#include "esp_camera.h"
#include "esp_timer.h"
#include "img_converters.h"
#include "Arduino.h"
#include "fb_gfx.h"
#include "fd_forward.h"
#include "fr_forward.h"
#include "FS.h"                // SD Card ESP32
#include "SD_MMC.h"            // SD Card ESP32
#include "soc/soc.h"           // Disable brownour problems
#include "soc/rtc_cntl_reg.h"  // Disable brownour problems
#include "dl_lib.h"
#include "driver/rtc_io.h"
#include <EEPROM.h>            // read and write from flash memory
// define the number of bytes you want to access
#define EEPROM_SIZE 1
 
RTC_DATA_ATTR int bootCount = 0;

// Pin definition for CAMERA_MODEL_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 pictureNumber = 0;

#define uS_TO_S_FACTOR 1000000
  
void setup() {
  WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); //disable brownout detector
  Serial.begin(115200);
 
  Serial.setDebugOutput(true);
 
  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;
  
  pinMode(4, INPUT);
  digitalWrite(4, LOW);
  rtc_gpio_hold_dis(GPIO_NUM_4);
 
  if(psramFound()){
    config.frame_size = FRAMESIZE_UXGA; // FRAMESIZE_ + QVGA|CIF|VGA|SVGA|XGA|SXGA|UXGA
    config.jpeg_quality = 10;
    config.fb_count = 2;
  } else {
    config.frame_size = FRAMESIZE_SVGA;
    config.jpeg_quality = 12;
    config.fb_count = 1;
  }
 
  // Init Camera
  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK) {
    Serial.printf("Camera init failed with error 0x%x", err);
    return;
  }
 
  Serial.println("Starting SD Card");
 
  delay(500);
  if(!SD_MMC.begin()){
    Serial.println("SD Card Mount Failed");
    //return;
  }
 
  uint8_t cardType = SD_MMC.cardType();
  if(cardType == CARD_NONE){
    Serial.println("No SD Card attached");
    return;
  }
   
  camera_fb_t * fb = NULL;
 
  // Take Picture with Camera
  fb = esp_camera_fb_get();  
  if(!fb) {
    Serial.println("Camera capture failed");
    return;
  }
  // initialize EEPROM with predefined size
  EEPROM.begin(EEPROM_SIZE);
  pictureNumber = EEPROM.read(0) + 1;
 
  // Path where new picture will be saved in SD Card
  String path = "/picture" + String(pictureNumber) +".jpg";
 
  fs::FS &fs = SD_MMC;
  Serial.printf("Picture file name: %s\n", path.c_str());
 
  File file = fs.open(path.c_str(), FILE_WRITE);
  if(!file){
    Serial.println("Failed to open file in writing mode");
  }
  else {
    file.write(fb->buf, fb->len); // payload (image), payload length
    Serial.printf("Saved file to path: %s\n", path.c_str());
    EEPROM.write(0, pictureNumber);
    EEPROM.commit();
  }
  file.close();
  esp_camera_fb_return(fb);
  
  delay(1000);
  
  // Turns off the ESP32-CAM white on-board LED (flash) connected to GPIO 4
  pinMode(4, OUTPUT);
  digitalWrite(4, LOW);
  rtc_gpio_hold_en(GPIO_NUM_4);

  esp_sleep_enable_ext0_wakeup(GPIO_NUM_13, 0);
 
  Serial.println("Going to sleep now");
  delay(1000);
  esp_deep_sleep_start();
  Serial.println("This will never be printed");
} 
 
void loop() {
 
}

Acabo de corregir el "circuito" a como indica en la pagina, pero funciona ocasionalmente, tomo 3 fotos y fue todo.

Si al "circuito" le desconecto el negativo y se lo vuelvo a conectar, funciona una vez.

Hi,
El esquematico del link tiene un error. Conectalo como te lo explico en el esquematico del hilo 3.

tauro0221:
Hi,
El esquematico del link tiene un error. Conectalo como te lo explico en el esquematico del hilo 3.

Ok, no vi tu respuesta. Lo voy a conectar como me indicas, gracias.

tauro0221:
Hi,
El esquematico del link tiene un error. Conectalo como te lo explico en el esquematico del hilo 3.

No, sigue igual. Funciona ocasionalmente.

Hi,
Entonces bajale resistencia de 1K a una de como300 ohmios.

Hi,
Pregunta tu estas usando el PIR para despertar el micro o solamente usas el procedimiento de programacion que el usa pero no usa un PIR. Si yo lo entierndo quires duplicar el systema del link. Otra cosa tu usas el mismo sensor que el esta usando.

bajale la R de 1K a una de como300 ohmios.

Para qué tauro si con 1k esa suficientemente polarizado como para que sature.
Que ganas con bajarla a 330?

A mi me parece que el problema es el ajuste del PIR.
Ponlo al mín de tiempo de modo que cada movimiento produzca un disparo.
Verificalo, no necesitas el ESP32 para verificarlo. Conecta la R de 10k a 3.3V como dijo tauro o como te mostró y mide si con cada cambio el Transitor dispara, o mejor dicho se pone a LOW pq veamos.
Cuando hay movimiento el PIR pone una salida en HIGH, ese high hace circular corriente en la base del 2N2222 suficiente para que sature, o sea un LOW en el GPIO del ESP32.
Supongo es eso lo que buscas.

Hi,
El sensor tiene una resistencia de 1K en la salida del pin y solamente puede suplir 10ma. recuerda que esta alimentando la base de un transistor. Por eso pregunte que tipo de sensor usa. Adjunto el documento del esquematico del sensor en pdf y usa el circuito integrado biss0001. Si buscas las especificaiones biss0001 dice que la salida es de 10ma. Si le anades otra de 1K entonces tienes una resistencia 2K a la base del transistor. 5/2000 = .0025 Otra cosa es que la salida del sensor es de 3.3 voltios. No necesita el transistor lo puede conectar directamente al input del micro.

Specification del sensor
◦ Voltage: 5V – 20V ◦ Power Consumption: 65mA ◦ TTL output: 3.3V, 0V

31227sc hc-sr501 (2).pdf (854 KB)

Saludos.

Cambie todo los componentes del circuito por otros "nuevos", y cambie la resistencia por la 330 ohms (no tengo de 300 como me idicaba tauro), funcionaba esporadicamente.

Comenzo a funcionar bien hasta que cambie uno de los cables que van GND, parece que no tenia un buen contacto, y ya funciona!!!.

Muchas gracias a todos, por su ayuda.

Voy a tratar de explicar con pruebas que 1k estaba bien, aunque solo es un tema que se verifica ya que debería funcionar cambiando la R de 330 por la de 1k

Aca se ve el valor de hfe para el 2N2222 para diferentes Ic, por supuesto que hay situaciones de saturación y otras tipicas de pequeña señal.

Se ve tmb el valor de hfe minimo para las situaciones planteadas.
Nuestra situación es la de Vce < 1V. Normalmente será de 0.2V y para esta situación tendremos 4.8V sobre la bobina del relé.
para Ic=150mA, Ib=15mA. eso da un hfe = 10
Y como ya estamos saturados.. cualquier corriente de colector mayor implicará una Ib tmb mas grande relacionado siempre por el hfe = 10 que podemos asumir que será la relación existente cuando estamos con el transitor saturado.

Los relés suelen consumir entre 50 y 60 mA asi que para una Ic con esos valores tenemos un Ib entre 5 y 6 mA

Supongamos entonces esta situación con Ib = 5mA

Si circulamos desde el PIR hasta la base del 2n2222 Tenemos.

5 - IbxR - 0.7 = 0

R = (5.0-0.7)/Ib = 4.3 V / 5mA = 4.3/0.005A = 860 ohms

este valor esta mas cerca de 1k que de 330 y por supuesto si la corriente de Rele es menor aún, menor será la Ib y mayor la Rb.
Y a la inversa, si el Relé toma mas corriente que los 50 supuestos, la Rb será menor.
pense que los valores serían mas contundentes pero veo que estamos en una zona gris y casi tendería a suponer que tauro lleva mas razón.

¿Por qué ha de usarse un transistor? ¿Por qué no puede conectarse la salida del PIR directamente al pin del ESP32?

Porque el PIR suele tener salidas de 5V y el ESP32 admite 3.3. Asi que como minimo debes poner un divisor resistivo, un zener o un adaptador de nivel.

Moderador:
Hilo que no tiene movimientos por mas de 4 meses hilo que se deja como está y se crea una nueva consulta si quieres relacionada con esta pero no como has hecho.

Hilo cerrado.