Inhoudsopgave:

Mini-weerstation met Attiny85 - Ajarnpa
Mini-weerstation met Attiny85 - Ajarnpa

Video: Mini-weerstation met Attiny85 - Ajarnpa

Video: Mini-weerstation met Attiny85 - Ajarnpa
Video: BME280 weather station with Oled screen 2024, Juli-
Anonim
Mini-weerstation met Attiny85
Mini-weerstation met Attiny85
Mini-weerstation met Attiny85
Mini-weerstation met Attiny85
Mini-weerstation met Attiny85
Mini-weerstation met Attiny85

In een recente instructable beschreef Indigod0g een mini-weerstation dat redelijk goed werkt, met behulp van twee Arduino's. Misschien wil niet iedereen 2 Arduino's opofferen om vochtigheids- en temperatuurmetingen te krijgen en ik merkte op dat het mogelijk zou moeten zijn om een vergelijkbare functie uit te voeren met twee Attiny85's. Ik denk dat praten makkelijk is, dus ik kan mijn geld maar beter op mijn mond houden.

Als ik twee eerdere instructables combineer, schreef ik zelfs:

2-draads LCD-interface voor Arduino of Attiny en Gegevens ontvangen en verzenden tussen Attiny85 (Arduino IDE 1.06) dan is het meeste werk al gedaan. Moet alleen de software een beetje aanpassen.

Ik heb gekozen voor een tweedraads lcd-oplossing met een schuifregister, in plaats van een I2C LCD omdat op de Attiny het schuifregister gemakkelijker te implementeren is dan de I2C-bus. Maar… als je bijvoorbeeld een BMP180 of BMP085 druksensor wilt uitlezen, dan heb je daar sowieso I2C voor nodig dus dan kun je net zo goed een I2C LCD gebruiken. TinyWireM is een goede bibliotheek voor I2C op een Attiny (maar het vereist extra ruimte).

BOM De zender: DHT11 Attiny85 10 k weerstand 433MHz zendermodule

De ontvanger Attiny85 10k weerstand 433 MHz ontvangermodule

Het display 74LS164 schuifregister 1N4148 diode 2x1k weerstand 1x1k variabele weerstand een lcd-scherm 2x16

Stap 1: Mini-weerstation met Attiny85: de zender

Mini-weerstation met Attiny85: de zender
Mini-weerstation met Attiny85: de zender
Mini-weerstation met Attiny85: de zender
Mini-weerstation met Attiny85: de zender
Mini-weerstation met Attiny85: de zender
Mini-weerstation met Attiny85: de zender
Mini-weerstation met Attiny85: de zender
Mini-weerstation met Attiny85: de zender

De zender is een zeer eenvoudige configuratie van de Attiny85 met een pull-up weerstand op de resetlijn. Een zendermodule is bevestigd aan digitale pin '0' en de DHT11-gegevenspin wordt bevestigd aan digitale pin 4. Bevestig een draad van 17,2 cm als antenne (voor een veel betere antenne zie stap 5). De software is als volgt:

//zal werken op Attiny//RF433=D0 pin 5

//DHT11=D4 pin 3 // bibliotheken #include //Van Rob Tillaart #include dht DHT11; #define DHT11PIN 4 #define TX_PIN 0 //pin waar uw zender is aangesloten //variabelen float h=0; vlotter t=0; int verzend_t = 0; int zend_h = 0; int verzend_data = 0; void setup () { pinMode (1, INPUT); man.setupTransmit(TX_PIN, MAN_1200); } void loop() { int chk = DHT11.read11(DHT11PIN); h=DHT11.vochtigheid; t=DHT11.temperatuur; // Ik weet het, ik gebruik hier 3 integer-variabelen // waar ik 1 zou kunnen gebruiken // maar dat is gewoon zo dat het makkelijker is om te volgen transmit_h=100* (int) h; verzend_t=(int) t; transmitter_data=transmit_h+transmit_t; man.transmit(transmit_data); vertraging (500); }

De software gebruikt Manchester-code om de gegevens te verzenden. Hij leest de DHT11 uit en slaat de temperatuur en vochtigheid op in 2 aparte vlotters. Omdat de Manchester-code geen floats verzendt, maar een geheel getal, heb ik verschillende opties: - splits de floats elk in twee gehele getallen en stuur die 2- stuur elke float als een geheel getal3- stuur de twee floats als één geheel getal Met optie 1 moet ik combineren de gehele getallen drijven weer in de ontvanger en ik moet bepalen welk geheel getal wat is, waardoor de code langdradig wordt. Met optie 2 moet ik nog steeds identificeren welk geheel getal voor vochtigheid en welke voor temperatuur is. Ik kan niet alleen op volgorde gaan als er één geheel getal verloren gaat tijdens de verzending, dus ik zou een identifier moeten verzenden die aan het gehele getal is gekoppeld. Met optie 3 kan ik slechts één geheel getal verzenden. Uiteraard maakt dit de metingen wat minder nauwkeurig - binnen 1 graad - en kan men geen temperaturen onder nul sturen, maar het is gewoon een simpele code en daar zijn manieren om dat te omzeilen. Voor nu gaat het alleen om het principe. Dus wat ik doe is de drijvers omzetten in gehele getallen en ik vermenigvuldig de luchtvochtigheid met 100. Dan tel ik de temperatuur op bij de vermenigvuldigde luchtvochtigheid. Gezien het feit dat de luchtvochtigheid nooit 100% zal zijn, max. aantal dat ik zal krijgen is 9900. Gezien het feit dat de temperatuur ook niet boven de 100 graden zal zijn, zal het max aantal 99 zijn, daarom is het hoogste aantal dat ik zal verzenden 9999 en dat is gemakkelijk te scheiden aan de kant van de ontvanger. Natuurlijk mijn berekening waarin ik 3 gehele getallen gebruik, is overdreven omdat het gemakkelijk met 1 variabele kan worden gedaan. Ik wilde de code gewoon gemakkelijker te volgen maken. De code compileert nu als:

Binaire schetsgrootte: 2, 836 bytes (van een maximum van 8, 192 bytes) dus dat past in een Attiny 45 of 85. OPMERKING de dht.h-bibliotheek die ik gebruik, is die van Rob Tillaart. Die bibliotheek is ook geschikt voor een DHT22. Ik gebruik versie 1.08. De Attiny85 kan echter problemen hebben met het lezen van een DHT22 met lagere versies van de bibliotheek. Het is mij bevestigd dat de 1.08 en 1.14 - hoewel ze op een gewone Arduino werken - problemen hebben met het lezen van een DHT22 op de Attiny85. Als je een DHT22 op de Attiny85 wilt gebruiken, gebruik dan de 1.20-versie van deze bibliotheek. Het heeft allemaal te maken met timing. De 1.20-versie van de bibliotheek leest sneller. (Bedankt voor die gebruikerservaring Jeroen)

Stap 2: Mini-weerstation met Attiny85: de ontvanger

Mini-weerstation met Attiny85: de ontvanger
Mini-weerstation met Attiny85: de ontvanger

Wederom wordt de Attiny85 gebruikt in een basisconfiguratie met de Reset-pin hoog getrokken met een 10 k-weerstand. De ontvangermodule is aangesloten op digitale pin 1 (pin 6 op de chip). Het LCD-scherm is bevestigd aan digitale pinnen 0 en twee. Bevestig een draad van 17,2 cm als antenne. De code is als volgt:

#erbij betrekken

#include LiquidCrystal_SR lcd(0, 2, TWO_WIRE); #define RX_PIN 1 //= fysieke pin 6 void setup() { lcd.begin (16, 2); lcd.home(); man.setupReceive(RX_PIN, MAN_1200); man.beginReceive(); }void loop() { if (man.receiveComplete()) { uint16_t m = man.getMessage(); man.beginReceive(); lcd.print("Vochtig: "); lcd.afdruk (m/100); lcd.setCursor(0, 1); lcd.print("Temp"); lcd.afdruk (m% 100); } }

De code is vrij eenvoudig: het verzonden gehele getal wordt ontvangen en opgeslagen in variabele 'm'. Het wordt gedeeld door 100 om de vochtigheid te geven en de modulo van 100 geeft de temperatuur. Stel dat het ontvangen gehele getal 33253325/100=333325 % 100 was =25Deze code compileert als 3380 bytes en kan daarom alleen worden gebruikt met een attiny85, niet met een 45

Stap 3: Mini-weerstation met Attiny85/45: het display

Mini-weerstation met Attiny85/45: het display
Mini-weerstation met Attiny85/45: het display
Mini-weerstation met Attiny85/45: het display
Mini-weerstation met Attiny85/45: het display

Voor het display kan ik het beste naar mijn instructable verwijzen op een tweedraads display. Kortom, een gewoon 16x2 display gebruikt een schuifregister zodat het met twee digitale pinnen kan werken. mogelijk ook, maar dan moet je een I2C-protocol implementeren op de Attiny. Het Tinywire-protocol kan dat. Hoewel sommige bronnen zeggen dat dat een klok van 1 Mhz verwacht, had ik geen problemen (in een ander project) om het op 8 Mhz te gebruiken. Hoe dan ook, ik stoorde me hier niet aan en gebruikte een schuifregister.

Stap 4: Mini-weerstation met Attiny85/45: mogelijkheden/conclusies

Mini Weerstation Met Attiny85/45: Mogelijkheden/Conclusies
Mini Weerstation Met Attiny85/45: Mogelijkheden/Conclusies
Mini Weerstation Met Attiny85/45: Mogelijkheden/Conclusies
Mini Weerstation Met Attiny85/45: Mogelijkheden/Conclusies
Mini Weerstation Met Attiny85/45: Mogelijkheden/Conclusies
Mini Weerstation Met Attiny85/45: Mogelijkheden/Conclusies

Zoals gezegd heb ik dit instructable gemaakt om te laten zien dat je een mini-weerstation kunt maken met twee attiny85's (zelfs met één attiny85+1 attiny45). Het stuurt alleen vochtigheid en temperatuur, met behulp van een DHT11. De Attiny heeft echter 5 digitale pinnen om te gebruiken, 6 zelfs met wat bedrog. Daarom is het mogelijk om gegevens van meer sensoren te verzenden. In mijn project - zoals te zien op de foto's op stripboard en op een professionele PCB (OSHPark) - verzend/ontvang ik gegevens van een DHT11, van een LDR en van een PIR, allemaal met twee attiny85'sDe beperking bij het gebruik van een attiny85 als ontvanger is echter de presentatie van de gegevens in een flitsende stijl. Omdat het geheugen beperkt is: Teksten als 'Temperatuur, Vochtigheid, lichtniveau, onderwerp nadert' zullen vrij snel waardevolle geheugenruimte vullen. Toch geen reden om twee Arduino's te gebruiken om alleen temperatuur en vochtigheid te verzenden/ontvangen. Bovendien is het mogelijk om de zender in slaapstand te laten gaan en hem alleen wakker te laten worden om gegevens te verzenden, zeg om de 10 minuten en deze dus te voeden vanuit een knoopcel. Het is duidelijk dat niet alleen temperatuur- of vochtigheidsgegevens kunnen worden verzonden, maar dat er ook een reeks kleine zenders kan worden verzonden ook bodemvochtmetingen, of voeg een anemometer of een regenmeter toe

Stap 5: Mini-weerstation: de antenne

Mini-weerstation: de antenne
Mini-weerstation: de antenne

De antenne is een belangrijk onderdeel van elke 433Mhz-opstelling. Ik heb geëxperimenteerd met de standaard 17,2 cm 'staaf'-antenne en had een korte flirt met een spoelantenne. Wat het beste leek te werken, is een spoelbelaste antenne die eenvoudig te maken is. Het ontwerp is van Ben Schueler en is blijkbaar gepubliceerd in het tijdschrift 'Elektor'. Een PDF met de beschrijving van deze 'Luchtgekoelde 433 MHz Antenne' is eenvoudig te volgen. (Link verdwenen, check hier)

Stap 6: Een BMP180 toevoegen

Een BMP180. toevoegen
Een BMP180. toevoegen

Wilt u een luchtdruksensor zoals de BMP180 toevoegen? controleer mijn andere instructable daarop.

Aanbevolen: