Inhoudsopgave:
- Stap 1: Mini-weerstation met Attiny85: de zender
- Stap 2: Mini-weerstation met Attiny85: de ontvanger
- Stap 3: Mini-weerstation met Attiny85/45: het display
- Stap 4: Mini-weerstation met Attiny85/45: mogelijkheden/conclusies
- Stap 5: Mini-weerstation: de antenne
- Stap 6: Een BMP180 toevoegen
Video: Mini-weerstation met Attiny85 - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:16
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
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
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
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
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
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
Wilt u een luchtdruksensor zoals de BMP180 toevoegen? controleer mijn andere instructable daarop.
Aanbevolen:
Een Attiny85-console maken - ArduPlay: 5 stappen (met afbeeldingen)
Hoe maak je een Attiny85-console - ArduPlay: Het was als volgt: ik bladerde doelloos door YouTube-video's om te ontspannen met een kopje thee. Misschien een voetbalwedstrijd hoogtepunten of een compilatie van grappige video's? Plots kreeg ik een melding op mijn telefoon - een nieuwe video op het Electronoobs-kanaal. Ongelukkig
ATtiny85 programmeren en opstarten met USBasp: 5 stappen
ATtiny85 programmeren en opstarten met USBasp: In deze Instructable leer je precies hoe je een ATtiny85-microchip opstart en programmeert op de eenvoudigste manier die ik kon bedenken. Dit is mijn eerste Instructable, dus als je advies of tips hebt over hoe je betere gidsen kunt maken, neem dan gerust contact met ons op
Draadloze afstandsbediening met 2,4 GHz NRF24L01-module met Arduino - Nrf24l01 4-kanaals / 6-kanaals zenderontvanger voor quadcopter - RC Helikopter - RC-vliegtuig met Arduino: 5 stappen (met afbeeldingen)
Draadloze afstandsbediening met 2,4 GHz NRF24L01-module met Arduino | Nrf24l01 4-kanaals / 6-kanaals zenderontvanger voor quadcopter | RC Helikopter | Rc-vliegtuig met Arduino: een Rc-auto besturen | Quadcopter | Drone | RC vliegtuig | RC-boot, we hebben altijd een ontvanger en zender nodig, stel dat we voor RC QUADCOPTER een 6-kanaals zender en ontvanger nodig hebben en dat type TX en RX is te duur, dus we gaan er een maken op onze
Pro-mini programmeren met Uno (Arduino Basics): 7 stappen (met afbeeldingen)
Programma Pro-mini met Uno (Arduino Basics): Hallo allemaal, In deze instructable wil ik je mijn ervaring delen met mijn onlangs gekochte Arduino pro-mini en hoe ik erin slaagde om de code er voor de eerste keer naar te uploaden, met behulp van mijn oude Arduino Uno.Arduino pro-mini heeft de volgende kenmerken:Het is i
Bewegingsdetector met Blynk-meldingen (WeMos D1 Mini + HC-SR04): 4 stappen (met afbeeldingen)
Bewegingsdetector met Blynk-meldingen (WeMos D1 Mini + HC-SR04): STEM op dit project in de draadloze wedstrijd. Bedankt! Update nr. 2 - Enkele aanpassingen (versie 2.2), u kunt uw sensor (bereik en naam) rechtstreeks in de definitie instellen. Ook gebeurde het soms dat de sensor verkeerde waarden las en een melding stuurde