sexta-feira, 24 de maio de 2013

Sensor de Temperatura DHT

Neste projeto usaremos um sensor de temperatura DTH11 e um display LCD para "printala", usaremos também um push-button para alterar a escada da temperatura. Quando precionado o push-button ela ira alterar a escala entra Fahrenheit, Celsius e Kelvin e também humidade. Você terá de usar DHT library.



Material:

  • Arduino Uno
  • LCD Display
  • Sensor de temperatura DHT11
  • push-button
  • resistor limitador de corrente


Código:

#include "DHT.h"          
#include <LiquidCrystal.h>

#define DHTPIN 8
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

#define DHTTYPE DHT11  // define o modelo do DHT no nosso caso DHT11

DHT dht(DHTPIN, DHTTYPE);

int escala = 1;
int pino = 6;

void setup() {
  lcd.begin(16,2);  // habilita display 16x2
  dht.begin();      // habilita o DHT
  pinMode(pino, INPUT); // declara pino como entrada
}

void loop() {
  int h = dht.readHumidity();   // lê a humidade (o DHT tb fornece a humidade mas não usaremos neste projeto)
  int t = dht.readTemperature();  //lê a temperatura
  int buttonState = digitalRead(pino); // verifica se o pushbutton foi pressionado
  switch(buttonState) {               // caso tenha sido pressionado altera a escala
    case HIGH:
    escala=++escala;       // ++escala = escala + 1
    lcd.clear();
    delay(150);
   }
  delay(100);
  switch (escala) {       // define celsius para escala = 1 e fahrenheit para escala = 2 kelvin = 3 e escala =4 volta ao inicio
    case 1:
    celsius(t);
    break;
    case 2:
    fahrenheit(t);
    break;
    case 3:
    kelvin(t);
    break;
    case 4:
    humidade(h);
    break;
    case 5:
    escala = 1;            //volta a escala 1
  }
}

void celsius(int t) {      // função para celsius
  if (isnan(t) ) {
    lcd.println("Falha na leitura do DHT");   // printa uma falha caso t = NaN (not a number)
  } else {
    int temp = t;              // iguala temperatura t com a varivel temp
    lcd.setCursor(0,0);             // define a posição do cursor.
    lcd.print("Temperatura: ");
    lcd.setCursor(7,1);
    lcd.print(temp);              // printa a leitura da temperatura no display
    lcd.setCursor(9,1);
    lcd.write(B11011111); // simbolo do grau
    lcd.print("C");
    }
}

void fahrenheit(int t) { //função para fahrenheit
  if (isnan(t)) {
    lcd.println("Falha na leitura do DHT");
  } else {
    int temp = (t * 1.8)+32; // converte celsius para fahrenheit
    lcd.setCursor(0,0);
    lcd.print("Temperatura: ");
    lcd.setCursor(7,1);
    lcd.print(temp);
    lcd.setCursor(9,1);
    lcd.write(B11011111);
    lcd.print("F");
    }
}

void kelvin(int t) {      // função para kelvin
  if (isnan(t) ) {
    lcd.println("Falha na leitura do DHT");   // printa uma falha caso t = NaN (not a number)
  } else {
    int temp = t + 273.15;              // formula para kelvin
    lcd.setCursor(0,0);             // define a posição do cursor.
    lcd.print("Temperatura: ");
    lcd.setCursor(7,1);
    lcd.print(temp);              // printa a leitura da temperatura no display
    lcd.setCursor(9,1);
    lcd.write(B11011111); // simbolo do grau
    lcd.print("K");
    }
}

void humidade(int h) {      // função para humidade
  if (isnan(h) ) {
    lcd.println("Falha na leitura do DHT");   // printa uma falha caso t = NaN (not a number)
  } else {
    lcd.setCursor(0,0);             // define a posição do cursor.
    lcd.print("Humidade: ");
    lcd.setCursor(7,1);
    lcd.print(h);              // printa a leitura da humidade no display
    lcd.setCursor(9,1);
    lcd.print("%");
    }
}


quarta-feira, 1 de maio de 2013

3º Projeto - Controlando 2 Servos com Potenciometro de 2 eixos

Usei o joystick do meu controle de ps2(usb), mas caso você não tenha, pode utilizar 2 potenciometros também. Usaremos um servo no eixo x e um no eixo y (como mostra a figura abaixo), e o lcd indicara a posição de cada um.


Como utilizaremos apenas um joystick, so vamos precisar de 2 entradas analogicas (pot1,pot2).

Material:

  • Arduino
  • 2 servos
  • Potenciometro de 2 eixos ou 2 potenciometros
  • Display LCD
  • Potenciometro para ajustar o brilho do lcd
  • fios jumpers
  • Resistores

Codigo:


#include <Servo.h>
#include <LiquidCrystal.h> // inclui a biblioteca LCD
Servo servo1; // Cria um objeto servo
Servo servo2; // Cria um segundo objeto servo
int pot1, pot2;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
servo1.attach(7); // Anexa o servo, no pino 5, ao objeto servo1
servo2.attach(8); // Anexa o servo, no pino 6, ao objeto servo2
servo1.write(90); // Coloca o servo1 na posição inicial
servo2.write(90); // Coloca o servo2 na posição inicial
}
void loop() {
lcd.begin(16,2);
int angle=analogRead(3);
int angle1=analogRead(4);
  pot1 = analogRead(3); // Lê o eixo X
pot2 = analogRead(4); // Lê o eixo Y
pot1 = map(pot1,0,1023,0,179);
pot2= ma;p(pot2,0,1023,0,179)
servo1.write(pot1);
servo2.write(pot2);
angle=map(pot1, 0, 1023, 0, 179);
angle1=map(pot2, 0, 1023, 0, 179);
lcd.setCursor(0,0); /* define a posição do cursor */
lcd.print("Eixo x: ");  // printa Angulo
lcd.setCursor(10,0);
lcd.print(pot1); /* printa a leitura do angulo de 0 a 180 */
if(pot1 < 10) { // se for menor que 10 apaga os digitos "sobrando"
  lcd.setCursor(11,0);
  lcd.print("  ");
  }
  if(pot1 < 100){
    lcd.setCursor(12,0);
    lcd.print("  ");
  }

lcd.setCursor(0,1); /* define a posição do cursor */
lcd.print("Eixo y: ");  // printa Angulo
lcd.setCursor(10,1);
lcd.print(pot2); /* printa a leitura do angulo de 0 a 180 */
if(pot2 < 10) { // se for menor que 10 apaga os digitos "sobrando"
  lcd.setCursor(11,1);
  lcd.print("  ");
  }
  if(pot2 < 100){
    lcd.setCursor(12,1);
    lcd.print("  ");

}
delay(15);
}

Em breve postarei um video, um exemplo de utilização: controlar uma camera.


sexta-feira, 26 de abril de 2013

Conectando o display LCD ao Arduino

Esquema para ligar seu display ao arduino, ultilize o datasheet do seu display.



2º Projeto - Controle de Servo com Potenciômetro (exibindo a posição no lcd)

Neste projeto vamos controlar um servo utilizando um potenciômetro (projeto 25 do livro Arduino Básico de Michael McRoberts), porém, adicionei um lcd que ira mostrar a posição em graus do servo.

Materiais:

  • Arduino Uno
  • Servo motor (micro ou pequeno)
  • 2 potenciômetros (100k para controlar o servo e 10k para ajustar o cursorlight do lcd)
  • resistor limitador de corrente 220 ohm
  • Display lcd 16x2 (verifique o datasheet do display para conectalo)

Código:


#include <Servo.h> // inclui a biblioteca servo
#include <LiquidCrystal.h> // inclui a biblioteca LCD
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // pinos conectados ao lcd
Servo servo1;  //cria um servo
void setup() {
servo1.attach(8); // Anexa o servo (físico), no pino 5, ao objeto servo (lógico)
lcd.begin(16,2); // declara um lcd com 16 colunas e 2 linhas
}
void loop() {
int angle = analogRead(0); // Lê o valor do potenciômetro
angle=map(angle, 0, 1023, 0, 179); // Mapeia os valores de 0 a 180 graus
servo1.write(angle); // Escreve o ângulo para o servo
delay(15); // Espera de 15ms, para permitir que o servo atinja a posição
lcd.setCursor(0,0); /* define a posição do cursor */
lcd.print("Angulo: ");  // printa Angulo
lcd.setCursor(7,1);
lcd.print(angle); /* printa a leitura do angulo de 0 a 180 */
if(angle < 10) { // se for menor que 10 apaga os digitos "sobrando"
  lcd.setCursor(8,1);
  lcd.print("  ");
  }
  if(angle < 100){
    lcd.setCursor(9,1);
    lcd.print("  ");
  }
}
 E sempre que você alterar o potenciômetro a posição do servo ira aparecer no lcd. 

quinta-feira, 25 de abril de 2013

1º Projeto - Bomba para Airsoft

Airsoft e um jogo onde os participantes usam armas de brinquedo semelhante ao paintball e fazem uma simulação de combate. Esta "bomba" e na verdade um dispertador ^^
Este primeiro projeto e bem simples, vamos utilizar um display lcd como menu, push buttons para selecionar as opções, led e um buzzer (para alertar que a contagem acabou e a bomba foi detonada).

Materiais:


  • Arduino Uno
  • Display LCD 16x2
  • 4 push buttons
  • Buzzer 5v
  • Led alto brilho vermelho
  • Potenciometro de 10k ohm para ajustar o brilho do display (cursorlight)
  • 7 resistores limitadores de corrente
  • Fonte de alimentação externa
  



Código:

#include <LiquidCrystal.h>  



LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // entradas do lcd

 int buttonPushCounter = 0;    // declara a variável contadora
 int cutwire = 0;                      // push button que desativa a bomba
 int cutwire1 = 0;                    // push button que detona a bomba
 int buttonState7 = 0;           // push button que seleciona o tempo
 int buttonState8 = 0;        // push button que ativa a bomba
 int lastButtonState = 0;     // variavel para o ultimo estado do botão
 int redled = 9;                    // led 
 int buzzer = 13;                  // buzzer
 void setup(){
  
   pinMode(7, INPUT);        //entrada
   
   pinMode(8, INPUT);           
   
   pinMode(6, INPUT);         
   
   pinMode(10, INPUT);         
   
   pinMode(redled, OUTPUT);      //saida
   
   pinMode(buzzer,OUTPUT);
   
   lcd.begin(16,2);      // inicia o display com 16 colunas e 2 linhas
   
   lcd.setCursor(0,0);   // define a posição do cursor
   
   lcd.print("Tempo:");  
   
 }
 void loop(){
   
   buttonState7 = digitalRead(7); // verifica o estado dos push buttons
   buttonState8 = digitalRead(8);
   cutwire = digitalRead(6);
   cutwire1 = digitalRead(10);
   
   if (buttonState7 != lastButtonState) {   //verifica se o estado do botão foi //alterado
     
     if (buttonState7 == HIGH) 
      
     {
      buttonPushCounter+=300;  // incrementar um valor de 300
      delay(300);
      lcd.setCursor(7,1);                
      lcd.print(buttonPushCounter); // printa o contador
        
      delay(100);
     }
   }
      buttonState8 = digitalRead(8);  // verifica se o botão foi pressionado 
      
      if(buttonState8 == HIGH){        //se sim inicia um laço 
        while(buttonPushCounter != 0){
        buttonPushCounter = buttonPushCounter - 1; // enquanto o contador for //menor que 0 subtrai 1
        
        digitalWrite(redled, HIGH);  // led aceso 
        delay(500); //durante 500millisegundos
        digitalWrite(redled, LOW); // led apagado
        delay(500);  //durante 500 millisegundos formando o laço de 1 em 1 //segundo
        
        lcd.setCursor(0,0);
        lcd.print("Detonacao em:");
        lcd.setCursor(7,1);
        lcd.print(buttonPushCounter);
        if (buttonPushCounter < 10)     // se a contagem for menor que 10
              { 
                 
             lcd.setCursor(8,1);
          
              lcd.print("  ");  // apaga o digito "sobrando"
         }  
         if (buttonPushCounter < 100)
         
         {
             lcd.setCursor(9,1);
          
              lcd.print("  ");
         }  
         if (buttonPushCounter < 1000)
         
         {
             lcd.setCursor(10,1);
          
              lcd.print("  ");
         } 
        if (buttonPushCounter < 10000)        
         {
             lcd.setCursor(11,1);
          
              lcd.print("  ");

       }
                      
           cutwire = digitalRead(6);
       
       if (cutwire == HIGH && buttonPushCounter > 0) {  //verifica se o botão //desativador foi precionado e se a contagem e maior que 0
         lcd.setCursor(0,0);
           lcd.print("  ");
           lcd.setCursor(1,0);
           lcd.print("  ");
           lcd.setCursor(0,1);
           lcd.print("  ");
           lcd.setCursor(3,0);          
         lcd.print("Desativado ");   
          break;
       }
         cutwire1 = digitalRead(10);
         
         if(cutwire1 == HIGH || buttonPushCounter <= 0){      //verifica se o botão //detonador foi precionado ou se a contagem chegou a zero
           
           lcd.setCursor(0,0);
           lcd.print("  ");
           lcd.setCursor(1,0);
           lcd.print("  ");
           lcd.setCursor(0,1);
           lcd.print("  ");
           
           lcd.setCursor(2,0);          
         lcd.print("Terroristas ");       
         lcd.setCursor(3,1);
         lcd.print("Venceram");
         for(int buzzer = 0;buzzer < 20 ; buzzer++){  
           lcd.noDisplay();  // display desligado
         delay(250);
         lcd.display(); // display ligado
         delay(250);
           tone(13,1500); 
         delay(500);
       noTone(13);
       delay(500);
         }     
         break;             
       }             
       }    
    }              
 }
E isso ai galera o codigo e bem simples, vou deixar o link dele no http://pastebin.com/FiR6Lug1 e finalizo com um video:

Quero agradecer meu amigo meganha por ter me dado a dica de criar o blog!!