Stap 1: Mini weerstation met Attiny85: de zender
De zender is een zeer eenvoudige configuratie van de Attiny85 met een pull up weerstand op de reset-regel.
Een zendermodule is gekoppeld aan digitale pin '0' en de DHT11 gegevens pin hecht aan digitale pin 4.
Koppel een draad van 17,2 cm antenne (voor een veel betere antenne Zie stap 5).
De software is als volgt:
//will work on Attiny85/45 //RF433=D0 pin 5 //DHT11=D4 pin 3 // libraries #include <dht11.h> //From Rob Tillaart #include <Manchester.h> dht11 DHT11; #define DHT11PIN 4 #define TX_PIN 0 //pin where your transmitter is connected //variables float h=0; float t=0; int transmit_t = 0; int transmit_h = 0; int transmit_data = 0; void setup() { pinMode(1, INPUT); man.setupTransmit(TX_PIN, MAN_1200); } void loop() { int chk = DHT11.read(DHT11PIN); h=DHT11.humidity; t=DHT11.temperature; // I know, I am using 3 integer variables here // where I could be using 1 // but that is just so it is easier to follow transmit_h=100* (int) h; transmit_t=(int) t; transmit_data=transmit_h+transmit_t; man.transmit(transmit_data); delay(500); }
De software maakt gebruik van Manchester-code om de gegevens te verzenden.
Het leest de DHT11 en slaat de temperatuur en vochtigheid in 2 aparte praalwagens. Zoals de Manchester-code niet praalwagens, maar een geheel getal verzenden, heb ik verschillende opties:
1 - de praalwagens gesplitst door elke twee gehele getallen en stuur die
2 - Stuur elke zweven als een geheel getal
3 - Stuur de twee drijvers als één geheel getal
Met de optie 1 ik moet combineren van de gehele getallen in drijvende komma's weer in de ontvanger en ik heb om te identificeren welke geheel getal is wat, waardoor de code lange adem
Met optie is 2 die ik nog moet om te identificeren welke geheel getal voor vochtigheid en die voor de temperatuur. Ik kan niet gaan door reeks alleen in het geval dat een geheel getal is verloren in transmissie, dus ik zou moeten sturen van een id die is gekoppeld aan het gehele getal.
Met optie 3, kan ik slechts één getal sturen. Natuurlijk dit maakt de lezingen een beetje minder nauwkeurig - binnen 1 graad - en men kan niet zenden onder nul temperaturen, maar het is gewoon een eenvoudige code en er zijn manieren rond dat. Voor nu is het enkel over het principe.
Dus wat ik doe is ik de praalwagens omzetten in gehele getallen en ik de vochtigheid met 100 vermenigvuldigen. Dan voeg ik de temperatuur aan de vermenigvuldigde vochtigheid.
Gezien het feit dat de luchtvochtigheid nooit 100 zullen % er max die ik krijgt 9900. Gezien het feit dat de temperatuur niet boven de 100 graden, het max aantal zullen 99, dus het hoogste aantal dat ik zal sturen is 9999 en die gemakkelijk kan worden gescheiden op de ontvanger kant is.
Natuurlijk mijn berekening waarin ik gebruik 3 gehele getallen is overkill als het kan gemakkelijk worden gedaan met 1 variabele. Ik wilde alleen maar om de code gemakkelijker te volgen.
de code wordt nu gecompileerd als:
Binaire schets grootte: 2,836 bytes (van een maximaal 8.192 byte)
dus die past in een Attiny 45 of 85
Opmerking de bibliotheek van de dht.h ik gebruik is die van Rob Tillaart. De bibliotheek is ook geschikt voor een DHT22. Ik gebruik versie 1.08. Maar de Attiny85 kunnen hebben problemen lezen van een DHT22 met lagere versies van de bibliotheek. Het heeft mij bevestigd dat de 1.08 en 1.14 - wel werken op een regelmatige Arduino - hebben moeite het lezen van een DHT22 op de Attiny85. Als u gebruiken een DHT22 op de Attiny85 wilt, de 1.20 versie van deze bibliotheek gebruiken. Het is allemaal ha sto doen met de timing. De 1.20 versie van de bibliotheek heeft een sneller lezen. (Bedankt voor die gebruiker ervaring Jeroen)