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.