Go Down

Topic: Como rediseñar esquema con transistor 2N2222 en vez de 2N3904 (Read 531 times) previous topic - next topic

abasoleno

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í:

https://randomnerdtutorials.com/esp32-cam-pir-motion-detector-photo-capture/

tauro0221

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.

surbyte

Quote
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.

tauro0221

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.


AlexLPD

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

surbyte

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.


abasoleno

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.

Quote
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:

Code: [Select]

/*********
  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() {
 
}

abasoleno

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.


tauro0221

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

abasoleno

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.

abasoleno

Hi,
El esquematico del link tiene un error. Conectalo como te lo explico en el esquematico del hilo 3.
No, sigue igual. Funciona ocasionalmente.

tauro0221

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

tauro0221

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.

surbyte

Quote
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.

tauro0221

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

Go Up