Arduino WiFi Shield e sensori

Buon giorno a tutti, sono nuovo del forum ma utilizzo le schede Arduino già da molto tempo.

Vi ringrazio anticipatamente per la disponibilità!

Ho riscontrato un problema software a livello di seriale nell'utilizzo della WiFi Shield. Ho creato un sistema di controllo dei gas dell'aria sfruttando tre sensori: Mq4 Mq7 e dht11 che viene montato sotto ad un drone creato sempre con arduino. Il problema sta nella lettura dei sensori e nell'uso del wifi.

Praticamente, il cervello è arduino uno rev3 con sopra una wifi shield a cui sono collegati questi tre sensori.

Il problema lo riscontro quando inizio ad effettuare le letture: o mi riesco a collegare solo alla rete wifi e non riesco però a leggere nulla, o leggo solo i valori dei sensori e poi nel momento in cui la wifi shield dovrebbe connettersi a internet la seriale non mi restituisce più nulla.

Immagino che ci sia da qualche parte un problema di comunicazione tra le schede ma dopo varie ricerche non riesco ancora a trovare una soluzione. Oggi pomeriggio posterò anche il codice in modo tale da poter definire una prospettiva più completa della situazione.

Grazie e buona giornata.

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

Posta anche uno schema di come li hai collegati e magari un link a questi sensori

Grazie mille e scusate i disguidi tecnici!

Come anticipato vi posto il codice:

#include <dht11.h>//inclusione libreria
#include <SD.h>
#include <SPI.h>
#include <WiFi.h>

char ssid[] = "SitecomECF67C";      //  your network SSID (name) 
char pass[] = "BMBhhP8w";   // your network password
int keyIndex = 0;            // your network key Index number (needed only for WEP)

int status = WL_IDLE_STATUS;

// Initialize the Wifi client library
WiFiClient client;

// server address:
char server[] = "www.airbox.altervista.org";
//IPAddress server(64,131,82,241);

unsigned long lastConnectionTime = 0;           // last time you connected to the server, in milliseconds
boolean lastConnected = false;                  // state of the connection last time through the main loop
const unsigned long postingInterval = 10*1000;  // delay between updates, in milliseconds

File myFile;//creazione oggetto 
dht11 DHT;//creazione oggetto 
#define DHT11_PIN 8//pin per la lettura del sensore della temperatura e dell' umidita'

const int pin_co = 0;//pin per la lettura del sensore del monossido di carbonio
const int pin_chq = 1;//pin per la lettura del sensore del metano
const int N = 100;
const int D = 10;
const int iddrone = 10;
String url;

int co, chq, i, chk, c;
float med_co, med_chq, med_temp, med_umd;
char buffer[D];

void setup()
{med_co = 0;
 med_chq = 0;
 med_temp = 0;
 med_umd = 0;
 c = 0;
 url = "";
 Serial.begin(9600);
 pinMode(10, OUTPUT);// default pin per la lettura della scheda sd

 /*
 //ciclo di riscaldamento
 Serial.println("INIZIO CICLO DI RISCALDAMENTO\n\nATTENDERE CIRCA 5 MINUTI E 30 SECONDI");
 for(i = 0; i < N*3; i++)
   {chq = analogRead(pin_chq);
    chk = DHT.read(DHT11_PIN);
    delay(1000);
    co = analogRead(pin_co);
    delay(100);
   }*/
 
 lettura();
 
 // check for the presence of the shield:
 if(WiFi.status() == WL_NO_SHIELD)
  {Serial.println("WiFi shield not present"); 
   // don't continue:
   while(true);
  } 
  
 // attempt to connect to Wifi network:
 while(status != WL_CONNECTED)
     {Serial.print("Attempting to connect to SSID: ");
      Serial.println(ssid);
      // Connect to WPA/WPA2 network. Change this line if using open or WEP network:    
      status = WiFi.begin(ssid, pass);

      // wait 10 seconds for connection:
      delay(10000);
      c++;
      if(c > 2)
       {Serial.print("\nInvio tramite Internet fallito...\n\nInizzializzazione scheda SD...\n");
  
        if(!SD.begin(4))// default pin per la lettura da scheda sd
         {Serial.println("Inizzializzazione fallita!\n");
         }
         else
         {//Serial.println("Inizzializzazione effettuata!\n");
          if(SD.exists("STAZIONE.txt"))
           {SD.remove("STAZIONE.txt");
           }
      
          myFile = SD.open("STAZIONE.txt", FILE_WRITE);

          if(myFile)
           {Serial.print("Scrittura...");
            myFile.println(iddrone);
            myFile.println(med_temp);
            myFile.println(med_umd);
            myFile.println(med_co);
            myFile.println(med_chq);
            myFile.close();
            Serial.println("Fatto!\n");
           }
           else
           {Serial.println("Errore nell'apertura del file!\n");
           }
         }
      }
   } 
  // you're connected now, so print out the status:
  printWifiStatus();
}




void loop()
{while(client.available())
     {char c = client.read();
      Serial.write(c);
     }

 // if there's no net connection, but there was one last time
 // through the loop, then stop the client:
 if(!client.connected() && lastConnected)
  {Serial.println();
   Serial.println("disconnecting.");
   client.stop();
  }

 // if you're not connected, and ten seconds have passed since
 // your last connection, then connect again and send data:
 if(!client.connected() && (millis() - lastConnectionTime > postingInterval))
  {httpRequest();
  }
 // store the state of the connection for next time through
 // the loop:
 lastConnected = client.connected();
  
 Serial.println("\n\n\n");
 delay(1000);
}



// this method makes a HTTP connection to the server:
void httpRequest()
 {// if there's a successful connection:
  url = "GET /listen.php?iddrone=";
  url += String(iddrone);
  url += "&med_co=";
  url += dtostrf(med_co, 4, 2, buffer);
  clear_buffer(buffer);
  url += "&med_chq=";
  url += dtostrf(med_chq, 4, 2, buffer);
  clear_buffer(buffer);
  url += "&med_temp=";
  url += dtostrf(med_temp, 3, 2, buffer);
  clear_buffer(buffer);
  url += "&med_umd=";
  url += dtostrf(med_umd, 3, 2, buffer);
  url += " HTTP/1.1";

  if(client.connect(server, 80))
   {Serial.println("connecting...");
    // send the HTTP PUT request:
    client.println(url);
    client.println("Host: www.airbox.altervista.org");
    client.println("User-Agent: arduino-ethernet");
    client.println("Connection: close");
    client.println();

    // note the time that the connection was made:
    lastConnectionTime = millis();
   } 
   else
   {// if you couldn't make a connection:
    Serial.println("connection failed");
    Serial.println("disconnecting.");
    client.stop();
   }
}


void printWifiStatus() {
  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);

  // print the received signal strength:
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
}


void clear_buffer(char buffer[])
{for(i = 0; i < D; i++)
   {buffer[i] = '\0';
   }
}


void lettura()
{Serial.println("\n\nINIZIO LA LETTURA DEI SENSORI\n\n");  
  
 c = 0;
  
 //lettura metano
 Serial.println("INIZIO LA LETTURA DEL CH4");
 
 for(i = 0; i < N; i++)
   {chq = analogRead(pin_chq);
    chq = floor((chq*9.482)+300);
    med_chq += chq;
    delay(100);
   }
 
 med_chq = med_chq/N;
 
 Serial.println("HO TERMINATO LA LETTURA");
 
 delay(10000);
 
 
 //lettura temperatura ed umidita' 
 Serial.println("\n\nINIZIO LA LETTURA DELLA TEMPERATURA E DELL' UMIDITA'");
 
 for(i = 0; i < N/10; i++)
   {chk = DHT.read(DHT11_PIN);//lettura dati
    switch (chk){
                 case DHTLIB_OK://lettura errori dalla libreria
                 Serial.print("OK\n"); 
                 break;
               
                 case DHTLIB_ERROR_CHECKSUM://lettura errori dalla libreria 
                 Serial.print("Errore di Checksum,\n");
                 c++;
                 break;
               
                 case DHTLIB_ERROR_TIMEOUT://lettura errori dalla libreria
                 Serial.print("Errore di Time out,\n"); 
                 c++;
                 break;
    
                 default://lettura errori dalla libreria
                 Serial.print("Errore sconosciuto,\n");
                 c++;
                 break;
                }
     
     med_temp += DHT.temperature;
     med_umd += DHT.humidity;
     delay(1000);
    }
      
 med_temp = med_temp/((N/10) - c);
 med_umd = med_umd/((N/10) - c);
             
 Serial.println("HO TERMINATO LA LETTURA");
 
 delay(10000);
 
 //lettura monossido di carbonio
 Serial.println("\n\nINIZIO LA LETTURA DEL CO");
 
 for(i = 0; i < N; i++)
   {co = analogRead(pin_co);
    co = floor((co*1.9355)+20);
    med_co += co;
    delay(100);
   }
 
 med_co = med_co/N;
 
 Serial.println("HO TERMINATO LA LETTURA\n\n");
 
 c = 0;
 
 delay(5000);
}

Altra cosa importante: uso l’IDE 1.0.3

Grazie in anticipo!

Scusate gli inconvenienti, ho fatto tutto quello che era necessario, compresa presentazione! Grazie ancora per il tempo che mi state dedicando.

Grazie per l'aiuto!