#76 As_Needed Lun 26 Ott, 2015 18:27
Vi rivolgo una domanda ragazzi! Siccome ho deciso che quando finirò il tutto posizionerò arduino, circuito e il display dentro casa in cantina e poi i fili usciranno all'esterno con i sensori che andranno nello schermo solare e al palo. Allora mi chiedevo... per il barometro, il sensore di pressione, posso lasciarlo in cantina (non è sottoterra) sempre all'interno, magari mettendolo dentro una scatola stagna, per proteggerlo o devo per forza portarlo anch'esso sullo schermo a 2 metri d'altezza se no mi falsa la pressione? In più l'anemometro a che altezza va posizionato?
Ultima modifica di As_Needed il Lun 26 Ott, 2015 18:42, modificato 1 volta in totale
-
-
Guru Socio Ordinario
-
- Utente #: 1789
- Registrato: 15 Ott 2014
- Età: 28
- Messaggi: 7489
-
174 Punti
- Preferenza Meteo: Indifferente
- Stazione Meteo: Altro
- Località: Melbourne, Australia
-
#77 andrea75 Lun 26 Ott, 2015 19:01
Vi rivolgo una domanda ragazzi! Siccome ho deciso che quando finirò il tutto posizionerò arduino, circuito e il display dentro casa in cantina e poi i fili usciranno all'esterno con i sensori che andranno nello schermo solare e al palo. Allora mi chiedevo... per il barometro, il sensore di pressione, posso lasciarlo in cantina (non è sottoterra) sempre all'interno, magari mettendolo dentro una scatola stagna, per proteggerlo o devo per forza portarlo anch'esso sullo schermo a 2 metri d'altezza se no mi falsa la pressione? In più l'anemometro a che altezza va posizionato?

Nelle normali stazioni meteo il sensore sta nelle consolle, quindi all'interno.
____________ Facebook: lineameteo - Twitter: @lineameteo
Stazione meteo di San Mariano (PG)
Dati meteo in tempo reale
http://sanmariano.lineameteo.it
-
-
Presidente
-
- Utente #: 2
- Registrato: 31 Mar 2005
- Età: 49
- Messaggi: 45081
-
3592 Punti
- Preferenza Meteo: Freddofilo
- Stazione Meteo: LaCrosse WS2300
- Località: San Mariano (PG) - 290 mt.
-
#78 As_Needed Lun 26 Ott, 2015 19:38
Vi rivolgo una domanda ragazzi! Siccome ho deciso che quando finirò il tutto posizionerò arduino, circuito e il display dentro casa in cantina e poi i fili usciranno all'esterno con i sensori che andranno nello schermo solare e al palo. Allora mi chiedevo... per il barometro, il sensore di pressione, posso lasciarlo in cantina (non è sottoterra) sempre all'interno, magari mettendolo dentro una scatola stagna, per proteggerlo o devo per forza portarlo anch'esso sullo schermo a 2 metri d'altezza se no mi falsa la pressione? In più l'anemometro a che altezza va posizionato?

Nelle normali stazioni meteo il sensore sta nelle consolle, quindi all'interno. 
Allora non ci sono problemi grazie
-
-
Guru Socio Ordinario
-
- Utente #: 1789
- Registrato: 15 Ott 2014
- Età: 28
- Messaggi: 7489
-
174 Punti
- Preferenza Meteo: Indifferente
- Stazione Meteo: Altro
- Località: Melbourne, Australia
-
#79 As_Needed Gio 29 Ott, 2015 19:14
Salve a tutti! Posto qui finalmente i primi risultati concreti, visualizzazione della temperatura e umidità sul display!
Adesso per prova ho fatto sulla bread board, poi tutto lo collegherò al circuito stampato. Non ho aggiunto l'anemometro perché a casa non avevo la resistenza giusta.
Qui il programma del DS18B20 più DHT22 con display:
Citazione:
// Display Test
// Test several Display Adafruit_GFX functions
// for 1.8" TFT LCD Color Display (SainSmart).
// Hans Luijten, Tweaking4All.com
// Init pins
#define sclk 13
#define mosi 11
#define cs 10
#define dc 9
#define rst 8
#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library
#include <SPI.h>
Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst);
#include "DHT.h"
#include <OneWire.h>
#include <DallasTemperature.h>
// Data wire is plugged into pin 2 on the Arduino
#define ONE_WIRE_BUS 2
// Setup a oneWire instance to communicate with any OneWire devices
// (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
DHT dht(7,DHT22); //Definisco il pin al quale è collegato il sensore e il tipo
void setup()
{
tft.initR(INITR_BLACKTAB);
Serial.begin(9600);
//Serial.println("DHT test");
dht.begin();
// Start up the library
sensors.begin();
}
void loop()
{
sensors.requestTemperatures();
float h = dht.readHumidity(); // Leggo il valore di umidità
//float t = dht.readTemperature(); // Leggo il valore di temperatura
//if (isnan(t) || isnan(h)) // Se almeno uno dei due valori è NaN (Not a Number)
{
//Serial.println("Impossibile leggere il sensore!");
}
//else //altrimenti
{
Serial.print("Temperatura ");
Serial.println(sensors.getTempCByIndex(0));
Serial.print("Umidita' ");
Serial.print(h);
Serial.print(" %\t");
tft.fillScreen(ST7735_BLUE);
tft.setCursor(0, 0);
tft.setTextSize(1);
tft.println("Temperatura");
tft.setCursor(0, 15);
tft.setTextSize(2);
tft.print(sensors.getTempCByIndex(0));
tft.print ( (char)248);
tft.println("C");
//delay(5000);
tft.setCursor (0,50);
tft.setTextSize (2);
tft.print ("Umidita'");
tft.setCursor (0,70);
tft.setTextSize (2);
tft.print (dht.readHumidity());
tft.print ("%\t");
//delay(1000);
//Serial.print("Temperatura: ");
//Serial.print(t);
//Serial.println(" *C");
// non è necessario mettere un delay() perchè ci vogliono due secondi per leggere i valori, quindi il serial monitor riceverà dati ogni 2 secondi.
}
}
IL DS18B20 è fantastico, mi dà il valore della temperatura in meno di un secondo! Più veloce di qualsiasi stazione meteo penso
Ultima modifica di As_Needed il Gio 29 Ott, 2015 19:17, modificato 1 volta in totale
-
-
Guru Socio Ordinario
-
- Utente #: 1789
- Registrato: 15 Ott 2014
- Età: 28
- Messaggi: 7489
-
174 Punti
- Preferenza Meteo: Indifferente
- Stazione Meteo: Altro
- Località: Melbourne, Australia
-
#81 Fili Gio 29 Ott, 2015 21:05
 per me è totalmente arabo...complimenti davvero!
-
-
Guru Socio Ordinario
-
- Utente #: 343
- Registrato: 17 Dic 2007
- Età: 41
- Messaggi: 38643
-
5405 Punti
- Preferenza Meteo: Indifferente
- Stazione Meteo: Davis Vantage Pro2
- Località: Foligno V.le Firenze 225m s.l.m.
-
#82 As_Needed Gio 29 Ott, 2015 21:20
Grazie mille!!
Posteró i prossimi sviluppi!
-
-
Guru Socio Ordinario
-
- Utente #: 1789
- Registrato: 15 Ott 2014
- Età: 28
- Messaggi: 7489
-
174 Punti
- Preferenza Meteo: Indifferente
- Stazione Meteo: Altro
- Località: Melbourne, Australia
-
#83 enniometeo Gio 29 Ott, 2015 21:41
Bravissimo Eugenio!
Ultima modifica di enniometeo il Gio 29 Ott, 2015 21:46, modificato 1 volta in totale
-
-
Guru
-
- Utente #: 1754
- Registrato: 08 Ago 2014
- Età: 27
- Messaggi: 12108
-
5767 Punti
- Preferenza Meteo: Freddofilo
- Stazione Meteo: Davis Vantage Vue
- Località: Raiano 390m s.l.m (AQ) Abruzzo
-
#84 Gab78 Gio 29 Ott, 2015 22:07
Lavoro grandioso!
____________ I love Appennino...
-
-
Guru Socio Sostenitore
-
- Utente #: 874
- Registrato: 30 Ott 2010
- Età: 47
- Messaggi: 12041
-
3988 Punti
- Preferenza Meteo: Indifferente
- Stazione Meteo: Davis Vantage Vue, Ventus W83x e Altro
- Località: San Giovanni Profiamma - 270 m s.l.m. - frazione di Foligno (PG)
-
#85 As_Needed Gio 29 Ott, 2015 22:14
Non posso che dire grazie!!!
Ci ho lavorato duro tutto il pomeriggio, domani se tutto va bene aggiungeró nel display anche velocità del vento e direzione, il sensore di pressione sarà l ultimo ad arrivare  Nel display credo metteró solo le condizioni attuali perché non c é posto, successivamente proveró ad aggiungere anche massime e minime nel seriale e chissà in un sito...
-
-
Guru Socio Ordinario
-
- Utente #: 1789
- Registrato: 15 Ott 2014
- Età: 28
- Messaggi: 7489
-
174 Punti
- Preferenza Meteo: Indifferente
- Stazione Meteo: Altro
- Località: Melbourne, Australia
-
#86 As_Needed Ven 30 Ott, 2015 17:27
Allora, alla fine ecco i risultati finali su basetta! Appena terminati
Per chi non conoscesse il seriale che ho nominato nei post precedenti è questo:
Questo il lungo programma che permette di misurare la temperatura con il DS18B20, l'umidità con il DHT22 e vento con il TX20 della LaCrosse e visualizzare il tutto su un display lcd tft.
Citazione:
// Display Test
// Test several Display Adafruit_GFX functions
// for 1.8" TFT LCD Color Display (SainSmart).
// Hans Luijten, Tweaking4All.com
// Init pins
#define sclk 13
#define mosi 11
#define cs 10
#define dc 9
#define rst 8
#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library
#include <SPI.h>
Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst);
#include "DHT.h"
#include <OneWire.h>
#include <DallasTemperature.h>
// Data wire is plugged into pin 2 on the Arduino
#define ONE_WIRE_BUS 2
// Setup a oneWire instance to communicate with any OneWire devices
// (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
DHT dht(7,DHT22); //Definisco il pin al quale è collegato il sensore e il tipo
//void setup();
//void loop();
//int collectdata(void);
//void showdatasimple();
int dataPin = 4;
int bitLength = -1;
int data[45];
int gooddata = 1;
int timeout;
int loops = 0;
int spd[8];
int i = 0;
int j = 0;
char windDirection[16][4] = {
"N","NNE","NE", "ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW"};
void setup() {
tft.initR(INITR_BLACKTAB);
Serial.begin(9600);
//Serial.println("DHT test");
dht.begin();
// Start up the library
sensors.begin();
Serial.print("\n\nInitializing...\n");
// Serial.print("Data Pin: ");
// Serial.println(digitalRead(dataPin));
pinMode(dataPin, INPUT);
}
//void delay2(unsigned long ms){
// unsigned long start = micros();
// while (micros() - start <= ms);
//}
void loop() {
sensors.requestTemperatures();
float h = dht.readHumidity(); // Leggo il valore di umidità
//float t = dht.readTemperature(); // Leggo il valore di temperatura
//if (isnan(t) || isnan(h)) // Se almeno uno dei due valori è NaN (Not a Number)
//Serial.println("Impossibile leggere il sensore!");
//else //altrimenti
Serial.print("Temperatura ");
Serial.println(sensors.getTempCByIndex(0));
Serial.print("Umidita' ");
Serial.print(h);
Serial.print(" %\t");
//delay(1000);
//Serial.print("Temperatura: ");
//Serial.print(t);
//Serial.println(" *C");
// non è necessario mettere un delay() perchè ci vogliono due secondi per leggere i valori, quindi il serial monitor riceverà dati ogni 2 secondi.
Serial.println("Start");
gooddata = 1;
collectData();
if (gooddata == 1) {
rawdump();
outputResults();
TheData();
}
else {
Serial.println ("READ ERROR");
}
Serial.println(++loops);
Serial.println();
delay(1500);
}
int collectData(void) {
if (bitLength <0){
bitLength = 1220;//getbitlenght2();
}
pinMode(dataPin, OUTPUT);
digitalWrite(dataPin, HIGH);
delay(100);
digitalWrite(dataPin, LOW );
delay(500);
pinMode(dataPin, INPUT);
while(digitalRead(dataPin) == LOW){
}
//wait slave start signal
while(digitalRead(dataPin) == HIGH){
}
while(digitalRead(dataPin) == LOW){
}
for (int i=0 ; i<42 ; i++) {
data[i] = (digitalRead(dataPin) == LOW)? 0:1; // read and save either a 0 or 1
delayMicroseconds(bitLength);
}
}
int TheData() {
Serial.println("TheData");
int i, idx = 0, idy = 0;
// for (i=8; i>4; i--) { dato originale
for (i=6; i>2; i--) { // dato modificato
idx = idx *2 + data[i];
}
// Serial.print("idx: ");
// Serial.println(idx, DEC);
Serial.print("Wind: ");
Serial.println(windDirection[idx] );
// for (i=17; i>8; i--) { dato originale per velocità
for (i=15; i>6; i--) { // dato modificato
idy = idy * 2 + data[i];
}
Serial.print("Speed: ");
Serial.print(idy, DEC);
Serial.println (" m/s read");
float idz = idy/10.0;
Serial.print("Speed: ");
Serial.print(idz);
Serial.println (" m/s real");
float KMH = idz * 3.6;
Serial.print("Speed: ");
Serial.print(KMH);
Serial.println (" kmh");
float MPH = KMH * 0.621371192;
Serial.print("Speed: ");
Serial.print(MPH);
Serial.println (" mph");
tft.fillScreen(ST7735_BLUE);
tft.setCursor(0, 0);
tft.setTextSize(1);
tft.println("Temperatura");
tft.setCursor(0, 10);
tft.setTextSize(2);
tft.print(sensors.getTempCByIndex(0));
tft.print ( (char)248);
tft.println("C");
//delay(5000);
tft.setCursor (0,30);
tft.setTextSize (1);
tft.print ("Umidita'");
tft.setCursor (0,40);
tft.setTextSize (2);
tft.print (dht.readHumidity());
tft.print ("%\t");
tft.setCursor (0,60);
tft.setTextSize (1);
tft.println ("Vento");
tft.setCursor (0,70);
tft.setTextSize (2);
tft.print (KMH);
tft.print ("Km/h");
tft.setCursor (0,90);
tft.setTextSize (2);
tft.print (windDirection[idx]);
/*
float wc, dp;
wc = windchill((float) temperature / 100, (float) Wind * 0.36);
dp = dewpoint((float)temperature / 100, (float) humidity);
*/
}
void rawdump() {
Serial.print("Raw: ");
for (int i=0 ; i<41 ; i++) {
Serial.print (data[i]);
if (i == 4) {
Serial.print (" ");
}
if (i == 8) {
Serial.print (" ");
}
if (i == 17) {
Serial.print (" ");
}
if (i == 20) {
Serial.print (" ");
}
if (i == 24) {
Serial.print (" ");
}
if (i == 28) {
Serial.print (" ");
}
if (i == 37) {
Serial.print (" ");
}
}
}
void outputResults() {
Serial.println();
int idx =0;
for (int i=8 ; i> 4 ; i--)
//for (int i=6 ; i> 2 ; i--) // dato modificato
{
idx = idx *2 + data[i]; // data[i] == 0/1.. see prev post. //
}
Serial.print("idx: ");
Serial.println(idx, DEC);
Serial.print("Wind: ");
Serial.println(windDirection[idx] );
// Serial.println();
Serial.print("Swapped: ");
//HEAD
for (int i =0 ; i< 5 ; i++)
{
Serial.print(data[i]); // it contains 0 or 1
}
Serial.print(" ");
//WINDDIR
for (int i =8 ; i> 4 ; i--)
{
Serial.print(data[i]);
}
Serial.print(" ");
//WIND SPEED
for (int i =17 ; i> 8 ; i--)
{
Serial.print(data[i]);
}
Serial.print(" ");
//WIND SPEED+3
for (int i =20 ; i> 17 ; i--)
{
Serial.print(data[i]);
}
Serial.print(" ");
/*
// Checksum
for (iCounter=0;iCounter<4;iCounter++)
{
checksum |= (TX23_DATA_GET_BIT << iCounter);
delayTargetuSec += bitLength;
TX23_DoDelay;
}
//Calculate Checksum
unsigned int checksumCalc = 0;
checksumCalc += (winddir & 15);
checksumCalc += ((windspeed >> 8) & 15);
checksumCalc += ((windspeed >> 4) & 15);
checksumCalc += (windspeed & 15);
*/
// Checksum
for (int i =24 ; i> 20 ; i--)
{
Serial.print(data[i]);
}
Serial.print(" ");
//WIND DIR NEGATEIVE
for (int i =28 ; i> 24 ; i--)
{
Serial.print(data[i]);
}
[b]Serial[/b].print(" ");
//WIND SPEED NEGATED
for (int i =37 ; i> 28 ; i--){
[b]Serial[/b].print(data[i]);
}
[color=#CC6600][b]Serial[/b][/color].[color=#CC6600]print[/color]([color=#006699]" "[/color]);
[color=#7E7E7E]//WIND SPEED NEGATED +3[/color]
[color=#CC6600]for[/color] ([color=#CC6600]int[/color] i =40 ; i> 37 ; i--){
[color=#CC6600][b]Serial[/b][/color].[color=#CC6600]print[/color](data[i]);
}
[color=#CC6600][b]Serial[/b][/color].[color=#CC6600]println[/color]();
[color=#7E7E7E]// Serial.println();[/color]
[color=#7E7E7E]// Serial.println();[/color]
}
Manca solo di aggiungere il sensore di pressione al programma, e lo farò per ultimo.  Adesso devo concentrarmi solo al montaggio dei componenti sul circuito stampato!
P.S. siccome il programma è lungo ci vogliono un paio di secondi a sapere tutti i dati i tempo reale, comunque pochissimo!
-
-
Guru Socio Ordinario
-
- Utente #: 1789
- Registrato: 15 Ott 2014
- Età: 28
- Messaggi: 7489
-
174 Punti
- Preferenza Meteo: Indifferente
- Stazione Meteo: Altro
- Località: Melbourne, Australia
-
#88 As_Needed Ven 30 Ott, 2015 20:49
Sto topic sono sicuro farà furore una volta terminato il progetto.... 
Lo spero, condivido per questo  almeno posso essere d aiuto!
-
-
Guru Socio Ordinario
-
- Utente #: 1789
- Registrato: 15 Ott 2014
- Età: 28
- Messaggi: 7489
-
174 Punti
- Preferenza Meteo: Indifferente
- Stazione Meteo: Altro
- Località: Melbourne, Australia
-
#89 As_Needed Sab 31 Ott, 2015 13:35
Ho aggiunto pure il dewPoint, tramite un'equazione inserita nel programma  Ho indicato dove metterò il valore della pressione pure. Per causa delle dimensioni del display non metterò né indice di calore né wind chill e nemmeno le massime e le minime, se a progetto finito riuscirò a fare un server allora ci penserò a dovere.
-
-
Guru Socio Ordinario
-
- Utente #: 1789
- Registrato: 15 Ott 2014
- Età: 28
- Messaggi: 7489
-
174 Punti
- Preferenza Meteo: Indifferente
- Stazione Meteo: Altro
- Località: Melbourne, Australia
-
#90 Gab78 Sab 31 Ott, 2015 14:37
Chapeau...!
____________ I love Appennino...
-
-
Guru Socio Sostenitore
-
- Utente #: 874
- Registrato: 30 Ott 2010
- Età: 47
- Messaggi: 12041
-
3988 Punti
- Preferenza Meteo: Indifferente
- Stazione Meteo: Davis Vantage Vue, Ventus W83x e Altro
- Località: San Giovanni Profiamma - 270 m s.l.m. - frazione di Foligno (PG)
-
Questo argomento è stato utile?
Questo argomento è stato utile?
Condividi Argomento |
|
 |
Inserisci un link per questo argomento |
URL |
|
BBCode |
|
HTML |
|
Argomenti Simili
Argomenti Simili
Lista Permessi
|
Non puoi inserire nuovi Argomenti Non puoi rispondere ai Messaggi Non puoi modificare i tuoi Messaggi Non puoi cancellare i tuoi Messaggi Non puoi votare nei Sondaggi Non puoi allegare files Puoi scaricare gli allegati Non puoi inserire eventi calendario
|
|
|
|
|