Pages: [1]   Go Down
Author Topic: Problema sensore di temperatura  (Read 451 times)
0 Members and 1 Guest are viewing this topic.
near Slovenia
Offline Offline
Jr. Member
**
Karma: 1
Posts: 65
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao,
ho fatto questo misuratore di temperatura con questo sensore LM335Z e ho collegato con Arduino Uno R3 con Arduino GSM Shield che invia dati a Cosm
https://cosm.com/feeds/8526 vedi sensor_reading.Ma il codice della temperatura del sensore mi da errati dati.Che cosa devo fare?Grazie.

Code:
/**
 * Cosm Arduino sensor GSM client example.
 *
 * This sketch demonstrates connecting an Arduino to Cosm (https://cosm.com),
 * using the new Arduino library to send and receive data and the new GSM library.
 *
 * Requirements
 *   * Arduino with (Telefonica-designed) GSM shield
 *   * Arduino software with version >= 1.0
 *   * An account at Cosm (https://cosm.com)
 *
 *   * A temperature sensor connected to pin 3
 *
 * Adapted 1 April 2013 by Dan Appelquist from a sample program
 * created 8th January, 2013 using code written by Adrian McEwen with
 * modifications by Sam Mulube
 *
 * Full cosm tutorial available here: https://cosm.com/docs/quickstart/arduino.html
 *
 * This code is in the public domain.
 */

#include <Cosm.h>
#include <HttpClient.h>
#include <GSM.h>

#define API_KEY "XXXX" // your Cosm API key
#define FEED_ID XXXX // your Cosm feed ID

// PIN Number
#define PINNUMBER "" // your sim PIN number if you have one (most don't)

// APN data
#define GPRS_APN       "bluevia.movistar.es"  // replace your GPRS APN
#define GPRS_LOGIN     ""     // replace with your GPRS login
#define GPRS_PASSWORD  ""  // replace with your GPRS password

// initialize the library instance:
GSMClient client;
GPRS gprs;
GSM gsmAccess;

// Analog pin which we're monitoring (0 and 1 are used by the Ethernet shield)
int sensorPin = A3;

unsigned long lastConnectionTime = 0;                // last time we connected to Cosm
const unsigned long connectionInterval = 500;      // delay between connecting to Cosm in milliseconds

// Initialize the Cosm library

// Define the string for our datastream ID
char sensorId[] = "sensor_reading";

CosmDatastream datastreams[] = {
  CosmDatastream(sensorId, strlen(sensorId), DATASTREAM_FLOAT),
};

// Wrap the datastream into a feed
CosmFeed feed(FEED_ID, datastreams, 1 /* number of datastreams */);

CosmClient cosmclient(client);

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);

  Serial.println("GSM Cosm Sensor Client Example");
  Serial.println("==============================");

}

void loop() {
  // main program loop
  if (millis() - lastConnectionTime > connectionInterval) {
    // read a value from the pin
    int sensorValue = analogRead(A3);
    float voltage = sensorValue * (3.3 / 1023.0);
    float temperature = (3.24 - .48828125) * 100;
    // initialize GPRS connection
    Serial.println("Initializing network");

    // connection state
    boolean notConnected = true;
 
    // After starting the modem with GSM.begin()
    // attach the shield to the GPRS network with the APN, login and password
    while(notConnected)
    {
      if((gsmAccess.begin(PINNUMBER)==GSM_READY) &
          (gprs.attachGPRS(GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD)==GPRS_READY))
        notConnected = false;
      else
      {
        Serial.println("Not connected");
        delay(1000);
      }
    }
    Serial.println("Network initialized");
    Serial.println();

    // send it to Cosm
    sendData(temperature);

    // disconnect the GPRS connection
    Serial.println("Network disconnected"); 
    client.stop(); 

    // update connection time so we wait before connecting again
    lastConnectionTime = millis();
  }
}

// send the supplied value to Cosm, printing some debug information as we go
void sendData(float sensorValue) {
  datastreams[0].setFloat(sensorValue);

  Serial.print("Read sensor value ");
  Serial.println(datastreams[0].getFloat());

  Serial.println("Uploading to Cosm");
  int ret = cosmclient.put(feed, API_KEY);
  Serial.print("PUT return code: ");
  Serial.println(ret);

  Serial.println();
}

// get the value of the datastream from Cosm, printing out the value we received
// not used for this sample but useful if you want to get data back from cosm
void getData() {
  Serial.println("Reading data from Cosm");

  float ret = cosmclient.get(feed, API_KEY);
  Serial.print("GET return code: ");
  Serial.println(ret);

  if (ret > 0) {
    Serial.print("Datastream is: ");
    Serial.println(feed[0]);

    Serial.print("Sensor value is: ");
    Serial.println(feed[0].getFloat());
  }

  Serial.println();
}   
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7123
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Dopo la lettura e il calcolo della temperatura aggiungi un Serial print per verificare il valore.
Così si può capire se è il sensore a leggere il valore errato o se è l'invio a cosm.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

near Slovenia
Offline Offline
Jr. Member
**
Karma: 1
Posts: 65
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
void loop() {
  // main program loop
  if (millis() - lastConnectionTime > connectionInterval) {
    // read a value from the pin
    int sensorValue = analogRead(A3);
    float voltage = sensorValue * (3.3 / 1023.0);
    float temperature = (3.24 - .48828125) * 100;
    Serial.println("sensorValue");

Così va bene o ho sbagliato?
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7123
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sarebbe meglio aggiungere
Code:
Serial.print("Temperatura letta = ");
Serial.println(temperature);

Se vuoi approfondire il linguaggio usato da Arduino ti cosiglio di leggere questa guida --> http://www.html.it/guide/guida-c/
nella parte relativa alle variabili e alle funzioni.
« Last Edit: April 20, 2013, 07:15:11 am by PaoloP » Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

near Slovenia
Offline Offline
Jr. Member
**
Karma: 1
Posts: 65
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

La temperatura interna mi segnala 27.90°C, come posso avere la temperatura corretta?
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7123
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Nella formula moltiplichi per 3.3. Di solito si usa quel valore quanto si utilizza il riferimento esterno ai 3.3V.
Il sensore è collegato ai 5V o ai 3V3?
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Pages: [1]   Go Up
Jump to: