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
Tags:
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.
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!
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.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por