Arquivo do blog

Publicidade:

terça-feira, 30 de dezembro de 2014

Arduino - Dicas de Programação 06 - tempo de processamento

Exemplo de como contar o tempo de processamento de um determinado procedimento.



código:



void setup() {
  Serial.begin(9600);
  pinMode(3, OUTPUT);
}

void conta_tempo(void(*p)(), String descricao){
  long m1, m2;

  m1 = millis();
  
  (*p)(); //executa a função
  
  m2 = millis();
 
  Serial.print(descricao + ": m1= ");
  Serial.print(m1);
  Serial.print(" - m2 = ");
  Serial.print(m2);
  Serial.print(" - dif = ");
  Serial.print(m2 - m1);
  Serial.println(" milissegundos");
}

void proc_01(){ for (long i=0; i< 10000; i++) { digitalWrite(3, !digitalRead(3)); } } 
void proc_02(){ for (long i=0; i< 30000; i++) { digitalWrite(3, !digitalRead(3)); } } 
void proc_03(){ for (long i=0; i< 100000; i++){ digitalWrite(3, !digitalRead(3)); } } 

void loop() {
  
  conta_tempo(proc_01, "proc 01");
  conta_tempo(proc_02, "proc 02");
  conta_tempo(proc_03, "proc 03");
  
  //proc_01();
  //proc_02();
  //proc_03();
}



sexta-feira, 26 de dezembro de 2014

Arduino - Lâmpadas - Parte 02

Continuando então com o tutorial de como ligar uma lâmpada, estou postando mais dois vídeos sobre o assunto e mais abaixo o código fonte do exemplo.




Circuito montado e funcionando



código fonte:



#include <EEPROM.h>


//inicio da Classe Lampada

class Lampada {
  private:
    //atributos
    int _pin_rele;
    int _pin_sensor_tensao;
    int _pin_sensor_corrente;
    int _address_eeprom;
    String _descricao;
    
    //metodos privados
    int  _le_eeprom();
    void _grava_eeprom();
    int _tem_tensao();
    int _tem_corrente();
  public:
    Lampada(int pin_rele, 
            int pin_sensor_tensao, 
            int pin_sensor_corrente, 
            int address_eeprom);
    
    void   ligar();
    void   desligar();
    void   inverter();
    
    int    esta_ligada();
    int    esta_danificada();
    void   set_descricao(String descricao);
    String get_descricao();
    String to_string();
};

Lampada::Lampada(int pin_rele, int pin_sensor_tensao, 
                 int pin_sensor_corrente, int address_eeprom) {  
  _pin_rele            = pin_rele;
  _pin_sensor_tensao   = pin_sensor_tensao;
  _pin_sensor_corrente = pin_sensor_corrente;
  _address_eeprom      = address_eeprom;
  
  pinMode(_pin_rele, OUTPUT);
  
  //quando o pino for menor ou igual a zero, significa que não será usado sensor de tensão
  if (_pin_sensor_tensao > 0)   { pinMode(_pin_sensor_tensao,   INPUT); }  
  

  //quando o pino for menor ou igual a zero, significa que não há sensor de corrente

  if (_pin_sensor_corrente > 0) { pinMode(_pin_sensor_corrente, INPUT); }  
  
  digitalWrite(_pin_rele, _le_eeprom() );
}

int  Lampada::_le_eeprom()    { return EEPROM.read(_address_eeprom);                   }

void Lampada::_grava_eeprom() { EEPROM.write(_address_eeprom, digitalRead(_pin_rele)); }

void Lampada::inverter()      { 
  digitalWrite(_pin_rele, !digitalRead(_pin_rele)); _grava_eeprom(); 
}

int  Lampada::_tem_corrente() { 
  if ( _pin_sensor_corrente <= 0 ) { return HIGH; } //caso não tenha sensor de corrente
  return digitalRead(_pin_sensor_corrente); 
}

int  Lampada::_tem_tensao()   { 
  //caso não tenha sensor de tensão
  if ( _pin_sensor_tensao <= 0 ) { return HIGH; }                                 

  for (int i=0;i<4;i++) {
    if (!digitalRead(_pin_sensor_tensao)) { return HIGH; }
    delay(1);
  }
  return LOW;
}

void Lampada::ligar()       { if (!esta_ligada())  { inverter(); } }
void Lampada::desligar()    { if (esta_ligada())   { inverter(); } }
int  Lampada::esta_ligada() { return ( _tem_tensao() && _tem_corrente() );  } 
int    Lampada::esta_danificada() { return ( _tem_tensao() && !_tem_corrente() ); }
String Lampada::get_descricao()   { return _descricao;                            }
void   Lampada::set_descricao(String descricao) { _descricao = descricao;         }

String Lampada::to_string(){
  String str = _descricao;
  if (esta_danificada()) {str += " - danificada."; return str;}
  str += esta_ligada() ? " - ligada." : " - desligada.";
  return str;
}

//fim da classe Lampada

const int PINO_RELE            = 8;
const int PINO_SENSOR_TENSAO   = 7;
const int PINO_SENSOR_CORRENTE = 6;
const int ADDRESS_EEPROM       = 0;

Lampada *lampada_01;

void setup() {
  Serial.begin(9600);

  lampada_01 = new Lampada(PINO_RELE, 
                           PINO_SENSOR_TENSAO, 
                           PINO_SENSOR_CORRENTE, 
                           ADDRESS_EEPROM);

  lampada_01->set_descricao("lampada 01");
}

void loop()  {
  char tecla = Serial.read();
  
  if (tecla == '1') {
    lampada_01->ligar();
  } else if (tecla == '2') {
    lampada_01->desligar();
  } else if (tecla  == '3') {
    lampada_01->inverter();
  }
  
  Serial.println(lampada_01->to_string());
   
}

segunda-feira, 15 de dezembro de 2014

Arduino - Lâmpada, Rele shield e 4n25 - Parte 01

Nesse vídeo mostro alguns detalhes sobre como ligar uma lâmpada com Arduino. Em breve postarei a segunda parte, mostrando o circuito montado e o código implementado.


Sabão caseiro com garrafa pet - com soda em escamas

Alguns meses atrás fiz um vídeo mostrando como fazer sabão caseiro em uma garrafa pet, de maneira bem simples e fácil, utilizando soda líquida. 

O problema dessa receita, é que as vezes é difícil encontrar a soda líquida em alguns mercados. Então resolvi fazer a mesma receita utilizando soda em escamas. Para isso foi necessário dissolver a soda antes de utilizá-la. 

Nesse vídeo como fazer o procedimento de maneira a diminuir os riscos e que também seja fácil e rápido. Espero que gostem, abraços.

aproveitem para se inscrever no canal também!



quinta-feira, 30 de outubro de 2014

Como trocar a tela de um tablet (Genesis GT 7325)

Esse vídeo mostra como troquei a tela de um tablet Genesis GT 7325.

Se tiver alguma dúvida leve a uma assistência técnica. Só realize a troca caso tenha absoluta certeza de que vá conseguir fazer pois sempre há o risco de danificar ainda mais o aparelho.

cuidado com os resíduos de vidro que caem sobre a mesa, eles podem riscar a tela nova. Após remover o vidro quebrado, limpe a mesa e só então pegue a tela nova.

Boa Sorte!!



quarta-feira, 8 de outubro de 2014

Arduino - Módulo de Leds (DIY)

Veja como fazer um módulo de leds para usar com Arduino ou qualquer outro circuito. Ótimo para testes.



terça-feira, 30 de setembro de 2014

Arduino - Dicas de Programação 04 - Orientação a Objetos

Exemplo de criação de código Orientado a Objetos a partir de um exemplo simples.
Nesse vídeo é mostrado como criar uma classe para controlar botões (pushbuttons). 




Vídeo sobre liga/delisga e debounce:



Código-Fonte 

//############  CODIGO DA CLASSE BOTAO  ################
class Botao {
  private:
    int _pino_botao;
    int _debounce_delay;
    int _leitura_anterior;
    int _leitura_anterior_db;
    long _time_ultimo_debounce;
    long _debounce_ok;
    bool _pressionou;
    bool _soltou;
  public:
    Botao(int pin, int debounce);
    void atualiza();
    bool pressionou();
    bool soltou();
    long tempo_pressionado();
};

Botao::Botao(int pin, int debounce){
  _pressionou     = false;
  _soltou         = false;
  _pino_botao     = pin;
  _debounce_delay = debounce;
  pinMode(_pino_botao, INPUT);
}

void Botao::atualiza(){  
  int leitura_atual = digitalRead(_pino_botao);
  if (leitura_atual != _leitura_anterior    )                  { _time_ultimo_debounce = millis(); _debounce_ok = 0; }
  if (  (millis() - _time_ultimo_debounce) > _debounce_delay ) { _debounce_ok = 1;                                   }
  if (_debounce_ok == 1) { 
    _pressionou          = (leitura_atual == 1 && _leitura_anterior_db == 0) ; 
    _soltou              = (leitura_atual == 0 && _leitura_anterior_db == 1) ;
    _leitura_anterior_db = leitura_atual; 
  }
  _leitura_anterior = leitura_atual;  
}

bool Botao::pressionou()        {  return _pressionou;  }
bool Botao::soltou()            {  return _soltou;      }
long Botao::tempo_pressionado() {  
  if ( _leitura_anterior_db ) {
    return ( millis()-_time_ultimo_debounce );
  } else {
    return 0;
  }  
}

//##############  FIM CODIGO DA CLASSE BOTAO  #############

const int PINO_LED_1 = 8;
const int PINO_LED_2 = 9;
const int PINO_LED_3 = 10;

Botao *b; //ponteiro para botao
Botao *b2; //ponteiro para botao

void setup() {
  b = new Botao(11, 100); //pino 11 , debounce time 100
  b2 = new Botao(12, 100); //pino 12 , debounce time 100
  Serial.begin(9600);
}

void loop() { 
  b->atualiza(); //faz a leitura do estado do pino e atualiza as variaveis de controle
  
  if ( b->pressionou() )               {  led_1(); Serial.println("pressionou"); } //liga led 1
  if ( b->soltou() )                   {  led_2(); Serial.println("soltou"); } //liga led 2
  if ( b->tempo_pressionado() > 3000 ) {  led_3(); Serial.println("3 segundos"); } //aciona beep depois de 3 segundos pressionado
  
  
  b2->atualiza(); //faz a leitura do estado do pino e atualiza as variaveis de controle
  
  if ( b2->pressionou() )               {  led_1(); Serial.println("pressionou"); } //liga led 1
  if ( b2->soltou() )                   {  led_2(); Serial.println("soltou"); } //liga led 2
  if ( b2->tempo_pressionado() > 3000 ) {  led_3(); Serial.println("3 segundos"); } //aciona beep depois de 3 segundos pressionado  
  
}

void led_1() { digitalWrite(PINO_LED_1, !digitalRead(PINO_LED_1)); }
void led_2() { digitalWrite(PINO_LED_2, !digitalRead(PINO_LED_2)); }
void led_3() { digitalWrite(PINO_LED_3, true); }

quarta-feira, 24 de setembro de 2014

Arduino - Controle Remoto - Reaproveitando Infravermelho de TV

Retirei uma plaquinha com um circuito de controle remoto de uma tv velha para usar com o Arduino.

O Circuito funcionou perfeitamente.









Para baixar a biblioteca, clique aqui

Extraia a bilbioteca na pasta libraries do Arduino.
Para a versão 1.0 da IDE do Arduino, abra o arquivo "IRRemoteInt.h" com um editor de texto e troque a seguinte linha:


"#include <WProgram.h>" 

para 

"#include <Arduino.h>". 

Código-Fonte:



/*
 * IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
 * An IR detector/demodulator must be connected to the input RECV_PIN.
 * Version 0.1 July, 2009
 * Copyright 2009 Ken Shirriff
 * http://arcfn.com
 */

#include <IRremote.h>

int RECV_PIN = 11;
int RELAY_PIN = 2;

IRrecv irrecv(RECV_PIN);
decode_results results;

// Dumps out the decode_results structure.
// Call this after IRrecv::decode()
// void * to work around compiler issue
//void dump(void *v) {
//  decode_results *results = (decode_results *)v
void dump(decode_results *results) {
  int count = results->rawlen;
  if (results->decode_type == UNKNOWN) {
    Serial.println("Could not decode message");
  } 
  else {
    if (results->decode_type == NEC) {
      Serial.print("Decoded NEC: ");
    } 
    else if (results->decode_type == SONY) {
      Serial.print("Decoded SONY: ");
    } 
    else if (results->decode_type == RC5) {
      Serial.print("Decoded RC5: ");
    } 
    else if (results->decode_type == RC6) {
      Serial.print("Decoded RC6: ");
    }
    Serial.print(results->value, HEX);
    Serial.print(" (");
    Serial.print(results->bits, DEC);
    Serial.println(" bits)");
  }
  Serial.print("Raw (");
  Serial.print(count, DEC);
  Serial.print("): ");

  for (int i = 0; i < count; i++) {
    if ((i % 2) == 1) {
      Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
    } 
    else {
      Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC);
    }
    Serial.print(" ");
  }
  Serial.println("");
}

void setup()
{
  pinMode(RELAY_PIN, OUTPUT);
  pinMode(13, OUTPUT);
    Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}

int on = 0;
unsigned long last = millis();

void loop() {
  if (irrecv.decode(&results)) {
    // If it's been at least 1/4 second since the last
    // IR received, toggle the relay
    if (millis() - last > 250) {
      on = !on;
      digitalWrite(RELAY_PIN, on ? HIGH : LOW);
      digitalWrite(13, on ? HIGH : LOW);
      dump(&results);
    }
    last = millis();      
    irrecv.resume(); // Receive the next value
  }
}

quinta-feira, 21 de agosto de 2014

Arduino - Dicas de Programação - 03

Mais dois vídeos com dicas de programação para arduino.








// Definindo variáveis
#define LED_A 2
#define LED_B 3
#define LED_C 4
#define LED_D 6
#define LED_E 7
#define LED_F 9
#define LED_G 8

// Delay entre letras (ms)
const int tempo=500;

void setup(){
  pinMode(LED_A,OUTPUT);
  pinMode(LED_B,OUTPUT);
  pinMode(LED_C,OUTPUT);
  pinMode(LED_D,OUTPUT);
  pinMode(LED_E,OUTPUT);
  pinMode(LED_F,OUTPUT);
  pinMode(LED_G,OUTPUT);
}

void setDisplay(bool a, bool b, bool c, bool d, bool e, bool f, bool g){
  digitalWrite(LED_A, a);  
  digitalWrite(LED_B, b);  
  digitalWrite(LED_C, c);  
  digitalWrite(LED_D, d);  
  digitalWrite(LED_E, e);  
  digitalWrite(LED_F, f);  
  digitalWrite(LED_G, g);
}

void setDisplay(char c){

  setDisplay(0,0,0,0,0,0,0);     //apaga tudo
  
                                      // a b c d e f g                  
  if (c == '0')             { setDisplay(1,1,1,1,1,1,0); }
  if (c == '1')             { setDisplay(0,1,1,0,0,0,0); }
  if (c == '2')             { setDisplay(1,1,0,1,1,0,1); }
  if (c == '3')             { setDisplay(1,1,1,1,0,0,1); }
  if (c == '4')             { setDisplay(0,1,1,0,0,1,1); }
  if (c == '5')             { setDisplay(1,0,1,1,0,1,1); }
  if (c == '6')             { setDisplay(1,0,1,1,1,1,1); }
  if (c == '7')             { setDisplay(1,1,1,0,0,0,0); }
  if (c == '8')             { setDisplay(1,1,1,1,1,1,1); }
  if (c == '9')             { setDisplay(1,1,1,1,0,1,1); }
  
  if (c == 'a' || c == 'A') { setDisplay(1,1,1,0,1,1,1); }
  if (c == 'r' || c == 'R') { setDisplay(0,0,0,0,1,0,1); }
  if (c == 'd' || c == 'D') { setDisplay(0,1,1,1,1,0,1); }
  if (c == 'u' || c == 'U') { setDisplay(0,1,1,1,1,1,0); }
  if (c == 'i' || c == 'I') { setDisplay(0,1,1,0,0,0,0); }
  if (c == 'n' || c == 'N') { setDisplay(0,0,1,0,1,0,1); }
  if (c == 'o' || c == 'O') { setDisplay(1,1,1,1,1,1,0); }
  
  //fazer para os demais caracteres!!!
}

void showDisplayChar(char c, int timeOn, int timeOff, int atraso){
  long resto = (millis()-atraso+100000) % (timeOn + timeOff);
  
  if (resto < timeOn) { setDisplay(c); }
}


void showDisplayString(String s, int timeOn){
  for (int i=0; i< s.length();i++){
    showDisplayChar(s[i], timeOn, timeOn * s.length()-timeOn, (i-1)*timeOn );
  }
}


void loop(){
  showDisplayString("0123456789 ARDUINO ", tempo);
  
  
}





Inscreva-se no meu canal do youtube para ver mais vídeos como esse!

quinta-feira, 10 de julho de 2014

Sudoku - Como jogar

Alguns vídeos mostrando como jogar sudoku.









Inscreva-se no meu canal do youtube para ver mais vídeos como esse!

Troca do vidro do Galaxy SIII - Screen Replacement

Troca somente do vidro do meu Galaxy S3.

Levei em várias assistências aqui em Cuiabá/MT e todos disseram que não era possível a troca somente do vidro.


Inscreva-se no meu canal do youtube para ver mais vídeos como esse!

Arduino - liga/desliga, pushbutton e debouncing

Este vídeo mostra como fazer um push button que com um toque inverte uma saída, ligando ou desligando um led e como fazer para tratar os ruídos (Bounce) que causam resultados indesejados.

o vídeo também mostra os dois momentos que podem ser alterados o status do led. ao pressionar o botão, ou ao soltar o botão.




para ver um exemplo de on-off, sem o arduino, apenas com transistores e capacitores, veja o vídeo: http://youtu.be/FC-qDXPSTkg

Veja um outro exemplo de on-off com o CI 4011:
http://youtu.be/Po1qE8eDHGE

veja outro exemplo de liga e desliga com vários botões em uma mesma entrada analógica: 
https://www.youtube.com/watch?v=u49BbpNdYw8

Veja também, um semáforo no arduino, sem uso de delay:
http://youtu.be/Vcqu6LgkIAM


Inscreva-se no meu canal do youtube para ver mais vídeos como esses!

Arduino - Pisca Led, millis e delay

Nesse vídeo eu mostro uma forma de fazer alguns leds piscarem de maneira mais simples e mais inteligente e sem o uso de delays.

veja um exemplo de uso dessa função em um semáforo:
http://youtu.be/Vcqu6LgkIAM

veja outro vídeo com exemplo de semaforo para pedestre:
http://youtu.be/Mvo9EWFI5yU

Veja outro vídeo dessa mesma função, mostrando como piscar leds com efeitos de fade:
http://youtu.be/73J720qipo0



Inscreva-se no meu canal do youtube para mais vídeos como esse!

Arduino - Jogo da memória

Implementação do jogo da memória no arduino.




Inscreva-se no meu canal do youtube para mais vídeos como esse!

Arduino - Como reproduzir notas musicais

Como reproduzir notas musicais no Arduino.




Inscreva-se no meu canal do youtube para mais vídeos como esse!

quarta-feira, 9 de julho de 2014

Latch RS com Transistor BC548 - Flip Flop

Exemplo da implementação de um latch RS usando dois transistores BC548.




Veja esse mesmo circuito, alterado para funcionar com apenas um botão (on-off): http://youtu.be/FC-qDXPSTkg

Arduino - Sensor de Temperatura - DS18B20

Exemplo de como utilizar o sensor de temperatura DS18B20 com o arduino.
Medindo a temperatura da água, e a temperatura ambiente.



Isca fácil de fazer para Pacu, Tambacu e Tambaqui

Essa é uma receita simples de uma massa pra pesca de tambacu. A primeira vez que fiz já faz bastante tempo, mas funcionou bem, e essa do vídeo fiz pela segunda vez e também funcionou.

provavelmente não é a melhor isca para esses peixes, mas ela é bem fácil de fazer, sem necessidade de procurar ingredientes difíceis, e fica bem firme no anzol.

ingredientes:
- Farinha de rosca;
- Farinha de trigo;
- leite;
- mel.

não há uma quantidade exata para cada ingrediente, mas a quantidade das duas farinhas deve ser igual.

adicione leite as duas farinhas e vá misturando, e adicione o mel aos pouco. 
enquanto a massa não obtiver a consistência adequada, vá adicionando mais
farinha de trigo. 

faça as bolinhas, depois as coloque na água fervendo até comecem a boiar, ou ficar rolando dentro da água.

tire da água e depois passe as iscas em um pouco de farinha, para que elas não grudem uma na outra.

o resultado final, deve ser uma bolinha bem firme e que ao cair no chão deve quicar.


Como fazer sabão caseiro na garrafa Pet

Atenção: não corra o mesmo risco que eu, de manusear a soda sem luvas.

Receita de sabão mais simples, fácil de fazer, sem sujeira e em menos de dez minutos está pronto pra enformar. 

essa receita é ideal pra quem usa pouco óleo e não precisa esperar juntar uma quantidade grande de óleo ou pra quem não tem muito espaço e pra quem não quer gastar muito tempo fazendo, além de não precisar usar baldes e pedaços de pau pra mexer o sabão e nem fazer muita sujeira.




Com esse sabão já pronto, é possível fazer sabão em pó, apenas utilizando um ralador. Veja o vídeo abaixo:

Arduino - Vários botões em um mesmo pino - 01

Esse vídeo mostra como configurar várias entradas em um mesmo pino no Arduino.

esse circuito identifica apenas um botão por vez. se for pressionado mais de um botão de uma vez, o circuito vai entender que o botão pressionado é aquele por onde a corrente passa com menor resistência e ignora os demais botões. 





Arduino - Vários botões em um mesmo pino - 02 

Esse vídeo mostra como ligar vários botões na mesma entrada analógica do Arduino. ao contrário do outro vídeo, esse mostra como fazer para que seja reconhecida múltiplas entradas simultaneamente.

link para planilha: https://docs.google.com/spreadsheet/ccc?key=0AtZzXhiNwNSrdEFqNUpUUXM4MV9vZURINmR1WUhmeXc&usp=sharing#gid=0






int PIN_ENTRADA = A0;
int PIN_SAIDA_1   = 3;
int PIN_SAIDA_2   = 4;
int PIN_SAIDA_3   = 5;
int PIN_SAIDA_4   = 6;

void setup(void) {
  Serial.begin(9600);
  pinMode(PIN_SAIDA_1, OUTPUT);
  pinMode(PIN_SAIDA_2, OUTPUT);
  pinMode(PIN_SAIDA_3, OUTPUT);
  pinMode(PIN_SAIDA_4, OUTPUT);
}

void loop(void) {
  int val_entrada = analogRead(PIN_ENTRADA);
  float voltagem = val_entrada * (5 / 1023.0);
  Serial.println(voltagem);  
  
  trataEntrada(voltagem);
  delay(100);
}

void trataEntrada(float v){
  int led1, led2, led3, led4;
  led1 = led2 = led3 = led4 = 0;
  
  if (v >= 0.40 && v < 0.84) {led1 = 0; led2 = 0; led3 = 0; led4 = 1;}
  if (v >= 0.84 && v < 1.21) {led1 = 0; led2 = 0; led3 = 1; led4 = 0;}
  if (v >= 1.21 && v < 1.56) {led1 = 0; led2 = 0; led3 = 1; led4 = 1;}
  if (v >= 1.56 && v < 1.83) {led1 = 0; led2 = 1; led3 = 0; led4 = 0;}
  if (v >= 1.83 && v < 2.06) {led1 = 0; led2 = 1; led3 = 0; led4 = 1;}
  if (v >= 2.06 && v < 2.25) {led1 = 0; led2 = 1; led3 = 1; led4 = 0;}
  if (v >= 2.25 && v < 2.44) {led1 = 0; led2 = 1; led3 = 1; led4 = 1;}
  if (v >= 2.44 && v < 2.60) {led1 = 1; led2 = 0; led3 = 0; led4 = 0;}
  if (v >= 2.60 && v < 2.73) {led1 = 1; led2 = 0; led3 = 0; led4 = 1;}
  if (v >= 2.73 && v < 2.85) {led1 = 1; led2 = 0; led3 = 1; led4 = 0;}
  if (v >= 2.85 && v < 2.96) {led1 = 1; led2 = 0; led3 = 1; led4 = 1;}
  if (v >= 2.96 && v < 3.06) {led1 = 1; led2 = 1; led3 = 0; led4 = 0;}
  if (v >= 3.06 && v < 3.15) {led1 = 1; led2 = 1; led3 = 0; led4 = 1;}
  if (v >= 3.15 && v < 3.23) {led1 = 1; led2 = 1; led3 = 1; led4 = 0;}
  if (v >= 3.23 && v < 5.00) {led1 = 1; led2 = 1; led3 = 1; led4 = 1;}
  
  if (led1) { digitalWrite(PIN_SAIDA_1, HIGH);  } else { digitalWrite(PIN_SAIDA_1, LOW); }
  if (led2) { digitalWrite(PIN_SAIDA_2, HIGH);  } else { digitalWrite(PIN_SAIDA_2, LOW); }
  if (led3) { digitalWrite(PIN_SAIDA_3, HIGH);  } else { digitalWrite(PIN_SAIDA_3, LOW); }
  if (led4) { digitalWrite(PIN_SAIDA_4, HIGH);  } else { digitalWrite(PIN_SAIDA_4, LOW); }
}




Arduino - vários botões no mesmo pino - 03 - com on/off 




Código Fonte:

int PIN_ENTRADA = A0;
int PIN_SAIDA_1 = 8;
int PIN_SAIDA_2 = 9;
int PIN_SAIDA_3 = 10;
int PIN_SAIDA_4 = 11;

float vcc = 5;
float modo_1_voltagem = 4.55; // 100 / (100+10) * 5
float modo_2_voltagem = 4.16; // 100 / (100+20) * 5
float modo_3_voltagem = 3.84; // 100 / (100+30) * 5
float modo_4_voltagem = 3.57; // 100 / (100+40) * 5

int modo_saida = 0;  //0: desliga

//variaveis para controle de liga e desliga
const long DEBOUNCE_DELAY             = 100;
int        pino_anterior              = 0;               //armazena o status da leitura no loop anterior
int        pino_anterior_db           = 0;
long       time_ultimo_debounce       = 0;
int        debounce_ok                = 1;

void setup(void) {
  Serial.begin(9600);
  pinMode(PIN_ENTRADA, INPUT);
  pinMode(PIN_SAIDA_1, OUTPUT);
  pinMode(PIN_SAIDA_2, OUTPUT);
  pinMode(PIN_SAIDA_3, OUTPUT);
  pinMode(PIN_SAIDA_4, OUTPUT);
  
}

void loop(void) {
  int val_entrada = analogRead(PIN_ENTRADA);
  float voltagem = val_entrada * (vcc / 1023.0);

  setModoSaida(voltagem);
  mostraSaida();

  if (voltagem > 2.00) {
    //Serial.println(voltagem);  
  }
  delay(10);
}

void setModoSaida(float v){
  modo_saida = 0;
  
  if ((  v >= (  (modo_1_voltagem + modo_2_voltagem)/2) ))                                                        { modo_saida = 1; }
  if ((  v >= (  (modo_2_voltagem + modo_3_voltagem)/2  )) && ( v < (  (modo_1_voltagem + modo_2_voltagem)/2)  )) { modo_saida = 2; }
  if ((  v >= (  (modo_3_voltagem + modo_4_voltagem)/2  )) && ( v < (  (modo_2_voltagem + modo_3_voltagem)/2)  )) { modo_saida = 3; }
  if ((  v >= (   modo_4_voltagem * 0.9  ))                && ( v < (  (modo_3_voltagem + modo_4_voltagem)/2)  )) { modo_saida = 4; }
}

void mostraSaida(){
  int pino = 0;                                 
  
  if (modo_saida == 0) { pino = 0;  }
  if (modo_saida == 1) { pino = PIN_SAIDA_1;  }
  if (modo_saida == 2) { pino = PIN_SAIDA_2;  }
  if (modo_saida == 3) { pino = PIN_SAIDA_3;  }
  if (modo_saida == 4) { pino = PIN_SAIDA_4;  }
  
  if (   pino != pino_anterior    )                            {   time_ultimo_debounce = millis(); debounce_ok = 0; }
  if (  (millis() - time_ultimo_debounce) > DEBOUNCE_DELAY )   {   debounce_ok = 1;                                  }
  
  Serial.print("pino: " );
  Serial.print(pino);
  Serial.print(" - pino ant: ");
  Serial.print(pino_anterior);
  Serial.print(" - pino ant db: ");
  Serial.print(pino_anterior_db);
  Serial.println("");
  
  if (debounce_ok == 1){ 
    if (pino > 0 && pino_anterior_db == 0){   
      digitalWrite(pino, !digitalRead(pino));  
    }  
  
    pino_anterior_db = pino; 
  } else {
    pino_anterior_db = 0; 
    pino_anterior    = 0; 
  }
    
  pino_anterior = pino; 
}

Cálculo de Resistor para Led - Em série e em paralelo

Como calcular valor de resistor para led para um ou mais leds no mesmo circuito.

link para planilha:
https://docs.google.com/spreadsheets/d/13EB4WqugwfecWP1meqImiR7lswU9Dqlb7HEULWG37ZU/edit#gid=0





Inscreva-se no meu canal do youtube para mais vídeos como esse!

Portas lógicas - Eletrônica digital

Como funcionam as portas lógicas digitais





Inscreva-se no meu canal do youtube para mais vídeos como esse!

Botão ON-OFF liga-desliga com transistor BC548 - latch RS - Flip Flop

Como fazer um botão on-off utilizando um Latch RS com transistores.

antes de ver esse vídeo, veja sobre o latch RS com transistores: 
http://youtu.be/tIwtrlrUNR0






Montagem

componentes:
- 2 resistores de 820 ohms
- 2 resistores de 10 K ohms
- 2 capacitores de 10uF
- 1 resistor de 100 ohms
- 2 transistores BC548
- 2 leds
- 1 botão







Tratamento de ruídos - debouncing 



Inscreva-se no meu canal do youtube para mais vídeos como esse!


Interruptor paralelo - Como substituir um interruptor simples por dois paralelos - Three way

Nesse vídeo mostro como instalar um segundo interruptor para uma lâmpada, substituindo o interruptor simples por dois interruptores paralelos.



Inscreva-se no meu canal do youtube para mais vídeos como esse!

Arduino - Pisca led com fade - portas PWM

Esse vídeo mostra como piscar vários leds incluindo efeito de fade (aumento de brilho gradual).

veja o primeiro vídeo - como piscar led sem delay:
http://youtu.be/R3mn7Vw9g2Y




Inscreva-se no meu canal do youtube para mais vídeos como esse!


Código:


const int PINO_LED_1 = 3;
const int PINO_LED_2 = 5;
const int PINO_LED_3 = 6;
const int PINO_LED_4 = 9;


void setup() {
  pinMode(PINO_LED_1, OUTPUT);
  pinMode(PINO_LED_2, OUTPUT);
  pinMode(PINO_LED_3, OUTPUT);  
  pinMode(PINO_LED_4, OUTPUT);  
}

void loop() {
  piscaLedFade(PINO_LED_1, 2000, 1500, 000, 1000, 1000);
  piscaLedFade(PINO_LED_2, 2000, 1500, 200, 1000, 1000);
  piscaLedFade(PINO_LED_3, 4000, 1500, 400, 1000, 1000);
  piscaLedFade(PINO_LED_4, 4000, 1500, 600, 1000, 1000);
}

void piscaLedFade(int pin, int timeOn, int timeOff, int atraso, int timeFadeOn, int timeFadeOff){
  long resto = (millis()-atraso) % (timeOn + timeOff);
  long fade  = (resto < timeOn ? 255 : 0);
  
  if (fade > 0){
    if ( timeFadeOn           > resto ) { fade = resto          * 255 / timeFadeOn;  }
    if ( (timeOn-timeFadeOff) < resto ) { fade = (timeOn-resto) * 255 / timeFadeOff; }
  }
  
  analogWrite(pin, fade);
}


Arduino - Semáforo (sem delay)

Exemplo de um sistema de semáforo sem o uso de delay.

veja o vídeo que explica o funcionamento da função piscaLed:
http://youtu.be/R3mn7Vw9g2Y

veja outro video sobre como piscar led com efeito de fade:
http://youtu.be/73J720qipo0





Inscreva-se no meu canal do youtube para mais vídeos como esse!

Arduino - Semáforo para pedestres (sem delay)

Outro exemplo de semáforo (agora para pedestre) com as funções piscaLed, sem o uso de delay, apenas usando a função millis.

veja o outro vídeo sobre semaforo:
http://youtu.be/Vcqu6LgkIAM

veja o vídeo explicativo sobre a função piscaLed:
http://youtu.be/R3mn7Vw9g2Y

veja um exemplo de pisca led com efeito de fade (pwm):
http://youtu.be/73J720qipo0




Inscreva-se no meu canal do youtube para mais vídeos como esse!

Arduino - Dicas de Programação - 01

Vídeo com algumas dicas de programação para Arduino, que normalmente são deixadas de lado pelos programadores, principalmente os iniciantes.




link para o site original da sketch:
http://alessandro-riva-elettronica.blogspot.it/2013/11/semplice-vu-meter-con-arduino.html

Inscreva-se no meu canal do youtube para mais vídeos como esse!

Arduino - Dicas de Programação - 02

Segundo vídeo com dicas de programação em Arduino.
Dicas simples pra quem está começando a programar em arduino. 
As dicas são baseadas em explicações e melhorias de sketchs publicados na internet.

para ver o vídeo original, entre no link abaixo:
http://labdegaragem.com/profiles/blogs/tutorial-como-utilizar-a-chave-optica


Inscreva-se no meu canal no youtube!

Como ligar led em um interruptor (127v - Corrente alternada)

Como ligar um led em um interruptor para sinalizar onde fica o interruptor em um quarto escuro.


Botão ON-OFF com CI CD4011

Como fazer um botão on-off utilizando um Latch RS montado com CI CD4011 ou CD7404.




Inscreva-se no canal e veja mais vídeos!