Vill kunna logga lufttryck, Telldus Live!.

Moderator: Telldus

tronde
Posts: 587
Joined: Thu Jan 18, 2018 11:08 am

Re: Vill kunna logga lufttryck, Telldus Live!.

Post by tronde » Fri Jan 31, 2020 5:15 pm

Dette ser jo bra ut.

Litt merkelig at noen finner på å bruke kilopascal som lufttrykk, for det er som du sier hektopascal som meteorologene bruker. Det kommer jo fra tiden med millibar som er samme tallet. I utgangspunktet er jo hektopascal en bastard siden man vanligvis endrer i trinn på 1000, men det er den historiske koplingen til millibar som er bestemmende her.

Når det gjelder kalibrering, kan du jo legge til eller trekke fra en passende verdi selv hvis du ønsker. 2 hPa er ikke store feilen, og lufttrykket kan endre seg en del, selv over korte avstander. Vet du din egen høyde over havnivået?

Du må gjerne skrive litt når du gjør noe med lyssensoren også. Mitt håp er at flere skal ta sjansen og prøve seg, og nå er det bevist at lufttrykkføler er mulig med enkle midler.

Paxman
Posts: 50
Joined: Thu Jan 18, 2018 11:08 am

Re: Vill kunna logga lufttryck, Telldus Live!.

Post by Paxman » Sun Feb 02, 2020 3:57 pm

Barometern snurrar fortfarande på bra här nu efter några dagar, och jag börjar få en tjusig graf i Live!.

Skärmavbild 2020-02-02 kl. 16.33.24.JPG
Skärmavbild 2020-02-02 kl. 16.33.24.JPG (79.03 KiB) Viewed 103 times
Som det är nu uppdateras värdet typ var femte minut (ibland dock längre) vilket kanske är lite onödigt. Jag vet att det är "delay" som styr detta, men i koden för mitt lilla projekt finns det fem poster för "delay". Jag kan inte identifiera vad de olika "delay"-posterna gör, och jag funderar på ifall de inte krockar med varandra. Kanske skulle någon eller några av dem kunna tas bort? Så här ser koden ut, och jag har blåmarkerat "delay"-posterna.




#include "PCR800_TX.h" // Use local library

int PCR800_1_ID = 0x3F; // SensorID for sensor #1. 3F is ID. See table above.

PCR800_TX PCR800_TX(2); // Pin 7 on Arduino to radio transmitter data input pin. Change to suit your needs.


#include <Wire.h> // Här startar första tillägget av BMP280
#include <SPI.h>
#include <Adafruit_BMP280.h>

Adafruit_BMP280 bmp; // use I2C interface

Adafruit_Sensor *bmp_pressure = bmp.getPressureSensor(); // Här slutar första tillägget av BMP280

void setup(void)
{

// Serial.println(F("BMP280 Sensor event test")); // Här börjar andra tillägget av BMP280

if (!bmp.begin(0x76)) {
//Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
while (1) delay(10);
}

/* Default settings from datasheet. */
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, /* Operating Mode. */
Adafruit_BMP280::SAMPLING_X2, /* Temp. oversampling */
Adafruit_BMP280::SAMPLING_X16, /* Pressure oversampling */
Adafruit_BMP280::FILTER_X16, /* Filtering. */
Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */

// bmp_temp->printSensorDetails(); // Här slutar andra tillägget av BMP280

Serial.begin(9600);
delay(300);

PCR800_TX.setChannel(9); // 1 to 15 is valid. Seems not to be implemented by Telldus
}

void loop(void)
{
sensors_event_t temp_event, pressure_event; // Här börjar tredje tillägget av BMP280

bmp_pressure->getEvent(&pressure_event);


delay(1000); // Här slutar tredje tillägget av BMP280



// Code for sensor # 1

PCR800_TX.setSensorID(PCR800_1_ID); // Sensor ID according to the table shown above. Use hex value. (0x3F). 3F is ID.

PCR800_TX.setConvRainrate (2.54); // This set the conversion factor for the Rain rate value. Divide input value by 2.54 will convert an input value of 1 in this code
// to 0.1 mm in Telldus Live!. A conversion factor that is a multiple of 254 will convert to a metric value.
// A conversion factor that is a multiple of 10 will convert to an imperial value. A conversion factor of 1
// will not convert the input value. Do NOT use a factor = 0.


PCR800_TX.setRainRate((pressure_event.pressure) * 10); //* 10 tillaggt för att få decimalen rätt
// Input value for rain rate. 1 = 0.1mm. Max value is 25397 (2539.7 mm) if the conversion factor is 2.54.
// A larger value will result in an imperial value of more than 9999 being transmitted.
// The value in Telldus Live! will roll over and start again at zero. It makes sense to check for setRainRate =< 25397.
// Because of rounding errors the conversion from mm to inches and back is not perfect.
// You can experience some minor errors of +/- 0.1 to +/- 0.2 for this value in Telldus Live!


PCR800_TX.setConvTotalrain (pressure_event.pressure); // This set the conversion factor for the Total rain value. Divide input value by 0.254 will convert an input value of 1 in this code
// to 0.1 mm in Telldus Live!. A conversion factor that is a multiple of 254 will convert to a metric value.
// A conversion factor that is a multiple of 10 will convert to an imperial value. A conversion factor of 1
// will not convert the input value. Do NOT use a factor = 0.



PCR800_TX.setTotalRain(253999); // Input value for total rain. 1 = 0.1mm. Max value is 253999 (25399.9 mm) if the conversion factor is 0.254.
// A larger value will result in an imperial value of more than 999999 being transmitted.
// The value in Telldus Live! will roll over and start agian at zero. It makes sense to check for setTotalRain =< 253999.


PCR800_TX.setBatteryStatus(true); // true = battery level OK, false = battery level low.



PCR800_TX.buildAndSendPacket(); // The compilation of the data packet sent over radio begins.



delay(1000); // Give receiving end some time before next transmission. 5000 = 5000ms = 5 sec.

// End code for sensor # 1



delay(10000); // Time to next transmission cycle. No need to flood the receiver, so increase value after testing.
// 10000 = 10000ms = 10 sec.


} // end loop


Jag har rensat bort en del kommentarer och serialPrint-poster för att koden ska vara lite enklare att överblicka. Jag har också lagt in kommentarer för där BMP280-sensorns kod är insatt i sändarens kod. Detta för att få lite hjälp när det är dags att ge mig på ljussensor-projektet.

Gällande det "felaktiga" tryckvärdet så tror jag inte att jag kommer göra något åt det. Jag befinner mig (enligt Google Earth) på 40-45 meters höjd över havet, och enligt SMHI sjunker trycket 1 hPa var åttonde meter. Om jag räknar rätt så borde min sensor då visa runt 5 hPa lägre än vad en kalibrerad sensor gör vid havsnivån. Med icke modifierad kod visar min barometer ca 2 hPa lägre, dvs 3 hPa för mycket, vilket jag tycker är försumbart. För mig är ju heller inte exakta värdet viktigt, utan variationen över tid och om då hela kurvan ligger några hPa lägre eller högre spelar ingen roll.

När jag fått min utbytes NANO ska jag försöka mig på att få igång ljussensorn också. Tänker att jag startar en ny tråd om det, och då kommer jag lägga in en länk här för de som är intresserade.

Efter det är det research av batteriförsörjning av dessa sensorer som gäller.

tronde
Posts: 587
Joined: Thu Jan 18, 2018 11:08 am

Re: Vill kunna logga lufttryck, Telldus Live!.

Post by tronde » Mon Feb 03, 2020 4:11 pm

:wave:

PCR800_TX.setRainRate(((pressure_event.pressure)-5) * 10);

Bør gi deg mer nøyaktig trykk, men som du sier er trend det mest viktige.

***

Den første while (1) delay(10); har å gjøre med initialiseringen av BMP280. Er kun 10 ms.

Den for
Serial.begin(9600);
delay(300);
er vanlig å legge inn for å sikre at serieporten starter opp. Er 300 ms (0,3 sek).


delay(1000); // Här slutar tredje tillägget av BMP280
Er vel for at sensoren skal bli ferdig før den leses på nytt. Har trolig ingen hensikt i praksis i denne koden, men gir slik den står ett sek mer delay enn summen av de to siste.


delay(1000); // Give receiving end some time before next transmission. 5000 = 5000ms = 5 sec.
Er en del av den opprinnelige koden med flere sensorer. Var der for å få et opphold mellom hver sensor. Den kan du slette nå. Hvis den blir stående, gjør det ikke noe galt. Total forsinkelse blir ett sekund mer enn det som bestemmes av neste delay (og det for BMP280).



delay(10000); // Time to next transmission cycle. No need to flood the receiver, so increase value after testing.
// 10000 = 10000ms = 10 sec.
Det er denne som gir syklustiden. Er på 10 sekunder, noe som er kortere tid enn hva du behøver. 30000 gir 30 sek, og 60000 gir 60 sek.


Et alternativ er å slette de to siste delayene, og heller øke denne
delay(1000); // Här slutar tredje tillägget av BMP280

til noe mellom 30000 og 60000.

Bruk av delay er egentlig en litt "stygg" måte å forsinke på, men denne koden skal ikke gjøre noe annet enn å lese en sensor og sende verdien over radio med et bestemt tidsintervall, så da funker det helt fint.


***

De fem minuttene i Live!, kommer av at Telldus ikke lagrer kortere tid i et pro abb. Det er 10 min uten pro. Telldus vil reagere på en hurtigere oppdatering hvis en sensor er brukt som trigger i et event, og vanligvis ser man at sensoren oppdaterer i nettleseren selv om verdien ikke lagres.

***

Hvis du skal spare strøm, er det nok enklest med en pro mini slik som beskrevet her http://www.home-automation-community.co ... l-battery/

Den finnes også i 3V utgave. Ulempen med pro mini er at den ikke har USB-seriekonverter innebygget. Det er nevnt FTDI-adapter. Se på det som et generelt navn for den type adapter. Det er utrolig mye skrot å få tak i når man kjøper noe som er oppgitt å være FTDI, og mange av dem blir også blokkert fordi de er piratutgaver. Det står en del å lese om dette på nettet.

Den foreslåtte CP2102 er et mye bedre valg, selv om den også kan være pirat. Det er fornuftig å finne en som har DTR-pinne. Da slipper man problemet med reset før opplasting av kode. Det som står om 3,3V er viktig, men det er dessverre ikke alltid at signalpinnene på adapteret gir ut 3,3V, selv om chippen mates med det. Når det gjelder kinesere og billig elektronikk, er det nesten like mange muligheter for feil, som antallet kinesere... :shock:

Post Reply