Salve a tutti, sono nuovo del forum e anche del mondo Arduino. Digiuno di elettronica e informatica.
Nonostante tutto sono riuscito a fare qualcosa con arduino; tipo comandare una ventolina in base ad un sensore di temperatura o cose simili che per me risultano già una vittoria.
Ora vorrei fare il passo successivo, utilizzare un sensore di temperatura e umidità DHT11. Quindi utilizzo di librerie.
Non un solo sensore, ma due.
Qualcuno sa aiutarmi con lo skech?
Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento
- qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- qui le pinout delle varie schede by xxxPighi: Pinout
- qui una serie di link generali utili: Link Utili
Il cross-posting è vietato. O domandi in italiano in sezione italiana o in inglese (e non in italiano) in sezione internazionale.
http://forum.arduino.cc/index.php?topic=283053.0
Di solito dichiari un oggett/variabile di tipo DHT.
Tu invece devi dichiarare 2 oggetti di tipo DHT (), uno su un pin e l'altro su altro pin.
Mai provato però.
Sì ma come faccio materialmente a distinguere i 2 dht11?
io faccio cosi... cerco in rete => sketch dht11 multiple (multipli in italiano)
dopo seleziono l'argomento piu consono alle mie esigenze => ad esempio questo
dal quale posso prendere come sempio sto sketch
// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain
// DHT_dual_test
// Demonstrates multiple sensors
// Modified sketch by DIY-SciB.org
/////////// *************** librerie *****************
#include "DHT.h"
#define DHT1PIN 2 // inserire il numero del pin a cui collegato sensore => in questo caso sostituisci il 2
#define DHT2PIN 3 // come sopra ma sostituire il 3
// Uncomment whatever type you're using!
#define DHT1TYPE DHT11 // DHT 11
#define DHT2TYPE DHT22 // DHT 22 (AM2302) /// toglila te usi il dht11
//#define DHTTYPE DHT21 // DHT 21 (AM2301) /// toglila te usi il dht11
// ******************* suggerimenti su come collegare il sensore ****************
// Connect pin 1 (on the left) of the sensor to +5V
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
DHT dht1(DHT1PIN, DHT1TYPE);
DHT dht2(DHT2PIN, DHT2TYPE);
/// ************** Inizio il VOID SETUP
void setup() {
Serial.begin(9600);
Serial.println("DHTxx test!");
dht1.begin();
dht2.begin();
}
/// ************** Inizio il void loop
void loop() {
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h1 = dht1.readHumidity();
float t1 = dht1.readTemperature();
float h2 = dht2.readHumidity();
float t2 = dht2.readTemperature();
// check if returns are valid, if they are NaN (not a number) then something went wrong!
if (isnan(t1) || isnan(h1)) {
Serial.println("Failed to read from DHT #1");
} else {
Serial.print("Humidity 1: ");
Serial.print(h1);
Serial.print(" %\t");
Serial.print("Temperature 1: ");
Serial.print(t1);
Serial.println(" *C");
}
if (isnan(t2) || isnan(h2)) {
Serial.println("Failed to read from DHT #2");
} else {
Serial.print("Humidity 2: ");
Serial.print(h2);
Serial.print(" %\t");
Serial.print("Temperature 2: ");
Serial.print(t2);
Serial.println(" *C");
}
/// finito di cambiare le varie cose puoi caricarlo e provarlo....... :sunglasses:
dovrebbe essere tutto chiaro ora....
nid69ita:
Di solito dichiari un oggett/variabile di tipo DHT.
Tu invece devi dichiarare 2 oggetti di tipo DHT (), uno su un pin e l'altro su altro pin.
Mai provato però.
quindi come scrive @db0
DHT dht1(DHT1PIN, DHT1TYPE);
DHT dht2(DHT2PIN, DHT2TYPE);
i due oggetti sono dht1 e dht2 della classe DHT. A cui passi due pin diversi, DHT1PIN e DHT2PIN.
Se fai dht1.readTemperature() leggi da un dht mentre se fai dht2.readTemperature() leggi l'altro.
grazie mille, appena ho un minuto lo provo!
allora, ho provato semplicemente a copiare il tuo esempio mettendo nella stessa cartella dello sketch la libreria scaricata da qui
http://playground.arduino.cc/Main/DHTLib
a questo punto mi compare il seguente errore
Arduino:1.5.8 (Windows 7), Scheda:"Arduino Uno"
Build options changed, rebuilding all
DHT_multiplo_prova.ino:18:1: error: 'DHT' does not name a type
DHT_multiplo_prova.ino:19:1: error: 'DHT' does not name a type
DHT_multiplo_prova.ino: In function 'void setup()':
DHT_multiplo_prova.ino:26:1: error: 'dht1' was not declared in this scope
DHT_multiplo_prova.ino:27:1: error: 'dht2' was not declared in this scope
DHT_multiplo_prova.ino: In function 'void loop()':
DHT_multiplo_prova.ino:35:12: error: 'dht1' was not declared in this scope
DHT_multiplo_prova.ino:37:12: error: 'dht2' was not declared in this scope
DHT_multiplo_prova.ino:59:1: error: expected '}' at end of input
Errore durante la compilazione
Questo report potrebbe essere più ricco
di informazioni con
"Mostra un output dettagliato durante la compilazione"
abilitato in "File > Impostazioni"
sai dirmi cosa sbaglio?
state usando due librerie diverse,
quella di @-d0b- presumo che sia questa
ho trovato da questo sito
un esempio con un solo sensore quindi l'ho provato con la la libreria consigliata e funziona.
Ho fatto delle prove per aggiungere un altro sensore e pare che funziona, almeno sulla carta visto che i sensori non mi sono ancora materialmente arrivati
Continuo a non capire perchè l'altro non funziona
forse la libreria?
ecco lo sketch funzionante
/*prova 2 sensori DHT11*/
#include <dht.h>
dht DHT;
#define DHT_A 6
#define DHT_B 7
void setup()
{
Serial.begin(9600);
Serial.println("DHT TEST PROGRAM ");
Serial.print("LIBRARY VERSION: ");
Serial.println(DHT_LIB_VERSION);
Serial.println();
Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)");
}
void loop()
{
//----- lettura sensore A ---------------------------------------//
Serial.print("DHT_A, \t");
int chk1 = DHT.read11(DHT_A);
switch (chk1)
{
case DHTLIB_OK:
Serial.print("OK,\t");
break;
case DHTLIB_ERROR_CHECKSUM:
Serial.print("Checksum error,\t");
break;
case DHTLIB_ERROR_TIMEOUT:
Serial.print("Time out error,\t");
break;
default:
Serial.print("Unknown error,\t");
break;
}
// scrivi sul display sensore A
Serial.print(DHT.humidity, 1);
Serial.print(",\t");
Serial.println(DHT.temperature, 1);
//----- lettura sensore B ---------------------------------------//
Serial.print("DHT_B, \t");
int chk2 = DHT.read11(DHT_B);
switch (chk2)
{
case DHTLIB_OK:
Serial.print("OK,\t");
break;
case DHTLIB_ERROR_CHECKSUM:
Serial.print("Checksum error,\t");
break;
case DHTLIB_ERROR_TIMEOUT:
Serial.print("Time out error,\t");
break;
default:
Serial.print("Unknown error,\t");
break;
}
// scrivi sul display sensore B
Serial.print(DHT.humidity, 1);
Serial.print(",\t");
Serial.println(DHT.temperature, 1);
delay(2000);
}
//fine
Brunello:
state usando due librerie diverse,
quella di @-d0b- presumo che sia questa
ok ora provo con questa libreria l'esempio di @-d0b-
perfetto ora funziona
Mi è parso di capire che questa libreria sia migliore perchè gestisce tutti i tipi di sensore
Grazie!