Neofita chiede supporto :) (2x dht11, scheda relè 4 contatti, display 1602 i2c

Ciao a tutti, dopo un paio d'anni di voglia, ho deciso di buttarmi in un progetto arduino! :slight_smile: :slight_smile:
Ho acquistato una scheda leonardo R3, un scheda relè 4 contatti, un display 1602 con 6 tasti, un modolo i2c; e in futuro dovrò collegarlo in rete con l'etheret shield e forse comandare 2 pompe DC per liquidi , ma affrontiamo un problema alla volta. :slight_smile:

Mi sto leggendo vari 3d e guide per capirci meglio, ma non è così semplice almeno per ora:
dal punto di vista di collegamenti e similari non ho problemi ( da qualche anno "gioco" con lo stagnatore ), ma la parte software è quella che mi rallenta un po'...
Ho scaricato l'ide per linux e appena arrivan tutti i pezzi non vedo l'ora di cominciare.

1° problema:
Ho visto come utilizzare un dht11, e fin qui tutto bene, ma se io volessi metterne due e utilizzare come valore di riferimento per chiuderè i relè la media dei 2? è fattibile?
2°problema:
Ho bisogno che arduino mi faccia da "presa temporizzata" su un relè, come posso fare?

Intanto sistemiam questi quesiti e poi vi pongo i miei altri dubbi.

Mille grazie per l'attenzione.
J.

ciao, certo non sei stato molto preciso nella descrizione, comunque al tuo primo quesito posso risponderti facilmente, dicendoti che certo si può fare, potresti sommare i valori delle due variabili, nelle quali i due sensori inseriscono i valori letti e dopo dividerli per 2, però non sono sicuro che si faccia così, intanto ti allego un link che potrebbe comunque servirti per ulteriori implementazioni
http://forum.arduino.cc//index.php?topic=177384.0

prova a cercare su google comunque prova a dare un occhiata qui, e poi dipende anche dal sensore che hai acquistato se è un LM35 o un DHT11 o un DHT22 ...

http://forum.arduino.cc/index.php?topic=35458.0;wap2

snake301090, intanto che aspetti l'arrivo della scheda ti consiglio di iniziare a studiare un pò di programmazione.
In questo thread qui:
http://forum.arduino.cc/index.php?topic=200848.0
sono state segnalate diverse risorse gratuite.

Capiti i concetti base, devi iniziare a programmare facendoti un pò le ossa e prendendo la mano con Arduino.

snake301090:
1° problema:
Ho visto come utilizzare un dht11, e fin qui tutto bene, ma se io volessi metterne due e utilizzare come valore di riferimento per chiuderè i relè la media dei 2? è fattibile?

questo è un esempio con 3 DHT, giusto per darti un idea

  int t1 = dht1.readTemperature();
  int t2 = dht2.readTemperature();
  int t3 = dht3.readTemperature();
  int Tmedia;

  if (t1 < 1 || !isnan(t1)) { Tmedia = (t2+t3)/2;}
  if (t2 < 1 || !isnan(t2)) { Tmedia = (t1+t3)/2;}
  if (t3 < 1 || !isnan(t3)) { Tmedia = (t2+t1)/2;}
  if (t1  >1 && t2  >1 && t3  >1)   {  Tmedia = (t1+t2+t3)/3;  }

Ciao a tutti scusate per la mia assenza, ma per motivi di lavoro son stato super impegnato.
è arrivato tutto, ora se qualche buon anima mi aiuta mi piacerebbe iniziare :slight_smile:
ho un modulo ds1302, un display 1602, con interfaccia i2c e vorrei al momento usare solo un relè dei 4 a disposizione.
in pratica devo usare arduino per chiudere il relè 12 ore e lasciarlo aperto le altre 12 ( tipo dalle 21 alle 9 on, dalle 9 alle 21 off)
e se vedere intanto l'ora sul display.

Mille grazie a tutti per l'aiuto.
j

ciao a tutti, e auguri in ritardo.
Oggi ho avuto il tempo di provare qualcosa, e prendendo come base uno sketch trovato on line ho provato ad adattarlo a me, ma il programma da errore di compilazione. vi posto lo sketch e spero che qualcuno possa aiutarmi.

J.

/*-----( Import needed libraries )-----*/
#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

/*-----( Declare objects )-----*/
// set the LCD address to 0x27 for a 20 chars 2 line display
// Set the pins on the I2C chip used for LCD connections:
//                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address
#define DHTTYPE DHT11;

/*-----( Declare Constants, Pin Numbers )-----*/
#define DHTPIN 7

void setup()   /*----( SETUP: RUNS ONCE )----*/
{
  Serial.begin(9600); //(Remove all 'Serial' commands if not needed)
  lcd.begin(20,2);         // initialize the lcd for 20 chars 4 lines, turn on backlight
  lcd.backlight();
  // Print a message to the LCD.
  //lcd.setCursor(0, 1);
  lcd.print("DHT11 Temp/Humid");

}/*--(end setup )---*/

void loop()   /*----( LOOP: RUNS CONSTANTLY )----*/
{


  int chk = DHT.read(DHTPIN);

  Serial.print("Read sensor: ");
  switch (chk)
  {
    case 0: Serial.println("OK"); break;
    case -1: Serial.println("Checksum error"); break;
    case -2: Serial.println("Time out error"); break;
    default: Serial.println("Unknown error"); break;
  }
  lcd.setCursor(0, 1);

  lcd.print("C=");
  lcd.print((float)DHT.temperature, 0);
  Serial.print("Temperature (oC): ");
  Serial.println((float)DHT.temperature, 2);

  lcd.print("  H=");
  lcd.print((float)DHT.humidity, 0);
  lcd.print("%");
  Serial.print("Humidity (%): ");
  Serial.println((float)DHT.humidity, 2);  

  Serial.print("Dew Point (oC): ");
  Serial.println(dewPoint(DHT.temperature, DHT.humidity));

  Serial.print("Dew PointFast (oC): ");
  Serial.println(dewPointFast(DHT.temperature, DHT.humidity));

  delay(2000);
}/* --(end main loop )-- */

/*-----( Declare User-written Functions )-----*/
//
//Celsius to Fahrenheit conversion
double Fahrenheit(double celsius)
{
        return 1.8 * celsius + 32;
}

//Celsius to Kelvin conversion
double Kelvin(double celsius)
{
        return celsius + 273.15;
}

// dewPoint function NOAA
// reference: http://wahiduddin.net/calc/density_algorithms.htm 
double dewPoint(double celsius, double humidity)
{
        double A0= 373.15/(273.15 + celsius);
        double SUM = -7.90298 * (A0-1);
        SUM += 5.02808 * log10(A0);
        SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ;
        SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ;
        SUM += log10(1013.246);
        double VP = pow(10, SUM-3) * humidity;
        double T = log(VP/0.61078);   // temp var
        return (241.88 * T) / (17.558-T);
}

// delta max = 0.6544 wrt dewPoint()
// 5x faster than dewPoint()
// reference: http://en.wikipedia.org/wiki/Dew_point
double dewPointFast(double celsius, double humidity)
{
        double a = 17.271;
        double b = 237.7;
        double temp = (a * celsius) / (b + celsius) + log(humidity/100);
        double Td = (b * temp) / (a - temp);
        return Td;
}

/* ( THE END ) */

Se pubblichi anche l'esatto errore che ti restituisce l'IDE è meglio, altrimenti obblighi la gente a caricare il tuo programma, recuperare le eventuali librerie mancanti e poi compilarlo.. :wink:

Questo è ciò che mi restituisce l'ide

sketch_jan06a.cpp: In function ‘void loop()’:
sketch_jan06a.cpp:38:16: error: expected primary-expression before ‘.’ token
sketch_jan06a.cpp:51:23: error: expected primary-expression before ‘.’ token
sketch_jan06a.cpp:53:28: error: expected primary-expression before ‘.’ token
sketch_jan06a.cpp:56:23: error: expected primary-expression before ‘.’ token
sketch_jan06a.cpp:59:28: error: expected primary-expression before ‘.’ token
sketch_jan06a.cpp:62:30: error: expected primary-expression before ‘.’ token
sketch_jan06a.cpp:62:47: error: expected primary-expression before ‘.’ token
sketch_jan06a.cpp:65:34: error: expected primary-expression before ‘.’ token
sketch_jan06a.cpp:65:51: error: expected primary-expression before ‘.’ token

j

Sono errori sintattici, ricontrolla i punti e virgola, ricontrolla l'uso dei metodi delle varie classi, ricontrolla le parentesi se sono tutte chiuse ecc...
Ah, per facilitarti il compito, metti sempre una sola istruzione per riga (vedo che spesso ne scrivi più di una insieme), tenendo ordine nel codice poi questo genere di errori è più facile trovarli. Controlla nella prima riga segnalata o nelle righe immediatamente sopra.

snake301090, magari leggo male, ma ... non mi sembra di vedere alcuna istanza alla classe dht ...
... tu includi DHT.h ma questo non ti crea alcun oggetto ... insomma, mi sembra che manchi un qualche cosa del tipo :

dht DHT;

Guglielmo