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!