aiuto - Stazione nivometrica

Salve, premettendo che sono un principiante di arduino (primo progetto), volevo realizzare una stazione da locare in montagna per la misurazione del manto nevoso fino a 2m e che invii le sue rilevazioni via internet su un server e memorizzi periodicamente su micro-sd. A tal proposito ho preso spunto da un progetto visto in rete ( http://it.emcelettronica.com/stazione-meteo-online-con-arduino ) utilizzando come hardware un Arduino UNO con ethernet shield, sensore DHT22 (misura temp./umidità per calcolare la velocità del suono) e sensore ultrasuoni HC-SR04 (per misurare la distanza). Il tutto con questo software:

//Stazione Meteo con Arduino 12/2013
//Ivan Scordato e Giovanni Lorenzini

//dichiaro il pin di entrata del sensore di luminosità in una variabile
int pinfotoresistenza = A0;

//includo la libreria del sensore DHT22 di temperatura e umidità...
//...e dichiaro a che pin è collegato
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

//includo le librerie wire e del sensore di temperatura e pressione BMP085
#include "Wire.h"
#include "Adafruit_BMP085.h"
Adafruit_BMP085 bmp;
//scl--> A5 sda-->A4

//dichiaro in due variabili i pin del sensore ad ultrasuoni HC-SR04 per misurare...
//...l'altezza della neve
const int TRIG_PIN = 5;
const int ECHO_PIN = 6;

//includo le librerie della ethernet shield
#include 
#include 

//variabili per collegarsi a internet
byte mac[] = { 
 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};

IPAddress ip(192,168,50,100); //indirizzo IP disponibile sulla rete

IPAddress myDns(192,168,1,1); //tuo DNS

char server[] = "www.fabbricaopensource.altervista.org"; //sito web

EthernetClient client;

unsigned long lastConnectionTime = 0; //l'ultima volta che ti sei connesso...
//...al server in millisecondi
boolean lastConnected = false;    
const unsigned long postingInterval = 60L*1000L; //la L è necessaria per...
//...usare i numeri di tipo long

//dichiaro la stringa dove scrivo i dati per caricarli sul web
String strURL = "";

void setup()
{
 //inizializzo i sensori sensori
 dht.begin(); //inizializzo il sensore di umidità
 bmp.begin(); //inizializzo il sensore di pressione
 pinMode(TRIG_PIN, OUTPUT); //dichiaro come output il pin trig
 pinMode(ECHO_PIN, INPUT); //dichiaro come input il pin echo

 Serial.begin(9600); //stabilisco una connessione con il pc

 delay(1000); //attendo un secondo

 Ethernet.begin(mac, ip, myDns);

 //invio al pc il mio IP
 Serial.print("My IP address: ");
 Serial.println(Ethernet.localIP());

}

void loop()
{ 

   if (client.available()) {
   char c = client.read();
   Serial.print(c);
 }

   if (!client.connected() && lastConnected) {
   Serial.println();
   Serial.println("Disconnessione...");
   client.stop();
 }

   if(!client.connected() && (millis() - lastConnectionTime > postingInterval)) {
   aggiornoDati(); //carico i dati sul server
 }

 lastConnected = client.connected();

//calcolo il punto di rugiada
double puntoDiRugiada(double temperatura, double umidita)
{
 double a = 17.271;
 double b = 237.7;
 double temp = (a * temperatura) / (b + temperatura) + log(umidita/100);
 double Td = (b * temp) / (a - temp);
 return Td;
}

void aggiornoDati() //carico i dati sul server
{
 //leggo la luminosità dal pin analogico A0
 int luminosita = map(analogRead(pinfotoresistenza), 0, 1023, 0, 100); //eseguo un...
//...procedimento che riduce il range da 0-1023 a 0-100...
//...per esprimere la luminosità in percentuale

 //leggo l'umidità e la scrivo in una variabile
 float umidita = dht.readHumidity();

 //leggo la pressione e la scrivo in una variabile
 float pressione = bmp.readPressure();

 //leggo la temperatura da due sensori, faccio la media e la scrivo in una variabile
 float temperatura = (bmp.readTemperature() + dht.readTemperature());
 temperatura = (temperatura / 2.0);

 //misuro l'altezza della neve
 float neve, durata; //dichiaro la variabile neve e la variabile durata
 float cmPerMicrosecondi = 0.0331 + ( 0.000062 * temperatura); //calcolo i cm/ms...
//...del suono in base alla temperatura
 digitalWrite(TRIG_PIN, LOW); 
 delayMicroseconds(2); 
 digitalWrite(TRIG_PIN, HIGH); 
 delayMicroseconds(10); //faccio un impulso di dieci microsecondi sul pin trig
 digitalWrite(TRIG_PIN, LOW);
 durata = pulseIn(ECHO_PIN,HIGH); //mi metto in ascolto sul pin eco e calcolo la...
//...durata dell'impulso
 neve = (durata*cmPerMicrosecondi/2.0); //calcolo la distanza con la formula...
//...durata*(cm/ms)/2, diviso due perchè il suo va, rimbalza contro...
//...un oggetto e ritorna,...
//...quindi compie due volte il tragitto
 float menoNeve = 200.0 - neve;

 if (client.connect(server, 80))
 {
   Serial.println("Connessione...");

   //creo l'url utilizzando una stringa
   strURL ="GET  /meteo/salva.php?temp="; //url
   strURL+=temperatura;
   strURL+="&umi=";
   strURL+=umidita;
   strURL+="&pres=";
   strURL+=pressione;
   strURL+="&lum=";
   strURL+=luminosita;
   strURL+="&neve=";
   strURL+=menoNeve;
   strURL+="&rug=";
   strURL+=puntoDiRugiada(temperatura, umidita);
   strURL+=" HTTP/1.1";

   //invio la richiesta al server
   client.println(strURL);
   client.println("Host: www.fabbricaopensource.altervista.org"); //sito web
   client.println("User-Agent: arduino-ethernet");
   client.println("Connection: close");
   client.println();
   
   lastConnectionTime = millis();
   
   delay(1000);
   Serial.println(strURL);
 }
 else
 {
   Serial.println("Errore Connessione");
   Serial.println("Disconnessione...");
   client.stop();
 }
}

Il mio problema è che, fatti tutti i collegamenti su arduino, scaricato il programma su windows e collegata la scheda al pc; non mi vuole caricare il programma sulla scheda dandomi degli errori alle righe del DHT... Vista la mia zero conoscenza in materia, che cosa potrebbe essere? Come potrei snellire il programma visto che porta delle righe anche per altri sensori che non mi servono?

Grazie in anticipo per le risposte

Andrea

Ciao Non hai mai letto questo forum vero?

si me ne scuso se qualcuno ne ha già parlato in altri topic…

@Modelcablewayav: Prima di tutto, essendo il tuo primo post, ti chiederei di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione) e di leggere con attenzione il REGOLAMENTO

… poi, in conformità al suddetto regolamento, punto 7, edita (in basso a destra del post, bottone More → Modify) il tuo post e racchiudi il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone fatto così: </>, tutto a sinistra). Grazie.

Guglielmo

@gpb01 scusami ho fatto e corretto quanto mi hai detto

Dovresti fare un passo alla volta, perchè non è chiaro se non carica lo sketch sopra o non ne carica nemmeno uno. Una volta collegato arduino all'usb e installato l'IDE (prego specificare versione) hai provato a caricare un .ino di esempio tipo il blink? lo carica? funziona?

la serie di errori sono visualizzati in fondo se non copi e incolli il tipo di errori sarà dura dirti le cause sarebbe utile specifare anche l'hardware su cui si sta lavorando arduino tipo?

Purtroppo non abbiamo davanti il tuo pc e il tavolo su cui stai lavorando, i dettagli sono importantissimi

saluti

Niente sparito ... se ne annau!!

ALLORA… Arduino UNO, IDE 1.0.5, s.o. Windows…
no non ho provato a caricare nient’altro che ciò che ho pubblicato sopra…

per l’errore dovrebbe arrivare uno screen…

ALLORA... devi [u]copiare e incollare[/u] gli errori!!! dobbiamo leggerli tutti dall'inizio non una foto come faccio a scorrere lo slider? sono quelli in rosso in basso.... ALLORA! :grinning:

Però un princiapiante come dici (primo progetto) ... che poi l'hai copiato in rete, non ci capisci niente, chiedi a noi di risolvere il problema, non è proprio lo scopo di questo forum di appassionati che sono arrivati con mesi e anni di prove, studio, partendo da zero.

Sicuro che sia #include "DHT.h" in maiuscolo ? Sicuro della riga "DHT dht(DHTPIN, DHTTYPE);" ?

Perché mi sembra che hai confuso parecchie minuscole con maiuscole e viceversa ... ::)

Guglielmo

P.S.: ... almeno stando al Playground QUI

Mi spiace davvero non lo so perchè fa così io l'ho semplicemente incollato... credevo funzionasse semplicemente copiando il sw di un altro

Purtroppo imparerai presto, a tue spese, che una buona parte di ciò che si trova su internet ... sono boiate ...

Comunque, in generale NON basta fare copia/incolla ... ci sono librerie da scaricare, da installare e ... occorre pure studiare :smiling_imp:

Tu quale libreria hai scaricato (... il link) per il sensore DHT22 ?

Guglielmo

ehm non ho scaricato null'altro se non copiare il codice così com'era...

Appunto ... ... che ne dici, prima di affrontare programmi di una certa complessità, di dedicare un po' di tempo alle basi ?

Puoi cominciare con QUESTO e puoi cercare qualche buon libro relativo alla programmazione su Arduino.

Comunque, in generale, una libreria che NON fa parte di quelle di base ... deve essere installata. Nel nuovo IDE c'è un "library manager" ... da li puoi facilmente installare le più comuni.

Per il DHT ... prova a studiare quanto trovi QUI ;)

Guglielmo

Il copia incolla dello sketch c'è riuscito ma quello degli errori no .. bo

Grazie delle informazioni...provo a istallare le librerie del DHT ... vi terrò aggiornati

Risolto il problema delle librerie (ho istallato tutte le librerie dei sensori) mi da come errore questo alla riga "aggiornoDati" :

Arduino:1.6.7 (Windows 7), Scheda:"Arduino/Genuino Uno"

C:\Users\Andrea\AppData\Local\Temp\arduino_f7aa0a0311398ca2e81a021ee0fd6c34\sketch_jan06a.ino: In function 'void loop()':

sketch_jan06a:90: error: 'aggiornoDati' was not declared in this scope

   aggiornoDati(); //carico i dati sul server

                ^

sketch_jan06a:97: error: a function-definition is not allowed here before '{' token

{

^

sketch_jan06a:106: error: a function-definition is not allowed here before '{' token

{

^

sketch_jan06a:176: error: expected '}' at end of input

}

^

exit status 1
'aggiornoDati' was not declared in this scope



 Questo report potrebbe essere più ricco di informazioni con
 "Mostra un output dettagliato durante la compilazione"
 abilitato in "File > Impostazioni"

cosa potrebbe essere? Altra domanda: ma le informazioni del mio server (indirizzo,cartella, passw.) in quale righe vanno inseriti? Grazie in antcipo

... e che ne so cosa potrebbe essere ? ? ? :o

Purtroppo NON abbiamo la palla di vetro ...

Se non metti tutto il codice come pensi che possiamo provare a capire dove è l'errore nel programma ? :smiling_imp:

Guglielmo

Il codice che ho caricato è quello indicato alla prima pagina di questo topic ;)

Modelcablewayav: Il codice che ho caricato è quello indicato alla prima pagina di questo topic ;)

NON CREDO PROPRIO ! >:(

Quel codice si ferma già molto prima a causa di due #include vuoti (righe 26 e 27) ... ... se vuoi che ti si aiuti DEVI mettere il codice ULTIMO che stai usando e non pensare che un vecchio codice, su cui hai messo poi le mani, possa andare bene.

Guglielmo

P.S.:Inoltre controlla le parentesi graffe, perché ce ne sono di mancanti/fuori posto.