Arduino + Processing + DHT 22

Finestra DHT Processing

In questo tutorial spiego come creare un semplice programmino con Processing che utilizzi il sensore di temperatura e umidità DHT 22 montato su una shield Arduino UNO rev. 3.

 

Cominciamo col dire che questo progetto ha un livello di difficoltà medio-alto.

 

 

Materiali che occorrono:

1. Arduino UNO

2. Sensore di umidità e temperatura DHT 22

3. Software per la programmazione di Arduino

4. Software per la programmazione Processing

5. Tanta pazienza

 

Occorre innanzitutto montare il sensore di umidità e temperatura sulla board di Arduino in questo modo:

DHT22 montaggio

 

Fatto ?

Perfetto, a questo punto carichiamo lo sketch su Arduino:

 

/**********************************************
Termometro ed Umidità su piattaforma Processing
Progetto di Giovanni Gentile
https://www.0lab.it
Ottobre 2013
Creative Common License
**********************************************/
// Arduino code

#include "DHT.h"
#define DHTPIN 6
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

int tempPin = 0;
int i;
float samplest[10];
float samplesh[10];

void setup() {
Serial.begin(9600);
dht.begin();
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();

Serial.print(h);
Serial.print(" ");
Serial.println(t);

}

Una volta caricato lo sketch su Arduino non resta altro da fare che controllare il corretto funzionamento del sensore DHT22 andando a dare uno sguardo nel monitor seriale dell’applicazione di programmazione di Arduino (cmd+shift+M).

Verificata la presenza dei valori numerici di temperatura ed umidità, è necessario compilare questo file con Processing.

Importantissimo passaggio è quello di individuare la porta di comunicazione corretta del vostro Arduino UNO. Fate attenzione a questo codice:

commPort = new Serial(this, Serial.list()[6], 9600);

E’ importante cambiare il numero ra le parentesi quadre nel mio caso è il numero [6], ma a voi non resta altro che individuare la porta giusta con il metodo classico illustrato da Massimo Banzi nel tutorial su YouTube.

Questo è il codice di Processing:

//Processing code

/**********************************************
Termometro ed Umidità su piattaforma Processing
Progetto di Giovanni Gentile
https://www.0lab.it
Ottobre 2013
Creative Common License
**********************************************/
import processing.serial.*;

Serial commPort;

float tempC = 0;
float tempF = 0;
float RH;
float y, h, msbyte, lsbyte;

int yDist, xx=-15;

PFont font12;
PFont font24;

void setup()
{
font12 = createFont("Arial", 12);
font24 = createFont("Arial",20);

size(345, 330);
commPort = new Serial(this, Serial.list()[6], 9600);
}

void draw()
{
background(150);
//Disegno termometro
// Bulbo
fill(200, 0, 0);
smooth();
stroke(0, 46, 200);
strokeWeight(8);
ellipse(250, 250, 58, 50);

//Termometro
noStroke();
fill(0, 46, 200);
arc(250, 30, 30, 20, PI, PI+PI);
rect(235.2,30,30,200);

// Disegno solco mercurio
fill(250, 250, 250);
rect(245,30,10,200);

// Valori numerici termometro
stroke(245, 240, 220);
strokeWeight(1);
textAlign(RIGHT);
fill(0,46,250);

// Farenheit
stroke(0);
for (int i = 0; i < 5; i += 1) {
line(222, 190-40*i, 232, 190-40*i);
if(i < 4) line(225, 170-40*i, 230, 170-40*i);
textFont(font12);
text(str(40+20*i), 218, 195-40*i);
}

// Centigrade
textAlign(LEFT);
for (int i = 0; i < 6; i += 1) {
line(268, 204-35*i, 278, 204-35*i);
if(i < 5) line(268, 187-35*i, 273, 187-35*i);
textFont(font12);
text(str(0+10*i), 282, 210-35*i);
}

// Mercurio
fill(200,0, 0);
smooth();
strokeWeight(0);
y = -2.0*tempF + 268;
h = 240-y;
rect(245.2, y, 10, h);

// Rettangolo dati ambientali
fill(120);
stroke(0);
strokeWeight(1);
rect(10,10,180,140,7);
rect(10,160, 180, 150, 7);
fill(0,0,0);
textFont(font24);
textAlign(LEFT);
text("Dati Ambientali", 20,35);
text("°C", 70, 70);
text(nfc(tempC, 1), 20, 70);
text("°F", 70, 100);
text(nfc(tempF, 1), 20, 100);
text("% UR", 70, 130);
text(nfc(RH, 0), 20, 130);

textFont(font12);
String s = ("Termometro ambientale con misuratore di Umidità DHT 22 montato su piattaforma Arduino con supporto Processing. Ideato e Progettato da Giovanni Gentile - 0lab.it");
text(s, 20, 170, 150, 140);
}

void serialEvent(Serial p) {
// get message till line break (ASCII > 13)
String message = p.readStringUntil(13);
if (message != null) {
// try catch function because of possible garbage in received data
try {
String[] elements = splitTokens(message);
RH = float(elements[0]);
tempC = float(elements[1]);
tempF = (((tempC)*9)/5) + 32;

println("tempC: "+tempC);
println("tempF: "+ (int)tempF);
println("RH: "+RH);

}
catch (Exception e) {
}
}
}

Ci siete riusciti?

Nov 7, 2013 | Posted by in Arduino, Blog, Elettro, Tutorial | Commenti disabilitati su Arduino + Processing + DHT 22
Premium Wordpress Themes by UFO Themes