Mini väderstation med Attiny85 (1 / 6 steg)
Steg 1: Mini väderstation med Attiny85: sändaren
Sändaren är en mycket grundläggande konfiguration av Attiny85 med en dra upp motstånd på raden reset.
En sändarmodul är kopplad till digital pin '0' och DHT11 data stift fäster vid digital stift 4.
Fäst en tråd på 17,2 cm som antenn (för en mycket bättre antenn se steg 5).
Programmet är som följer:
kommer att arbeta på Attiny85/45
RF433 = D0 stift 5
DHT11 = D4 pin 3
bibliotek
#include < dht11.h > //From Rob Tillaart
#include < Manchester.h >
dht11 DHT11;
#define DHT11PIN 4
#define TX_PIN 0 //pin där din sändare är ansluten
variabler
flyta h = 0;
flyta t = 0;
int transmit_t = 0;
int transmit_h = 0;
int transmit_data = 0;
void setup()
{
pinMode (1, ingång);
man.setupTransmit (TX_PIN, MAN_1200);
}
void loop() {
int chk = DHT11.read(DHT11PIN);
h = DHT11.humidity;
t = DHT11.temperature;
Jag vet, jag använder 3 heltal variabler här
där jag kunde använda 1
men det är bara så det är lättare att följa
transmit_h = 100 * (int) h;
transmit_t=(int) t;
transmit_data = transmit_h + transmit_t;
man.Transmit(transmit_data);
Delay(500);
}
Programvaran används Manchester koden för att skicka data.
Läser DHT11 och lagrar temperaturen och luftfuktigheten i 2 separata flöten. Som Manchester koden inte skickar flyter, men ett heltal, har jag flera alternativ:
1 - delad flötena i två heltal och skicka dem
2 - skicka varje flöte som ett heltal
3 - skicka två flötena som ett heltal
Med alternativ 1 jag måste kombinera heltalen i flyter igen i mottagaren och jag måste identifiera vilka heltal är vad, vilket gör koden lång omständlig
Med alternativet är 2 jag behöver fortfarande att identifiera vilka heltal för luftfuktighet och som för temperatur. Jag kan inte gå av sekvens ensam om ett heltal är förlorad i överföring, så jag skulle behöva skicka en identifierare kopplad till heltal.
Med alternativ 3, kan jag skicka ett heltal. Naturligtvis detta gör avläsningarna lite mindre exakt - inom 1 grad - och en kan inte sända under noll temperaturer, men det är bara en enkel kod och det finns vägar runt som. För nu är det bara om principen.
Så vad jag gör är jag förvandlas flötena till heltal och jag multiplicera luftfuktigheten med 100. Jag lägger temperaturen med multiplicerade fuktigheten.
Med tanke på att luftfuktigheten blir aldrig 100% är max jag kommer att få 9900. Tanke på att temperaturen inte kommer heller att över 100 grader, max antalet kommer att vara 99, därför flest skickar jag är 9999 och som är lätt att skilja på mottagarsidan.
Självklart min beräkning jag använda 3 heltal är overkill så det kan enkelt göras med 1 variabel. Jag ville bara göra koden lättare att följa.
koden kompileras nu som:
Binära skiss storlek: 2,836 byte (med en maximal 8192 byte)
så som passar i en Attiny 45 eller 85
Obs dht.h biblioteket jag använder är en från Rob Tillaart. Biblioteket är också lämplig för en DHT22. Jag använder version 1,08. Men Attiny85 kan ha problem att läsa en DHT22 med lägre versioner av biblioteket. Det har fått bekräftat för mig att 1,08 och 1.14 - dock jobba på en vanlig Arduino - har svårt att läsa en DHT22 på Attiny85. Om du vill använda ett DHT22 på Attiny85, använda den 1.20 versionen av detta bibliotek. Det hela ha sto gör med timing. Den 1.20 versionen av biblioteket har en snabbare läsning. (Tack för den användaren uppleva Jeroen)