Olá pessoal, estou aqui novamente para pedir um help.

Estou montando um circuito onde será alimentado por bateria.

Preciso que após 10 minutos sem uso ele desligue todo o circuito.

Penso em fazer algo como o esquema em anexo.

Tentei usar o bc548 mas quando ligo o pino 12 (exemplo) do arduino mesmo estando como low ele "aciona" o transistor.

Algum conhece alguma forma eficiente de utilizar o transistor como chave nesse caso?

 

Obrigado a todos.

Sérgio

Exibições: 4278

Responder esta

Respostas a este tópico

Olá Sérgio,

Existe um método que é muito eficaz para a redução de consumo de energia de baterias que é chamado de SLEEP, é basicamente colocar o processador pra dormir, o clock para e o consumo cai pra casa dos microamperes.

O legal é que tem várias formas de reativar ou acordar o microcontrolador, seja alterando o estado de um pino de I/O ou pela USART, ou até mesmo usando um Timer para acordar de tempos em tempos e depois voltar a dormir.

Em PIC é bastante eficaz, no arduino ainda não tentei usar, mas tem um tutorial em: http://donalmorrissey.blogspot.com.br/2010/04/putting-arduino-dieci... que pode ajudar.

A vantagem do sleep sobre a sua idéia é que podemos programar o arduino para ser religado automaticamente através de um timer interno, o acionamento de uma entrada ou recebendo um comando pela serial, não sendo necessário apertar a tecla de alimentação do circuito.

Abraço

Pois é, já li sobre isso. A questão é que também alimento dois displays de led (grandes), onde preciso desliga-los também. E o dispositivo só vai ser ligado manualmente mesmo.

Por isso cheguei a solução do transistor, só não achei ainda a melhor forma.

Abraços e obrigado.

Sérgio

Beleza Sérgio, mas não é o arduino que controla os displays? Então é só desligar os displays antes de entar em sleep, ok?

Abraço

pode ser um timer com 555 em que vc fque recarregando o tempo dele por software a cada função atraves do pin digital do arduino, se ele ficar sem carregar o tempo por 10min, o mesmo desliga o circuito do arduino e os displays

Legal, gostei, mas para isso vou precisar usar um transistor como chave, para cortar a alimentação do circuito. (não quero usar rele).

E a questão é essa, não estou acertando os valores dessa "chave".

tenho o circuito alimentado por 9v que entra no coletor. qual o valor do resistor para a base?

estou brigando com isso...rsrs

obrigado a todos.

Sérgio,

Veja se este circuito resolve o seu problema, testei por aqui e funcionou bem.

Fiz um sketch para testar o funcionamento do circuito:

No pino 7 temos um led que pisca em intervalos de 1 segundo.

No pino 6 temos um botao que quando acionado leva o pino ao GND.

No pino 5 temos um led que acende por 2 segundos após o botão ser acionado.

O pino 4 é quem mantém a alimentação do circuito ligada.

Mas o importante é que se o botão não for precionado por mais de 20 segundos o pino 4 vai para 0V e o circuito desliga.

Para religar é preciso acionar o botão start.

const int ledPin =  7;      // número do pino do LED
const int keyPin =  6;      // número do pino da KEY
const int relayPin =  5;    // número do pino do RELAY
const int powerPin =  4;    // número do pino do POWER

int ledState = LOW;             // usado para armazenar o estado do LED
int keyState = LOW;             // usado para armazenar o estado da KEY
int relayState = LOW;           // usado para armazenar o estado do RELAY
int powerState = HIGH;          // usado para armazenar o estado do POWER

long LEDpreviousMillis = 0;     // armazena o tempo da ultima vez que o LED foi alterado
long RELAYpreviousMillis = 0;   // armazena o tempo em que o RELAY foi acionado

long LEDinterval = 500;         // tempo da piscada do LED(em milisegundos)
long RELAYinterval = 2000;      // tempo de acionamento do RELAY(em milisegundos)
long CIRCUITOinativo = 20000;   // tempo de para desligar o arduino(em milisegundos)

void setup() {
  pinMode(ledPin, OUTPUT);   
  pinMode(keyPin, INPUT);
  pinMode(relayPin, OUTPUT);
  pinMode(powerPin, OUTPUT);  
  digitalWrite(powerPin, powerState); // mantem pino power ligado
}

void loop()
{
  unsigned long currentMillis = millis();  // tempo atual
 
  if ((currentMillis - LEDpreviousMillis)> LEDinterval) {  // Já deu o tempo para alterar o LED
    LEDpreviousMillis = currentMillis;  // atualiza o tempo do LED
    if (ledState == LOW)  // inverte o estado do LED
        ledState = HIGH;
    else
        ledState = LOW;
    digitalWrite(ledPin, ledState); // atualiza estado do LED
  }
 
  keyState = digitalRead(keyPin);  // le estado da KEY
  if (keyState == LOW && relayState == LOW ) {  // A KEY foi acionada e o RELAY esta desligado   
    RELAYpreviousMillis = currentMillis;  // atualiza o tempo do RELAY
    relayState = HIGH;  // seta o estado do RELAY
    digitalWrite(relayPin, relayState);  // aciona o RELAY
  }
 
  if (((currentMillis - RELAYpreviousMillis) > RELAYinterval) && relayState == HIGH ) {  // Já deu o tempo pra alterar o RELAY
    RELAYpreviousMillis = currentMillis;  // atualiza o tempo do RELAY
    relayState = LOW;  // reseta o estado do RELAY
    digitalWrite(relayPin, relayState); // atualiza estado do RELAY
  }
 
  if ((currentMillis - RELAYpreviousMillis) > CIRCUITOinativo ) {  // O circuito está inativo e deve ser desligado
    RELAYpreviousMillis = currentMillis;  // atualiza o tempo do RELAY
    powerState = LOW;  // reseta o estado do RELAY
    digitalWrite(powerPin, powerState); // mantem pino power ligado
  }
}  // fim do loop
 

Abraço.

Anexos

Olás.

Talvez seja possível usar o 548 no lugar do 337, aí vc. economiza ter de comprar um transistor (R$ 0,30!!!!).

Quando ví o 1o. circuito, já desconfiei que não poderia funcionar (direito), uma vez que a alimentação para o Arduino estaria sendo feita pelo coletor do 548 e em vez de estar ligada ao GND estava ligada ao Vcc. Aí não vai né....polaridade é tudo em semicondutores.

Este circuito do Wiechert funciona legal.

Boas sortes!

Olá Euclides,
Realmente podemos substituir o BC337 pelo BC548 ou por qualquer outro NPN de uso geral.
Abraço.

Opa, já ia comprar o BC337 hoje, pensei em substituir, mas se desse algum pipino eu ia pensar que era a peça..rsrs

Marcos, muito obrigado, vou testar hoje.

Qual software vc usou para fazer o esquema? Ele testa o circuito também?

Abraços,

Sérgio

Olá Sergio,

O esquema foi feito no Proteus, e sim ele simula o funcionamento e faz o layout da pci e visualização em 3D.

No caso eu primeiro simulei o funcionamento e depois fiz o teste montando o circuito de verdade, e funcionou muito bem.

Abraço.

Marcos. Me responda: O Proteus faz PCIs igual (ou melhor) que o Eagle? Depois de desenhado um circuito ele faz o autoroute das trilhas? Já tem uma biblioteca de Arduino que permita simular tudo que sejam portas de entradas e saídas? Obrigado.

Euclides,

Escolher o Eagle ou o Proteus para rotear PCI é questão de gosto pessoal eu uso os dois dependendo da minha necessidade, os dois tem autoroute, bibliotecas extensas e a opção de fazer componentes você mesmo.

Tem muito material do arduino feito em Eagle para baixar da net.

O bom do Proteus na minha opinião é a parte da simulação em especial com microcontroladores. Mas se anime demais, tem hora que não adianta, tem mesmo que montar o circuito real na protoboard.

Pro arduino tem este post do Cesar Osaka muito legal aqui no LDG: http://labdegaragem.com/profiles/blog/show?id=6223006%3ABlogPost%3A...

Abraço.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço