Anemometre de bricolaj (pentru copiii din grupa pregătitoare). Anemometru de casă

A existat o sarcină de a asambla un anemometru pentru un proiect, astfel încât să fie posibilă preluarea datelor de pe un computer printr-o interfață USB. Articolul se va concentra mai mult pe anemometrul în sine decât pe sistemul de procesare a datelor din acesta:

1. Componente

Deci, pentru fabricarea produsului, au fost necesare următoarele componente:
Mouse cu bile Mitsumi — 1 buc.
Minge de ping-pong — 2 buc.
O bucată de plexiglas de mărimea potrivită
Sârmă de cupru cu o secțiune transversală de 2,5 mm2 - 3 cm
Reîncărcare stilou — 1 buc.
Baton de bomboane Chupa Chups - 1 buc.
Clemă pentru cablu — 1 buc.
Butoi tubular din alamă 1 buc.

2. Realizarea rotorului

Pe un butoi de alamă au fost lipite 3 bucăți de sârmă de cupru de 1 cm lungime fiecare la un unghi de 120 de grade. În orificiul butoiului, am lipit un suport de la un jucător chinez cu un fir la capăt.

Am tăiat tubul din bomboane în 3 părți de aproximativ 2 cm lungime.

Am tăiat 2 bile în jumătate și, folosind șuruburi mici de la același jucător și lipici de polistiren (cu un pistol de lipici), am atașat jumătățile de bile de tuburile de acadea.

Am pus tuburile cu jumătățile de minge pe bucățile de sârmă lipite și am fixat totul deasupra cu lipici.

3. Fabricarea piesei principale

Elementul portant al anemometrului este o tijă metalică dintr-un pix. În partea inferioară a tijei (unde a fost introdus dopul), am introdus discul de la mouse (encoder). În designul mouse-ului în sine, partea inferioară a codificatorului s-a sprijinit de corpul mouse-ului, formând un lagăr punctual, a existat unsoare, astfel încât encoderul s-a întors ușor. Dar a fost necesar să se fixeze partea superioară a tijei, pentru aceasta am ridicat o bucată de plastic potrivită cu un orificiu exact cu diametrul tijei (o astfel de bucată a fost tăiată din sistemul de extensie a căruciorului CD-ROMa). A ramas de rezolvat problema pentru ca tija codificatorului sa nu cada din lagarul punctual, asa ca am lipit cateva picaturi de lipit pe tija direct in fata elementului de retinere. Astfel, tija s-a rotit liber în structura de reținere, dar nu a căzut din rulment.

Motivul pentru care a fost ales circuitul codificator este următorul: toate articolele despre anemometrele de casă de pe Internet au descris fabricarea acestora pe baza unui motor DC de la un player, CD-ROM sau alt produs. Problema cu astfel de dispozitive este, în primul rând, calibrarea lor și precizia scăzută la viteze scăzute ale vântului și, în al doilea rând, caracteristica neliniară a vitezei vântului în raport cu tensiunea de ieșire, adică. pentru a transfera informații pe un computer, există anumite probleme, trebuie să calculați legea variației tensiunii sau curentului de la viteza vântului. Când utilizați un encoder, nu există o astfel de problemă, deoarece dependența este liniară. Precizia este cea mai mare, deoarece encoderul dă aproximativ 50 de impulsuri pe rotație a axei anemometrului, dar circuitul convertorului este ceva mai complicat, în care există un microcontroler care numără numărul de impulsuri pe secundă pe unul dintre porturi și ieșiri. această valoare la portul USB.

4. Testare și calibrare

Pentru calibrare a fost folosit un anemometru de laborator.

O stație meteorologică obișnuită de marcă de uz casnic sau făcută în casă măsoară două temperaturi - umiditatea (în cameră și în exterior), presiunea atmosferică și, în plus, are un ceas cu calendar. Cu toate acestea, o stație meteo adevărată are mult mai mult - un senzor de radiație solară, un pluviometru și toate acestea, în general, sunt necesare numai în scopuri profesionale, cu o singură excepție. Un contor de vânt (viteza și, cel mai important, direcția) este un plus foarte util pentru o casă de țară. Mai mult decât atât, senzorii de vânt de marcă sunt destul de scumpi chiar și pe Ali Baba și are sens să te uiți la soluții de casă.

Trebuie să spun imediat că dacă aș fi știut dinainte cât de mult lucru manual și bani cheltuiți pe experimente ar avea ca rezultat ideea mea, poate nu aș fi început. Dar curiozitatea a depășit, iar cititorii acestui articol au șansa de a evita acele capcane de care a trebuit să mă împiedic.

Pentru măsurători ale vitezei vântului(anemometrie) există sute de moduri, dintre care principalele sunt:

sarma fierbinte,
- mecanic - cu elice (mai precis, rotor) sau rotor orizontal cupa (anemometru cupa clasic).Măsurarea vitezei în aceste cazuri echivalează cu măsurarea vitezei axei pe care este fixată elicea sau rotorul.
- precum și cu ultrasunete, care combină măsurători ale vitezei și direcției.
Pentru măsurători de direcție mai puține moduri:
- mentionat cu ultrasunete;
- giroueta mecanica cu eliminarea electronica a unghiului de rotatie. Există, de asemenea, multe moduri diferite de a măsura unghiul de rotație: optic, rezistiv, magnetic, inductiv, mecanic. Apropo, puteți monta pur și simplu o busolă electronică pe axul girouielor - acestea sunt doar modalități fiabile și simple (pentru repetarea „genunchiului”) de a transmite citiri de pe o axă care se rotește haotic. Prin urmare, alegem în continuare metoda optică tradițională.

Când repetați oricare dintre aceste metode pe cont propriu, ar trebui să aveți în vedere cerințele pentru consumul minim de energie și expunerea non-stop (sau poate pe tot parcursul anului?) la soare și ploaie. Senzorul de vânt nu poate fi plasat sub acoperiș la umbră - dimpotrivă, ar trebui să fie cât mai departe posibil de toți factorii de interferență și „deschis pentru toate vânturile”. Locația ideală este coama acoperișului unei case sau, în cel mai rău caz, un hambar sau foișor, departe de alte clădiri și copaci. Astfel de cerințe presupun o sursă de alimentare autonomă și, evident, un canal de transmisie de date fără fir. Aceste cerințe se datorează unor „clopote și fluiere” ale designului, care este descris mai jos.

Despre consumul minim de energie

Apropo, cât este consumul minim de energie? Pe baza bateriilor AA obișnuite de uz casnic, consumul mediu al circuitului ar trebui, în mod ideal, să nu depășească 1-2 mA. Calculați singuri: capacitatea unei celule alcaline decente AA este de aproximativ 2,5-3 Ah, adică un circuit cu consumul indicat va funcționa din ea pentru aproximativ 1500-2500 de ore, sau 2-3 luni. În principiu, acest lucru nu este prea mult, dar relativ acceptabil - nu puteți face mai puțin: fie dați-vă bateriile fără probleme, fie va trebui să utilizați baterii care vor trebui încărcate chiar mai des decât schimbarea bateriilor. Din acest motiv, atunci când elaborăm un astfel de circuit, suntem obligați să prindem orice firimituri: modul obligatoriu de economisire a energiei, circuitele atent gândite și succesiunea acțiunilor din program. Mai departe vom vedea că în designul final, încă nu am îndeplinit cerințele necesare și a trebuit să folosesc bateria.


O poveste informativă despre cum am încercat să reproduc cea mai modernă și mai avansată dintre metode - ultrasunetele, și nu a reușit, voi spune altădată. Toate celelalte metode implică măsurarea separată a vitezei și direcției, așa că a trebuit să blocăm doi senzori. După ce am studiat teoretic anemometrele cu fir fierbinte, mi-am dat seama că nu vom putea achiziționa un element sensibil gata făcut de nivel amator (sunt disponibile pe piața occidentală!), Ci să le inventați singur - să vă implicați în următoarea cercetare și dezvoltare cu pierderea corespunzătoare de timp și bani. Prin urmare, după câteva gânduri, am decis să fac un design unificat pentru ambii senzori: un anemometru cupa cu măsurare optică a vitezei de rotație și o giruetă cu citire electronică a unghiului de rotație pe baza unui disc codificator (encoder).

Design de senzori

Avantajul senzorilor mecanici este că acolo nu este nevoie de cercetare și dezvoltare, principiul este simplu și clar, iar calitatea rezultatului depinde doar de acuratețea designului atent gândit.

Așa părea teoretic, în practică a rezultat o grămadă de lucrări mecanice, dintre care unele trebuiau comandate lateral, din cauza lipsei de strung și mașini de frezat la îndemână. Trebuie să spun imediat că nu am regretat niciodată că de la bun început m-am bazat pe o abordare capitală și nu am îngrădit construcțiile din materiale improvizate.

Pentru o giruetă și un anemometru, sunt necesare următoarele piese, care trebuiau comandate de la un strungar și un morar (cantitatea și materialul sunt indicate pentru ambii senzori simultan):

Osiile, remarcăm, sunt neapărat învârtite la strung: este aproape imposibil să faci o axă cu vârful exact în centru pe un genunchi. Iar plasarea vârfului exact de-a lungul axei de rotație aici este factorul determinant pentru succes. În plus, axa trebuie să fie perfect dreaptă, nu sunt permise abateri.

Senzor mecanic de direcție a vântului - giruetă electronică

Baza girouiței (precum și senzorul de viteză de mai jos) este un suport în formă de U din duraluminiu D-16, prezentat în desenul din stânga sus. O bucată de PTFE este presată în adâncitura inferioară, în care se realizează succesiv o adâncitură în trepte cu burghie de 2 și 3 mm. În această locașă este introdusă o axă cu un capăt ascuțit (pentru o giruetă - din alamă). De sus, trece liber printr-un orificiu de 8 mm. Deasupra acestui orificiu, o bucată dreptunghiulară din același fluoroplastic de 4 mm grosime este atașată la suport cu șuruburi M2, astfel încât să se suprapună orificiului. S-a făcut o gaură în PTFE exact de-a lungul diametrului axei de 6 mm (situat exact de-a lungul axei comune a găurilor - vezi desenul de asamblare de mai jos). Fluoroplasticul de sus și de jos joacă aici rolul lagărelor lipite.


Axa din punctul de frecare față de fotoplastic poate fi lustruită, iar zona de frecare poate fi redusă prin scufundarea unei găuri în fluoroplastic. ( Vezi pe acest subiect mai jos UPD din 13/09/18 și 05/06/19). Pentru o giruetă, aceasta nu joacă un rol special - o anumită „retardare” este chiar utilă pentru el, iar pentru un anemometru va trebui să încercați să minimizați frecarea și inerția.

Acum despre eliminarea unghiului de rotație. Clasicul codificator gri cu 16 poziții în cazul nostru arată astfel:

Dimensiunea discului a fost aleasă pe baza condiției de izolare optică fiabilă a perechilor emițător-receptor unul față de celălalt. Cu această configurație, fantele de 5 mm lățime sunt de asemenea distanțate la 5 mm, iar perechile optice sunt distanțate exact la 10 mm. Dimensiunile suportului de care este atașată girouța au fost calculate exact pe baza unui diametru al discului de 120 mm. Toate acestea, desigur, pot fi reduse (mai ales dacă alegeți LED-uri și fotodetectoare cu cel mai mic diametru posibil), dar a fost luată în considerare complexitatea fabricării codificatorului: s-a dovedit că morarii nu întreprind o muncă atât de delicată, prin urmare trebuia tăiat manual cu o pila cu ac. Și aici, cu cât dimensiunea este mai mare, cu atât rezultatul este mai fiabil și cu atât mai puține bătăi de cap.

Desenul de ansamblu de mai sus arată modul în care discul este atașat la ax. Un disc atent centrat este atașat cu șuruburi M2 la manșonul caprolon. Bucșa este plasată pe axă astfel încât spațiul din partea de sus să fie minim (1-2 mm) - astfel încât axa să se rotească liber în poziția normală, iar când este răsturnat, vârful să nu cadă din priză la partea de jos. Blocurile de fotodetectoare și emițători sunt atașate la suportul din partea de sus și de jos a discului, mai precis despre designul lor de mai jos.

Întreaga structură este plasată într-o carcasă din plastic (ABS sau policarbonat) de 150×150×90 mm. Asamblat (fără capac și giruetă), senzorul de direcție arată astfel:

Rețineți că direcția de nord selectată este marcată cu o săgeată și va trebui respectată la reinstalarea senzorului.

Giruta reală este atașată la partea superioară a axei. Se realizează pe baza aceleiași axe de alamă, în tăietura pe partea tocită a căreia este lipită o tijă de tablă de alamă. La capătul ascuțit, un fir M6 este tăiat la o anumită lungime și o contragreutate rotundă turnată din plumb este fixată pe el cu ajutorul piulițelor:

Sarcina este concepută astfel încât centrul de greutate să cadă exact pe punctul de atașare (prin deplasarea acestuia de-a lungul firului, puteți obține un echilibru perfect). Giruta se fixează pe axă folosind un șurub M3 din inox, care trece printr-un orificiu din axa giruzei și se înșurubează în filetul tăiat pe axa de rotație (șurubul de fixare este vizibil în fotografia de mai sus). Pentru o orientare precisă, partea superioară a axei de rotație are o adâncitură semicirculară în care se află axa girouiței.

Senzor de viteză a vântului - anemometru cu ceașcă de bricolaj

După cum ați înțeles deja, baza pentru senzorul de viteză în scopul unificării a fost aleasă la fel ca și pentru girouța. Dar cerințele de proiectare aici sunt oarecum diferite: pentru a reduce pragul de pornire, anemometrul ar trebui să fie cât mai ușor posibil. Prin urmare, în special, axa pentru aceasta este realizată din duraluminiu, discul cu găuri (pentru măsurarea vitezei de rotație) este redus în diametru:

În timp ce un encoder Gray pe patru biți necesită patru optocuptoare, un senzor de viteză are nevoie doar de unul. 16 găuri sunt găurite de-a lungul circumferinței discului la o distanță egală, astfel încât o rotație a discului pe secundă este echivalentă cu 16 herți a frecvenței provenite de la optocupler (sunt posibile mai multe găuri, sunt posibile mai puține - singura întrebare este: scară de recalculare și economii de energie pentru emițători).

Un senzor auto-realizat se va dovedi în continuare destul de dur (pragul de pornire este de cel puțin jumătate de metru pe secundă), dar poate fi redus doar dacă designul este schimbat radical: de exemplu, puneți o elice în loc de o placă turnantă de ceașcă. Într-un platou rotativ cu cupe, diferența de forțe de rezistență la curgere care determină cuplul este relativ mică - se realizează numai datorită formei diferite a suprafeței care întâlnește fluxul de aer care se apropie (prin urmare, forma cupelor ar trebui să fie la fel de raționalizată ca posibil - în mod ideal, aceasta este o jumătate de ou sau o minge). Elicea are un cuplu mult mai mare, poate fi făcută mult mai ușoară și, în sfârșit, fabricarea în sine este mai simplă. Dar elicea trebuie instalată în direcția fluxului de aer - de exemplu, plasând-o la capătul aceleiași giruete.

Întrebarea întrebărilor în același timp: cum să transmiteți citirile de la un senzor care se rotește aleatoriu în jurul unei axe verticale? Nu am putut să o rezolv și, judecând după faptul că modelele profesionale de cupe sunt încă larg răspândite, nu se rezolvă în niciun caz cu o jumătate de lovitură (nu ținem cont de anemometrele de mână - acestea sunt orientate manual în funcție de aer. curgere).

Versiunea mea a anemometrului cu cupă se bazează pe un disc laser. Vederea de sus și de jos este afișată în fotografie:



Cupele sunt realizate din fundul sticlelor de apă pentru bebeluși „Agusha”. Fundul este tăiat cu grijă și toate trei - la aceeași distanță, astfel încât să aibă greutate egală, încălzite local în centru (în niciun caz nu încălziți totul - se va deforma ireversibil!) Și partea din spate a mânerului de lemn de la pilă se îndoaie spre exterior pentru a-l face mai raționalizat. Veți repeta - aprovizionați cu sticle mai mari, din cinci sau șase bucăți probabil veți putea face trei căni mai mult sau mai puțin identice. În cupele fabricate, se face o fantă pe lateral și sunt fixate de-a lungul perimetrului discului la 120 ° unul față de celălalt, folosind un adeziv-etanșant impermeabil. Discul este strict centrat față de axă (am făcut asta cu ajutorul unei șaibe metalice incluse) și se fixează pe manșonul caprolon cu șuruburi M2.

Proiectare generală și instalare de senzori

Ambii senzori, așa cum am menționat deja, sunt plasați în carcase de plastic de 150×150×90 mm. Alegerea materialului carcasei trebuie abordată cu atenție: ABS sau policarbonatul au o rezistență suficientă la intemperii, dar polistirenul, plexiglasul și cu atât mai mult polietilena, cu siguranță nu vor funcționa aici (și va fi, de asemenea, dificil să le vopsiți pentru a le proteja de soare). ). Dacă nu este posibil să achiziționați o cutie de marcă, este mai bine să lipiți singur carcasa din folie de fibră de sticlă și apoi să o vopsiți pentru a o proteja de coroziune și pentru a-i oferi un aspect estetic.

În capac se face o gaură de 8-10 mm exact în punctul de ieșire a axei, în care se lipește un con de plastic cu același adeziv-etanșant, tăiat din gura de scurgere dintr-o cutie de pulverizare cu etanșant de construcție sau adeziv:

Pentru a centra conul de-a lungul axei, fixați o bucată de lemn din partea inferioară a capacului cu o clemă, marcați centrul exact pe el și mergeți puțin mai adânc cu un burghiu de 12 mm, făcând o adâncitură inelară în jurul găurii. Conul trebuie să intre exact acolo, după care poate fi acoperit cu lipici. În plus, îl puteți fixa în poziție verticală pentru timpul solidificării cu un șurub M6 cu o piuliță.

Senzorul de viteză însuși acoperă axa cu acest con ca o umbrelă, împiedicând pătrunderea apei în carcasă. Pentru o giruetă, merită să plasați suplimentar un manșon deasupra conului, care va închide decalajul dintre axă și con de la fluxul direct de apă (vezi fotografia de mai jos a vederii generale a senzorilor).

Firele de la optocuple sunt conectate la un conector D-SUB separat (vezi fotografia senzorului de direcție de mai sus). Piesa de împerechere cu cablul este introdusă printr-un orificiu dreptunghiular din baza carcasei. Orificiul este apoi acoperit cu un capac cu o fantă pentru cablu, care împiedică căderea conectorului. Suporturile durale sunt înșurubate la baza carcasei pentru fixare. Configurația lor depinde de locația senzorilor.

Când sunt asamblați, ambii senzori arată astfel:

Aici sunt prezentate deja instalate la locul lor - pe creasta foișorului. Vă rugăm să rețineți că locașurile pentru șuruburile de fixare a capacului sunt protejate de apă cu dopuri de cauciuc umed. Senzorii sunt instalați strict orizontal în funcție de nivel, pentru care a fost necesar să se utilizeze căptușeli din bucăți de linoleum.

Partea electronica

Stația meteo în ansamblu constă din două module: o unitate la distanță (care deservește ambii senzori de vânt și, de asemenea, preia citiri de la un senzor extern de temperatură-umiditate) și modulul principal cu afișaje. Unitatea de la distanță este echipată cu un transmițător fără fir pentru trimiterea datelor instalat în interiorul acesteia (antena iese din lateral). Modulul principal primește date de la unitatea de la distanță (receptorul este plasat pe un cablu într-o unitate separată pentru ușurința orientării) și preia, de asemenea, citiri de la senzorul intern de temperatură-umiditate și afișează toate acestea pe afișaje. O componentă separată a unității principale este un ceas cu calendar, care, pentru confortul configurației generale a stației, este deservit de un controler Arduino Mini separat și are propriile afișaje.

Modul de la distanță și circuitul de măsurare al senzorilor de vânt

LED-urile IR AL-107B au fost alese ca fotoemițători. Aceste LED-uri vintage, desigur, nu sunt cele mai bune din clasa lor, dar au un corp în miniatură cu un diametru de 2,4 mm și sunt capabile să treacă curent până la 600 mA pe impuls. Apropo, în timpul testelor, s-a dovedit că o probă din acest LED în jurul anului 1980 de eliberare (într-o carcasă roșie) are o eficiență de aproximativ două ori mai mare (exprimată în intervalul de funcționare fiabilă a fotodetectorului) decât specimenele moderne achiziționate la Chip. -Adanci (au corpul transparent galben-verzui). Este puțin probabil ca cristalele să fie mai bune în 1980 decât sunt acum, deși ce naiba nu glumește? Poate, totuși, problema se află în unghiuri de împrăștiere diferite în ambele modele.

Un curent continuu de aproximativ 20 mA a fost trecut prin LED-ul din senzorul de viteză (rezistor de 150 Ohm când este alimentat de 5 volți), iar în senzorul de direcție - un curent pulsat (meandru cu un ciclu de lucru de 2) de aproximativ 65 mA ( aceiași 150 Ohm atunci când este alimentat de 12 volți). Curentul mediu printr-un LED al senzorului de direcție este de aproximativ 33 mA, în total prin patru canale - aproximativ 130 mA.

Ca fotodetectori s-au ales fototranzistoare L-32P3C într-un pachet cu diametrul de 3 mm. Semnalul a fost preluat de la un colector încărcat cu o rezistență de 1,5 sau 2 kOhm de la o sursă de 5 V. Acești parametri au fost aleși astfel încât la o distanță de ~ 20 mm între emițător foto și receptor, un semnal logic de dimensiune completă la 5 -nivelurile de volți fără amplificare suplimentară ar ajunge imediat la intrarea controlerului. Curenții figurați aici vă pot părea disproporționat de mari, pe baza cerinței minime de putere menționate mai sus, dar după cum veți vedea, aceștia apar în fiecare ciclu de măsurare pentru maximum câteva milisecunde, astfel încât consumul total să rămână mic.

La baza montării receptoarelor și emițătorilor au fost secțiunile canalului de cablu (văzute în fotografia senzorilor de mai sus), decupate astfel încât să formeze „urechi” la bază pentru montarea pe suport. Pentru fiecare dintre aceste tăieturi, de capacul de blocare a fost lipită din interior o placă de plastic, egală ca lățime cu lățimea canalului. LED-urile și fototranzistoarele au fost fixate la distanța necesară în găurile găurite în această placă, astfel încât cablurile să fie în interiorul canalului, iar numai umflăturile de la capătul carcasei să iasă în afară. Concluziile sunt lipite în conformitate cu diagrama (vezi mai jos), concluziile externe sunt făcute cu tăieturi dintr-un fir flexibil multicolor. Rezistoarele pentru emițătorii senzorului de direcție sunt de asemenea plasate în interiorul canalului, din acestea se trage o concluzie generală. După dezlipire, capacul se fixează, toate fantele sunt sigilate cu plastilină și, în plus, cu bandă adezivă, care închide orificiul din partea opusă cablurilor, iar întreaga structură este umplută cu epoxid. Concluziile externe, după cum puteți vedea în fotografia senzorilor, sunt transmise la blocul de borne fixat pe spatele suportului.

schema circuitului Unitatea de procesare a senzorului de vânt arată astfel:

Despre de unde provine puterea de 12-14 volți, vezi mai jos. Pe lângă componentele indicate în diagramă, unitatea de la distanță conține un senzor de temperatură-umiditate, care nu este prezentat în diagramă. Divizorul de tensiune conectat la terminalul A0 al controlerului este proiectat pentru a controla tensiunea sursei de alimentare în scopul înlocuirii la timp. LED-ul conectat la pinul tradițional 13 (pinul 19 al carcasei DIP) este super luminos, pentru strălucirea sa normală, neorbitoare, este suficientă o fracțiune de miliamp de curent, ceea ce este asigurat de valoarea neobișnuit de mare a lui 33. rezistor kΩ.

Circuitul folosește un controler Atmega328 gol într-un pachet DIP, programat prin Uno și instalat pe o priză. Astfel de controlere cu un bootloader Arduino deja scris sunt vândute, de exemplu, în Chip-Dip (sau puteți scrie singur bootloader-ul). Este convenabil să programați un astfel de controler într-un mediu familiar, dar, lipsit de componente de pe placă, este, în primul rând, mai economic și, în al doilea rând, ocupă mai puțin spațiu. Un mod de economisire a energiei cu drepturi depline ar putea fi obținut scăpând și de bootloader-ul (și, în general, scriind tot codul în assembler :), dar aici acest lucru nu este foarte relevant, iar programarea este inutil de complicată.

În diagramă, dreptunghiuri gri au încercuit componentele legate separat de canalele de viteză și direcție. Luați în considerare funcționarea schemei în ansamblu.

Funcționarea controlerului în ansamblu este controlată de temporizatorul WDT activat în modul de întrerupere a apelului. WDT trezește controlerul din modul de repaus la intervale stabilite. În cazul în care cronometrul este resetat în întreruperea apelată, nu există repornire de la zero, toate variabilele globale rămân la valorile lor. Acest lucru vă permite să acumulați date de la trezire la trezire și, la un moment dat, să le procesați - de exemplu, să faceți o medie.

La începutul programului se fac următoarele declarații de biblioteci și variabile globale (pentru a nu aglomera textul exemplelor deja ample, tot ce ține de senzorul de temperatură-umiditate este eliberat aici):

#include #include #include . . . . . #define ledPin 13 //LED pin (PB5 pin 19 ATmega) #define IR_Pin 10 //IRLU control tranzistor (PB2 pin 16 Atmega) #define in_3p 9 //Receiver input bit 3 #define in_2p 8 //Receiver input bit 2 # define in_1p 7 //bit de intrare receptor 1 #define in_0p 6 //bit de intrare receptor 0 #define IR_PINF 5 //(PD5,11) ieșire pentru frecvență LED IR #define IN_PINF 4 //(PD4,6) intrare de detectare a frecvenței volatile unsigned long ttime = 0; //Perioada de activare a senzorului float ff; //valorile frecvenței senzorului de viteză pentru medierea mesajului de caracter; //mesaj trimis byte count=0;//counter int batt; //a face o medie a octetului bateriei wDir; // matrice de direcții ale vântului byte wind_Gray=0; //octetul codului direcției vântului
Următoarele proceduri sunt utilizate pentru a iniția modul de repaus și WDT (trezire la fiecare 4 secunde):

// pune sistemul în stare de repaus void system_sleep() ( ADCSRA &= ~(1<< ADEN); //экв. cbi(ADCSRA,ADEN); выключим АЦП set_sleep_mode(SLEEP_MODE_PWR_DOWN); // режим сна sleep_mode(); // система засыпает sleep_disable(); // система продолжает работу после переполнения watchdog ADCSRA |= (1 << ADEN); /экв. sbi(ADCSRA,ADEN); включаем АЦП } //**************************************************************** // ii: 0=16ms, 1=32ms,2=64ms,3=128ms,4=250ms,5=500ms // 6=1 sec,7=2 sec, 8=4 sec, 9= 8sec void setup_watchdog(int ii) { byte bb; if (ii >9) ii=9; bb=ii & 7; dacă (ii > 7) bb|= (1<<5); //в bb - код периода bb|= (1<Senzorul de viteză emite frecvența de întrerupere a canalului optic, ordinul de mărime este unități-zeci de herți. Este mai economic și mai rapid să măsurați o astfel de valoare după o perioadă (acesta a fost subiectul publicației autorului „Evaluarea metodelor de măsurare a frecvențelor joase pe Arduino”). Aici, se alege o metodă prin funcția modificată pulseInLong(), care nu leagă măsurarea la anumite ieșiri ale controlerului (textul funcției periodInLong() poate fi găsit în publicația specificată).

În funcția setup(), direcțiile pinului sunt declarate, biblioteca transmițătorului de 433 MHz și timer-ul watchdog sunt inițializate (linia pentru IN_PINF este, în principiu, superfluă și inserată pentru memorie):

Void setup() ( pinMode(IR_PINF, OUTPUT); //la ieșire pinMode(IN_PINF, INPUT); //detectarea frecvenței de ieșire la intrarea pinMode(13, OUTPUT); //LED vw_setup(1200); // Viteza conexiunii VirtualWire vw_set_tx_pin(2); //D2, PD2(4) Pin de transfer VirtualWire // Serial.begin(9600); // Port serial de monitorizat la depanare setup_watchdog(8); //WDT perioada 4 c wdt_reset(); )
În cele din urmă, în bucla principală a programului, citim mai întâi tensiunea de fiecare dată când ne trezim (la fiecare 4 secunde) și calculăm frecvența senzorului de viteză a vântului:

Void loop() ( wdt_reset(); // reseta cronometrul digitalWrite(ledPin, HIGH); // aprinde LED-ul pentru a controla batt=analogRead(0); // citește și salvează codul curent al bateriei /*=== frecvență === = */ digitalWrite(IR_PINF, HIGH); //porniți LED-ul IR al senzorului de viteză float f=0; //variabilă pentru frecvența ttime=periodInLong(IN_PINF, LOW, 250000); //așteptați 0,25 sec // Serial. println(ttime); //pentru control în timpul depanării if (ttime!=0) (//în cazul lipsei frecvenței f = 1000000/float(ttime);) //calculați frecvența semnalului în Hz digitalWrite(IR_PINF, LOW); //opriți LED-ul IR ff=f; //salvați valoarea calculată într-o matrice. . . . . .
Timpul de ardere al LED-ului IR (consumând, să vă reamintesc, 20 mA) aici, după cum puteți vedea, va fi maxim în absența rotației discului senzorului și este de aproximativ 0,25 secunde în această condiție. Frecvența minimă măsurabilă ar fi astfel 4 Hz (un sfert de rotație a discului pe secundă cu 16 găuri). După cum s-a dovedit la calibrarea senzorului (vezi mai jos), aceasta corespunde unei viteze a vântului de aproximativ 0,2 m/s. Subliniem că aceasta este valoarea minimă măsurabilă a vitezei vântului, dar nu rezoluția și nu pragul de pornire (care va fie mult mai mare). În prezența frecvenței (adică atunci când senzorul se rotește), timpul de măsurare (și, în consecință, timpul de ardere a LED-ului, adică consumul de curent) va scădea proporțional, iar rezoluția va crește.

Urmează proceduri care se efectuează la fiecare a patra trezire (adică la fiecare 16 secunde). Din cele patru valori acumulate, transmitem valoarea frecvenței senzorului de viteză nu media, ci cea maximă - după cum a arătat experiența, aceasta este o valoare mai informativă. Pentru comoditate și uniformitate, fiecare dintre cantități, indiferent de tipul său, este convertită într-un număr întreg pozitiv cu o dimensiune de 4 zecimale înainte de transmitere. Variabila numărare ține evidența numărului de treziri:

//la fiecare 16 secunde facem media bateriei si determinam valoarea maxima a //frecventei din 4 valori: if (count==3)( f=0; //frecvency value for (byte i=0; i)<4; i++) if (fUrmează definiția codului gri al direcției. Aici, pentru a reduce consumul, în loc să fie în mod constant pe LED-urile IR, pe toate cele patru canale se aplică simultan o frecvență de 5 kHz printr-un tranzistor cheie cu efect de câmp folosind funcția ton (). Detectarea prezenței unei frecvențe pe fiecare dintre cifre (pini in_0p - in_3p) se realizează printr-o metodă asemănătoare anti-sarituri la citirea indicațiilor unui buton apăsat. Mai întâi, în buclă, așteptăm să vedem dacă ieșirea este mare și apoi o verificăm după 100 µs. 100 µs este o jumătate de perioadă a unei frecvențe de 5 kHz, adică dacă există o frecvență cel puțin din a doua oară, vom ajunge din nou la un nivel ridicat (pentru orice eventualitate, repetăm ​​de patru ori) și asta înseamnă că este cu siguranta acolo. Repetăm ​​această procedură pentru fiecare dintre cei patru biți ai codului:

/* ===== Wind Grey ==== */ //direcție: ton (IR_Pin,5000);//frecvență 5 kHz la tranzistor boolean da = fals; octet i=0; while(!yes)( //cifra 3 i++; stare booleană1 = (digitalRead(in_3p)&HIGH); delayMicroseconds(100); // 100 microsecunde întârziere da=(state1 & !digitalRead(in_3p)); dacă (i> 4 ) break; //încercați de patru ori) dacă (da) wDir=1; else wDir=0; da = fals; i=0; while(!yes)( //cifra 2 i++; stare booleană1 = (digitalRead(in_2p)&HIGH); delayMicroseconds(100); // 100 microsecunde întârziere da=(state1 & !digitalRead(in_2p)); dacă (i> 4 ) break; //încercați de patru ori) dacă (da) wDir=1; else wDir=0; da = fals; i=0; while(!yes)( //bit 1 i++; boolean state1 = (digitalRead(in_1p)&HIGH); delayMicroseconds(100); // 100 microsecunde întârziere da=(state1 & !digitalRead(in_1p)); dacă (i> 4 ) break; //încercați de patru ori) dacă (da) wDir=1; else wDir=0; da = fals; i=0; while(!yes)( //bit 0 i++; stare booleană1 = (digitalRead(in_0p)&HIGH); delayMicroseconds(100); // 100 microsecunde întârziere da=(state1 & !digitalRead(in_0p)); dacă (i> 4 ) break; //încercați de patru ori) dacă (da) wDir=1; else wDir=0; noTone(IR_Pin); //opriți frecvența //adunați-o într-un octet în codul Gray: wind_Gray=wDir+wDir*2+wDir*4+wDir*8; // traducere directă în binar. cod int wind_G=wind_Gray*10+1000; //adăugați până la 4 des. evacuări. . . . .
Durata maximă a unei proceduri va fi în absența unei frecvențe pe receptor și este egală cu 4 × 100 = 400 microsecunde. Timpul maxim de ardere al celor 4 LED-uri de direcție va fi atunci când niciun receptor nu este iluminat, adică 4 × 400 = 1,6 milisecunde. Algoritmul, de altfel, va funcționa în același mod dacă, în loc de o frecvență a cărei perioadă este un multiplu de 100 μs, aplicați pur și simplu un nivel ridicat constant la LED-uri. În prezența unui meandre în loc de un nivel constant, pur și simplu economisim mâncarea la jumătate. Putem economisi și mai mult dacă rulăm fiecare LED IR printr-o linie separată (respectiv, printr-o ieșire separată a controlerului cu propriul tranzistor cheie), dar acest lucru complică circuitul, cablarea și controlul și un curent de 130 mA pentru 2 ms la fiecare 16 secunde - asta, vezi tu, este puțin.

In cele din urma, transmisie de date fără fir. Cea mai simplă, mai ieftină și mai fiabilă metodă a fost aleasă pentru a transmite date de la locația senzorilor către afișajul stației meteo: o pereche emițător/receptor la o frecvență de 433 MHz. Sunt de acord că metoda nu este cea mai convenabilă (din cauza faptului că dispozitivele sunt concepute pentru a transfera secvențe de biți, și nu octeți întregi, trebuie să excelați în conversia datelor între formatele necesare) și sunt sigur că mulți vor dori să mă cert în ceea ce privește fiabilitatea lui. Răspunsul la ultima obiecție este simplu: „doar că nu știi să le gătești!”.

Secretul este că de obicei rămâne în culise diferite descrieri ale schimbului de date pe canalul de 433 MHz: deoarece aceste dispozitive sunt pur analogice, sursa de alimentare a receptorului trebuie să fie foarte bine curățată de orice ondulații străine. Sub nicio formă receptorul nu trebuie alimentat de regulatorul intern de 5V al Arduino! Instalarea unui regulator receptor separat, de putere redusă (LM2931, LM2950 sau similar) chiar lângă ieșirile sale, cu circuite de filtrare adecvate de intrare și ieșire, crește dramatic raza de transmisie și fiabilitatea.

În acest caz, emițătorul a funcționat direct de la o tensiune de baterie de 12 V, receptorul și emițătorul erau echipate cu antene standard de casă sub forma unei bucăți de sârmă lungă de 17 cm. (Permiteți-mi să vă reamintesc că doar un singur nucleu firul este potrivit pentru antene și este necesar să se plaseze antenele în spațiu paralel între ele.) Un pachet de informații lung de 24 de octeți (ținând cont de umiditate și temperatură) fără probleme a fost transmis cu încredere la o viteză de 1200 bps în diagonală prin un teren de grădină de 15 acri (aproximativ 40-50 de metri), apoi prin trei pereți de bușteni în cameră (în care, de exemplu, un semnal celular este recepționat cu mare dificultate și nu peste tot). Condiții care sunt practic de neatins pentru orice metodă standard de 2,4 GHz (cum ar fi Bluetooth, Zig-Bee și chiar Wi-Fi amator), în ciuda faptului că consumul de emițător aici este de 8 mA mizerabil și numai în momentul transmiterii efective, în restul timpului emițătorul consumă bănuți reali. Emițătorul este amplasat structural în interiorul unității de la distanță, antena iese orizontal din lateral.

Combinăm toate datele într-un singur pachet (într-o stație reală, i se vor adăuga temperatura și umiditatea), constând din părți uniforme de 4 octeți și precedate de semnătura „DAT”, le trimitem transmițătorului și completăm toate ciclurile:

/*=====Transmițător=====*/ String strMsg="DAT"; //semnătură - date strMsg+=volt; //atașați o baterie de 4 cifre strMsg+=wind_G; //atașează vânt 4 biți strMsg+=fi; //ataseaza frecventa 4 biti strMsg.toCharArray(msg,16); //traducerea șirului într-o matrice // Serial.println(msg); //pentru a controla vw_send((uint8_t *)msg, strlen(msg)); // trimite mesajul vw_wait_tx(); // așteptați finalizarea transferului - o necesitate! întârziere (50); //+ pentru orice eventualitate, delay count=0; //resetează contorul )//end count==3 else count++; digitalWrite(ledPin, LOW); //oprim semnalul LED system_sleep(); //sistem - a dormi) //termină bucla
Dimensiunea pachetului poate fi redusă dacă este abandonată cerința de a reprezenta fiecare dintre diferitele tipuri de valori sub forma unui cod uniform de 4 octeți (de exemplu, pentru codul Gray, desigur, un octet este suficient). Dar de dragul universalizării, am lăsat totul așa cum este.

Sursa de alimentare și caracteristicile de proiectare ale unității de la distanță. Consumul unității de la distanță se calculează după cum urmează:

20 mA (emițător) + ~20 mA (controler cu circuite auxiliare) timp de aproximativ 0,25 s la fiecare patru secunde - 40/16 = 2,5 mA medie;
- 130 mA (radiatoare) + ~20 mA (controller cu circuite auxiliare) pentru aproximativ 2 ms la fiecare 16 secunde - 150/16/50 ≈ 0,2 mA în medie;

Aruncând pe acest calcul consumul controlerului la citirea datelor de la senzorul de temperatură-umiditate și în timpul funcționării transmițătorului, aducem cu îndrăzneală consumul mediu la 4 mA (cu un vârf de aproximativ 150 mA, atenție!). Bateriile (care, apropo, vor necesita până la 8 bucăți pentru a alimenta transmițătorul cu tensiunea maximă!) vor trebui schimbate prea des, așa că a apărut ideea de a alimenta unitatea de la distanță din baterii de 12 volți pentru o șurubelniță - Am avut doar două în plus. Capacitatea lor este chiar mai mica decat numarul corespunzator de baterii AA - doar 1,3 ore A, dar nimeni nu se deranjeaza sa le schimbe oricand, tinand gata pe al doilea incarcat. Cu consumul indicat de 4 mA, capacitatea de 1300 mA ore este suficientă pentru aproximativ două săptămâni, ceea ce nu este prea supărător.

Rețineți că tensiunea unei baterii proaspăt încărcate poate fi de până la 14 volți. În acest caz, a fost instalat un stabilizator de intrare de 12 volți - pentru a preveni supratensiunile în alimentarea transmițătorului și pentru a nu supraîncărca stabilizatorul principal de cinci volți.

Unitatea de la distanță într-o carcasă de plastic adecvată este plasată sub acoperiș, un cablu de alimentare de la baterie și conexiunile la senzorii de vânt sunt conectate la ea la conectori. Principala dificultate este că circuitul s-a dovedit a fi extrem de sensibil la umiditatea aerului: pe vreme ploioasă, după câteva ore, emițătorul începe să se defecteze, măsurătorile de frecvență arată o mizerie completă, iar măsurătorile tensiunii bateriei arată „vremea pe Marte” .

Prin urmare, după depanarea algoritmilor și verificarea tuturor conexiunilor, carcasa trebuie sigilată cu grijă. Toți conectorii de la intrarea în carcasă sunt acoperiți cu material de etanșare, același lucru se aplică tuturor capetelor de șuruburi care ies în afară, ieșirea antenei și cablul de alimentare. Articulațiile corpului sunt acoperite cu plastilină (ținând cont de faptul că vor trebui separate) și în plus lipite deasupra cu benzi de bandă pentru instalații sanitare. Este o idee bună să întăriți suplimentar cu atenție conectorii utilizați în interior cu epoxi: de exemplu, modulul de la distanță DB-15 indicat pe diagramă nu este etanș singur, iar aerul umed se va infiltra încet între cadrul metalic și baza de plastic.

Dar toate aceste măsuri în sine nu vor da decât un efect pe termen scurt - chiar dacă nu există aspirație de aer rece și umed, atunci aerul uscat din cameră se transformă ușor în umed atunci când temperatura din afara carcasei scade (amintiți-vă de fenomenul numit "punct de condensare").

Pentru a evita acest lucru, este necesar să lăsați un cartuș sau o pungă cu un desicant - silicagel în interiorul carcasei (pungile cu acesta se pun uneori în cutii cu pantofi sau în unele pachete cu dispozitive electronice). Daca silicagelul este de origine necunoscuta si a fost depozitat o perioada indelungata, acesta trebuie calcinat in cuptorul electric la 140-150 de grade timp de cateva ore inainte de utilizare. Dacă carcasa este sigilată corespunzător, atunci desicantul va trebui schimbat nu mai des decât la începutul fiecărui sezon de vară.

Modulul principal

În modulul principal, toate valorile sunt primite, decodate, dacă este necesar, convertite în conformitate cu ecuațiile de calibrare și afișate.

Receptorul este scos din corpul modulului principal al stației și plasat într-o cutie mică cu urechi pentru fixare. Antena este scoasă printr-un orificiu din capac, toate orificiile din carcasă sunt sigilate cu cauciuc brut. Contactele receptorului sunt direcționate către un conector RS-4 domestic foarte fiabil, din partea receptorului este conectat printr-un segment de cablu AV dublu ecranat:

Un semnal este preluat de la unul dintre miezurile de cablu, iar puterea este furnizată prin celălalt sub formă de 9 volți „bruți” de la adaptorul de alimentare al modulului. Stabilizatorul de tip LM-2950-5.0, împreună cu condensatorii de filtru, este instalat într-o cutie împreună cu un receptor pe o placă separată.

Au fost efectuate experimente pentru a mări lungimea cablului (doar pentru orice eventualitate - și dacă nu ar funcționa prin perete?), În care s-a dovedit că nimic nu se schimbă pe o lungime de până la 6 metri.

Există doar patru afișaje OLED: două galbene oferă date meteo, două ceasuri verzi și un calendar. Amplasarea lor este prezentată în fotografie:

Vă rugăm să rețineți că, în fiecare grup, unul dintre afișaje este text, al doilea este grafic, cu fonturi create artificial sub formă de imagini glife. Aici nu ne vom opri asupra problemei transmiterii informațiilor către afișaje în viitor, pentru a nu umfla textul deja extins al articolului și exemple: datorită prezenței imaginilor cu glif care trebuie afișate individual (adesea prin simpla enumerare). opțiuni folosind o declarație case), programele de ieșire pot fi foarte greoaie. Pentru informații despre cum să gestionați aceste afișaje, consultați postarea autorului „Modul grafic și text al afișajelor Winstar”, care include un exemplu de afișare pentru afișarea datelor de vânt.

Diagramă schematică. Pentru ușurință de configurare, ceasul și afișajele sale sunt deservite de un controler Arduino Mini separat și nu le vom analiza în continuare aici. Schema de conectare a componentelor la Arduino Nano, care controlează recepția și ieșirea datelor meteo, este următoarea:

Aici, spre deosebire de modulul de la distanță, este afișată conexiunea senzorilor de vreme - un barometru și un senzor intern de temperatură-umiditate. Ar trebui să acordați atenție cablurilor de alimentare - afișajele sunt alimentate de un stabilizator separat de 5 V tip LM1085. De asemenea, este firesc să alimentați afișajele ceasului de la acesta, totuși, în acest caz, controlerul de ceas trebuie să fie alimentat și de la aceeași tensiune și prin ieșirea de 5 V, și nu Vin (pentru Mini Pro, acesta din urmă se numește BRUT). Dacă alimentați controlerul ceasului în același mod ca Nano - cu 9 volți prin ieșirea RAW, atunci regulatorul său intern va intra în conflict cu cei 5 volți externi și, desigur, în această luptă, cel mai puternic va câștiga, adică LM1085. , iar Mini va rămâne complet fără curent. De asemenea, pentru a evita tot felul de necazuri, inainte de a programa Nano si mai ales Mini (adica inainte de a conecta cablul USB), adaptorul extern trebuie deconectat.

Pe stabilizatorul LM1085, atunci când toate cele patru afișaje sunt conectate, se va elibera aproximativ un watt de putere, așa că ar trebui instalat pe un calorifer mic de aproximativ 5-10 cm2 dintr-un colț din aluminiu sau cupru.

Recepția și prelucrarea datelor. Aici reproduc și comentez doar fragmentele de program legate de datele vântului, despre alți senzori câteva cuvinte mai târziu.

Pentru a primi un mesaj pe canalul de 433 MHz, folosim metoda standard descrisă în multe surse. Conectăm biblioteca și declarăm variabile:

#include . . . . . intvolt; //tensiunea bateriei în întregul cod condițional float batt; //valoare reală - octet tensiune baterie wDir; //direcția în cod gri uint16_t t_time = 0; //interval de timp de recepție char str; //șir pentru date uint8_t buf; //variabilă pentru mesajul primit uint8_t buflen = VW_MAX_MESSAGE_LEN; // lungimea maximă a mesajului primit. . . . .
Există o particularitate cu dimensiunea bufferului tampon: nu este suficient să declarați valoarea sa (VW_MAX_MESSAGE_LEN) o dată la începutul programului. Deoarece această variabilă apare ca referință în funcția de primire (vezi mai jos), dimensiunea implicită a mesajului trebuie actualizată la fiecare ciclu. În caz contrar, din cauza primirii mesajelor corupte, valoarea buflen va fi scurtată de fiecare dată, până când veți începe să primiți prostii în loc de date. În exemple, ambele variabile sunt de obicei declarate local în bucla loop(), astfel încât dimensiunea bufferului este actualizată automat, dar aici vom repeta pur și simplu atribuirea valorii dorite la începutul fiecărei bucle.

În procedura de configurare, facem următoarele setări:

Void setup() (întârziere (500); //pentru oprire afișează pinMode(16,INPUT_PULLUP); //pin pentru butonul vw_setup(1200); //Viteza conexiunii VirtuWire vw_set_rx_pin(17); //pin receptor A3 VirtualWire. . . . .
Înainte de a accepta ceva, se verifică intervalul de timp t_time care a trecut de la ultima recepție. Dacă a depășit limite rezonabile (de exemplu, 48 de secunde - de trei ori timpul de repetiție al mesajelor de la unitatea externă), atunci acest lucru este perceput ca o pierdere a senzorului și este cumva indicat pe afișaj:

Void loop() ( vw_rx_start(); // Gata de primire bullen = VW_MAX_MESSAGE_LEN; // dimensiunea tamponului de fiecare dată din nou dacă ((int(millis()) - t_time) > 48000) // dacă t_time nu a fost actualizat pentru mai mult mai mult de 48 de secunde (<отображаем прочерк на дисплее>)//senzorul de final nu a fost găsit dacă (vw_have_message()) ( //așteptați recepția dacă (vw_get_message(buf, &buflen)) // Dacă datele sunt primite ( vw_rx_stop(); //oprește primirea pentru un timp t_time = millis( ); / /actualizare t_time pentru (octet i=0;i<3;i++) // Получить первые три байта str[i]= buf[i]; str="\0"; if((str=="D")&&(str=="A")&&(str=="T")) { //сигнатура принята //принимаем данные: for (byte i=3;i<7;i++) // извлечь четыре байта аккумулятора str= buf[i]; // упаковать их в строку volt=atoi(str); //преобразовать в целое число volt=(volt/10)-100; //удаляем добавки до 4-х байт batt=float(volt)/55.5; //преобразуем в реальный вид напряжения в вольтах //и пока храним в глобальной переменной for (byte i=7;i<11;i++) // извлечь четыре байта направления str= buf[i]; // упаковать их в строку int w_Dir=atoi(str); //преобразовать в целое число w_Dir=(w_Dir-1000)/10; //возвращаем к исходному виду wDir=lowByte(w_Dir); //младший байт - код Грея <выводим направление на дисплей через оператор case> . . . . .
Coeficient 55,5 - conversia valorii codului ADC în tensiune reală, valoarea acesteia depinde de tensiunea de referință și de valorile rezistențelor divizor.

Apropo, codul Gray are o caracteristică: ordinea biților este neimportantă, codul își păstrează toate proprietățile pentru orice permutare. Și din moment ce, la decodificare, luăm în continuare în considerare fiecare caz separat aici, biții pot fi considerați în orice ordine și chiar confuzi atunci când sunt conectați. Este o altă chestiune dacă ar fi vrut să simplifice cumva această chestiune - de exemplu, creați o serie de valori de direcție („s”, „ssz”, „sz”, „zsz”, „z”, etc.) și, în schimb, de luare în considerare individuală fiecare variantă extrage denumirile după număr din această matrice. Apoi ar trebui să convertiți codul Gray în binar ordonat, iar ordinea biților ar juca un rol semnificativ.

Și, în sfârșit, extragem valoarea vitezei și închidem toate instrucțiunile:

Pentru(octetul i=19;i<23;i++) // Получить четыре байта частоты str= buf[i]; // упаковать их в строку int wFrq=atoi(str); //преобразовать в целое число wFrq = (wFrq-1000)/10; //удаляем добавки до 4-х байт wFrq=10+0.5*wFrq;//скорость в целом виде с десятыми <отображаем ее на дисплее поразрядно>)//end if str=DAT )//end vw_get_message ) //end vw_have_message(); . . . . .
Aici 10+0,5*wFrq este ecuația de calibrare. 10 dm/s (adică 1,0 metri pe secundă) este pragul de pornire, iar 0,5 este factorul de conversie a frecvenței în viteză (în dm/s). Cu o valoare zero a frecvenței de intrare, această ecuație dă 10 dm / s, prin urmare, trebuie avută o grijă deosebită pentru a afișa nu 1 m / s, ci o valoare zero. Puteți calibra senzorul de viteză folosind oricare dintre cele mai ieftine anemometre de mână și un ventilator de birou. Nu încercați să determinați pragul de pornire experimental - va fi mult mai precis dacă marcați două sau trei puncte ale liniei drepte de calibrare a vitezei V de la frecvența F: V = Vp + K × F la viteze de curgere diferite, atunci pragul de pornire va fi determinat automat ca valoare Vp (ordonata punctului de intersecție a acestei drepte cu axa vitezei).

Mai este un lucru de făcut înainte de a închide bucla principală. Avem tensiunea bateriei, dar nu trebuie să o afișați tot timpul - doar ocupă spațiu. Pentru aceasta, este necesar butonul Kn1 - făcând clic pe el, înlocuim temporar (până la următoarea actualizare a datelor) linia externă de temperatură-umiditate cu valoarea tensiunii:

Dacă (digitalRead(16)==LOW)( //buton este apăsat<выводим напряжение на дисплей, затирая значение температуры-влажности>)//întârziere butonul de încheiere (500); )//bucla de sfârșit
Am avut un buton, după cum se vede din diagramă, cu contact comutator, dar nimic nu mă împiedică să instalez unul obișnuit cu unul de închidere, conectându-l la alimentare printr-o rezistență. Puteți adăuga la aceasta și clipirea simbolurilor de pe afișaj în cazul în care tensiunea bateriei scade sub, de exemplu, 10 volți, ca semn că este timpul să o schimbați.

În concluzie, despre senzorii de vreme. SHT-75 a fost folosit ca senzor de exterior - singurul senzor de amator pe care l-am găsit care nu necesită calibrare și care arată valori reale ale temperaturii și umidității imediat din cutie (de unde și prețul ridicat).

O bibliotecă pentru conectarea acesteia poate fi găsită.

SHT-75 este proiectat într-un mod destul de stupid: substratul metalic al plăcii conduce foarte bine căldura, așa că trebuie scos complet din carcasă. În caz contrar, prezența unui singur controler ATmega328 cu un regulator de alimentare într-o carcasă închisă este suficientă pentru a încălzi senzorul câteva grade prin substratul plăcii, chiar dacă capul acestuia este mutat în exterior. Circuitul meu cu senzori de vânt, cu curenții săi de 20-130 mA (chiar dacă curentul este neglijabil milisecunde) a încălzit SHT-75 de grade cu cinci, așa că a fost scos și instalat separat pe o placă de plastic ieșită lateral din carcasă. .

Datele de la SHT-75 sunt preluate de același controler ca și datele de la senzorii de vânt și trimise de la modulul de la distanță într-un singur pachet printr-un canal fără fir de 433 MHz. Ele sunt, de asemenea, convertite într-un șir de 4 octeți pentru pretransmisie.

Pentru a măsura temperatura și umiditatea din interiorul camerei, s-a ales banalul DHT-22 - deoarece intervalul acolo este mic în comparație cu strada, nu are nicio diferență ce senzor să folosești (cu excepția, desigur, DHT-11, care nu ar trebui să poate fi folosit în orice împrejurare, deoarece pentru scopul propus, este pur și simplu inoperabil). Temperatura DHT-22 a fost corectată conform măsurătorilor cu un termometru cu mercur (acestea au coincis complet cu SHT-75!), iar umiditatea a fost ușor ajustată în comparație cu SHT-75. Corecțiile sunt introduse chiar înainte de indicația de pe afișaj.

Apropo, DHT-22 trebuie scos și din carcasa cu afișaje - altfel se va încălzi inevitabil și va minți. Il fixez pe un suport de plastic din fundul carcasei, la o distanta de zece milimetri de el. Această împrejurare, apropo, după cum bănuiesc, este unul dintre motivele (în afară de lipsa calibrării individuale) pentru care toate stațiile meteo de uz casnic marca RST și Oregon se află fără rușine în citirile lor, având o răspândire chiar și cu ele însele (un senzor intern). cu unul extern) de două sau trei grade şi până la zece la sută umiditate.

Barometru nu prezintă probleme, deoarece aproape toate cele disponibile comercial sunt realizate pe aceeași bază - cipul microelectromecanic (MEMS) BMP180 sau modificările acestuia. Experiența mea personală cu varianta mai puțin obișnuită bazată pe LPS331AP a fost negativă: o bibliotecă pentru aceasta este mai greu de găsit și, în plus, a fost găsit un conflict cu alte dispozitive de pe magistrala I2C. Este posibil ca citirile barometrului să fie ajustate la locul de instalare - la fiecare 10-12 metri de înălțime deasupra nivelului mării reduce presiunea cu 1 mm Hg. Artă. Prin urmare, o anumită valoare va trebui să fie scăzută din citiri (sau adăugată), astfel încât valoarea presiunii să corespundă citirilor stației meteo oficiale din zonă.

Nu ofer toate programele stației meteo în totalitate - sunt destul de greoaie și tot nu veți putea repeta designul unul la unul. Dacă ceva, bate la PM.

UPD din 30.06.17. Energia solară instalată. Kit de aici:
panoul solar
controlor
baterie
Toate împreună + livrare la Moscova în 2,5 tyr. Functioneaza impecabil.
O metodă interesantă de calculare a puterii unei baterii solare și a unei baterii, care este oferită de consultanții de pe acest site. Un exemplu de calcul pentru 3 W de putere consumată (am mult mai puțin), citez:
„De 3W ori 24h și împărțit la 6 = 12Ah este capacitatea minimă a bateriei
3W înmulțit cu 24h și împărțit la 3h = 24W este puterea minimă a bateriei solare.
Fara comentarii.
În cazul meu, capacitatea rezultată a centralei solare este de zece ori mai mare decât este necesar în cele mai proaste condiții meteorologice. Prin urmare, în controlerul cu senzor, nu vă puteți preocupa prea mult de economisirea energiei și aplicați orice citire necesară și frecvențele de mediere.

UPD din 13.09.18. Timp de aproape două sezoane de funcționare, au fost dezvăluite punctele forte și punctele slabe ale stației. Cele slabe sunt, în primul rând, că ciclul de actualizare a citirilor de 16 secunde (din patru serii de măsurători), așa cum a fost inițial, este prea lung. Instalarea unei baterii solare cu o baterie tampon a făcut posibil să nu te gândești la economisirea energiei și să te joci cu timpul ciclului. Ca rezultat, ciclul a fost setat la 8 secunde (patru măsurători în două secunde).
Dintre îmbunătățirile mecanice, sub vârful senzorului de viteză a fost introdus un rulment axial solid (da, am fost avertizat despre necesitatea lui atunci, dar nu mi-am dat seama cum să-l fac atunci). După ceva timp, axa senzorului a tăiat complet prin suportul fluoroplastic, iar pragul de pornire a crescut brusc (apropo, acest lucru nu a afectat deloc sensibilitatea girouiței). Prin urmare, suportul a fost înlocuit cu un rulment axial din oțel inoxidabil, în care s-a făcut o mică adâncitură cu un burghiu subțire. Am un presentiment că mai târziu va trebui să vin cu altceva cu vârful, care, la fel ca întregul ax, este din duraluminiu. Dar am amânat-o până în momentul în care senzorul ar mai trebui refăcut: discul laser, luat ca bază pentru design, s-a înnorat de la soare în două sezoane și a început să crape.

UPD din 06/05/19.
Despre modificarea senzorului (giroeta a lăsat la fel). Senzorul de viteza a trebuit refacut atat din cauza axei uzate cat si din cauza discului laser care devenise inutilizabil. Designul de bază rămâne același, dar noul disc laser este vopsit cu vopsea aurie. Soluția pentru vârful axei a fost găsită în următoarea formă. În axa duraluminiu, s-a găurit o adâncitură exact în centru și o tăietură de 3 mm a vârfului unui robinet chinezesc a fost introdusă acolo pe un al doilea lipici. Vârful robinetului este un con bine centrat cu un unghi de aproximativ 70-80 de grade, a fost lustruit suplimentar cu șmirghel zero și apoi cu pastă GOI. Ca bază, am folosit capul unui șurub M3 inoxidabil cu fantă tăiată, în care este marcată o mică depresiune în centru cu un burghiu obișnuit D = 2 mm. Acest șurub a fost înșurubat direct într-o locașă din PTFE, tăiată de ax mai devreme decât a fost asigurată centrarea.
Vârful axei a fost lubrifiat cu unsoare de grafit pentru a proteja împotriva coroziunii (deoarece proprietățile inoxidabile ale robinetului îmi sunt necunoscute). După unele măcinare, pragul de pornire a scăzut atât de mult încât a devenit imposibil să-l măsoare cu un anemometru proprietar, în care pragul este de aproximativ 0,3-0,5 cm / s. Conform datelor indirecte (prin construirea unei linii drepte din două puncte), a fost acceptat voluntar un prag de 0,3 m/s, deși probabil este ceva mai mic.

Principala modificare a algoritmilor de calcul se referă și la senzorii de vânt și mi s-a părut util să introduc acest lucru în .


Vânturile variază de la brize ușoare până la rafale bruște, care aduc distrugere și moarte. Cele mai puternice vânturi sunt uraganele. Aceste vânturi cu forță de uragan se formează deasupra oceanelor de la tropice atunci când mase uriașe de aer sunt aspirate în zonele cu presiune scăzută. Norii de furtună deseori înconjoară centrul (sau ochiul) unui uragan la viteze mai mari decât un tren de cale ferată.

Poate că nu ați experimentat niciodată vânturi de uragan, dar oriunde ați locui, probabil că ați experimentat atât zile calme, cât și zile cu vânt. Faceți un anemometru, cel mai simplu instrument pentru măsurarea vitezei vântului și înregistrați puterea vântului în zona dvs. într-o zi cu vânt.

Vei avea nevoie:

Stil de lemn gros
tije subtiri de lemn
frânghie și plumb
ceasca de iaurt
bandă adezivă (impermeabilă)
chinuri
carton colorat
tub de cupru
lipici
foarfece

1. Luați un știft gros de lemn și introduceți-l ferm în tubul de cupru. Acesta va fi suportul pentru anemometru.

2. Cereți unui adult să vă ajute să găuriți o gaură prin suport. Diametrul găurii trebuie să corespundă cu grosimea uneia dintre tijele subțiri. Faceți o fantă la un capăt al acestei tije subțiri. Introduceți-l în suport și fixați-l așa cum se arată în imagine.

3. Tăiați vârful de săgeată și fletting din carton și fixați-l de capetele unei tije subțiri.

4. Tăiați un sfert de cerc din carton colorat și atașați-l de săgeată cu bandă adezivă.

5. Luați un pahar mare de iaurt. Lipiți-l de un capăt al celei de-a doua tije subțiri de lemn.

6. Rugați un adult să vă ajute să găuriți o mică gaură la celălalt capăt al celei de-a doua tije, apoi prindeți-o în cuie în vârful stâlpului. Asigurați-vă că tija este liberă să se rotească.

7. Alegeți un loc potrivit pentru observarea în aer liber. Introduceți un tub de cupru în pământ și apoi introduceți un stâlp în el. Fixați suportul în poziția dorită folosind chineaua. Instalați suportul strict vertical, atârnând un fir de plumb de săgeată (puteți folosi o piuliță ca plumb). Linia de plumb trebuie să atârne strict paralel cu suportul.

Vântul întoarce acul anemometrului astfel încât să îndrepte în direcția din care bate vântul.
Cupa și tulpina de iaurt se vor ridica odată cu el. Cu cât vântul este mai puternic, cu atât tija indicatorului se ridică mai sus.

scara Beaufort

Aceasta este o scară pentru măsurarea vitezei vântului, care se bazează pe observații ale naturii. Cântarul a fost inventat de amiralul englez Sir Francis Beaufort acum aproape 200 de ani.

Viteza vântului pe hărțile meteo este indicată de numărul de liniuțe de pe pictograma de forță a vântului.

Viteza vântului Caracteristica verbală Semne de estimare a vitezei vântului
Domnișoară km/h Scor
Beaufort
0,0-1,5 0,0-1,8 0 Calm Fumul se ridică vertical sau aproape vertical, frunzele sunt nemișcate
0,6-1,7 1,9-5,1 1 Vânt liniştit Direcția vântului este determinată de fum
1,8-3,3 5,2-11,7 2 Briză ușoară Mișcarea vântului se simte de față, frunzele foșnesc
3,4-5,2 11,8-18,7 3 vânt slab Frunzele și ramurile subțiri ale copacilor se leagănă în mod constant, vântul flutură steaguri ușoare, marea este acoperită cu un val de lumină continuu.
5,3-7,4 18,8-26,6 4 vânt moderat Vântul ridică praful, pune în mișcare ramurile subțiri ale copacilor, pe valuri separate apar ocazional alb, dispărând rapid „miei”
7,5-9,8 26,7-35,3 5 Adiere proaspătă Ramuri groase de copaci se leagănă; „miei” sunt vizibili pe fiecare val
9,9-12,4 35,4-44,0 6 Vânt puternic Ramuri groase de copaci se leagănă, firele telegrafice bâzâie, „miei” pe valuri sunt mai lungi (5-10 sec.)
12,5-15,2 44,1-54,7 7 vânt puternic Vârfurile copacilor se leagănă, ramurile mari se îndoaie, este incomod să mergi împotriva vântului. Valuri înspumate pe mare
15,3-18,2 54,8-66,0 8 Vant foarte puternic Vântul sparge ramurile subțiri și ramurile uscate ale copacilor, îngreunând mișcarea
18,3-21,5 66,1-77,5 9 Furtună Vântul dărâmă coșurile de fum și țiglele de acoperiș. Este foarte greu să mergi împotriva vântului.
21,6-25,1 77,6-90,2 10 Furtună puternică Distrugeri semnificative, copaci dezrădăcinați
25,2-29,0 90,3-104,4 11 Furtună violentă Mare distrugere: dărâmarea stâlpilor de telegraf, a vagoanelor
Peste 29,0 Peste 104,4 12 Uragan Distruge case, provoacă mari distrugeri

Noul meu anemometru. Anemometrul s-a dovedit a nu fi mic, generatorul este disc, diametrul șurubului este de 0,5 m. Anemometrul este de tip orizontal cu o elice cu șase pale. Articolul conține o descriere detaliată cu fotografii și videoclipuri

Nou articol pe tema + foto și video - Anemometru android + microfon

În cele din urmă a ajuns la anemometru. După ce am făcut deja trei turbine eoliene, încă nu știu exact ce vânt și cât dau morile mele de vânt. Acum există un singur generator eolian în funcțiune, cel mai de succes al meu, deși este tot asamblat „pe genunchi”. Îmi imaginez aproximativ puterea vântului și pot distinge între un vânt de 5 m/s și 10 m/s, dar totuși vreau să știu viteza vântului mai precis pentru a determina puterea generatorului eolian.

De câteva zile, din când în când, m-am gândit să fac un anemometru din ceva, dar până acum nu a ieșit nimic sensibil din gunoaiele disponibile acasă. Am găsit două motoare mici de la un DVD player, dar sunt dureros de mici și este greu să găsești lame pentru un arbore subțire.

Mi-a atras atenția un ventilator de mașină, de obicei sunt instalate în camioane. Acesta este cel pe care l-am torturat. Am demontat si scos motorul. Am rupt paletele de la elice și a rămas doar baza - partea centrală, care este pusă pe arbore. Apoi m-am gândit ce lame să-l atașez, am încercat fundul sticlelor și cutiilor de plastic, dar nu mi-au plăcut toate astea.

Apoi am găsit o bucată de țeavă PVC cu diametrul de 5 cm și lungimea de 50 cm. Am făcut 4 lame din ea, doar tăiați țeava pe lungime în două jumătăți, iar jumătățile, fiecare în două părți, au ieșit 4. lame. In baza ramasa din surubul nativ am facut 4 gauri pentru prinderea lamelor si am facut si 4 gauri in lame. A răsucit totul în șuruburi și a obținut o elice cu patru pale - savonius (prima verticală „serioasă”).

Ei bine, atunci am găsit firele de lungimea necesară, îmbinate 5 metri de cablu de antenă și 8 metri din cel obișnuit. Am conectat imediat firele pentru a măsura parametrii ținând cont de lungimea firului, deoarece datele pot diferi dacă măsurătorile sunt efectuate pe un fir de contor sau pe 13 m.

Apoi am găsit o bucată dintr-un tub metalic de aproximativ 80-90 cm lungime, am îndoit-o cu litera Z și am înfășurat motorul. Acest tub va atașa anemometrul la catarg. Nu este nimic complicat, poți folosi orice material la îndemână.

Ei bine, atunci când am asamblat complet anemometrul, l-am instalat pe motocicleta mea pentru a-l calibra. Mai jos în fotografie puteți vedea cum a fost făcut, totul este primitiv și simplu. Pe oglinda primatelor cu bandă electrică, un sapunmetru, în general, a fixat cumva totul pentru a-mi elibera mâinile pentru a controla motocicleta.

Această zi de toamnă este foarte reușită datorită absenței aproape completă a vântului, care de altfel a servit ca un montaj rapid al anemometrului, o astfel de zi nu ar trebui să dispară. Nu am vrut să ies pe asfalt, pentru că, cu o mașină de neînțeles în fața motocicletei, aș atrage atenția asupra mea, așa că m-am hotărât să merg prin câmpurile de-a lungul plantațiilor forestiere.

Am mers înainte și înapoi și în direcții diferite și am înregistrat citirile multimetrului pe telefon la viteze diferite. Anemometrul a pornit cu o viteză de 7 km/h, iar treptat m-am rostogolit înainte și înapoi cu viteze diferite începând de la 10 km/h și maxim 40 km/h, era posibil mai mult, dar drumurile de pământ sunt foarte denivelate și poți nu accelereaza mult.

>

După pokatushek astfel de date au fost extrase. Multimetrul a aratat la 10km/s=0.06V, la 20km/h=0.12V, la 30km/h=0.20V, la 40km/h=0.30V.

Apoi, folosind un calculator, am calculat valori pentru viteze intermediare ale vântului.

Volți - viteza vântului m/s.

Datele de peste 11 m/s au fost calculate desenând pe o bucată de hârtie un grafic al creșterii tensiunii în funcție de viteza vântului, care a continuat fără probleme până la 15 m/s. In aceeasi zi, sau mai bine zis seara, am montat un anemometru pe catarg la generatorul eolian. A coborât moara de vânt și a legat anemometrul dedesubt. Am tras temporar țeava pe un fir și am înfășurat-o suplimentar cu bandă electrică, s-a dovedit a fi puternică. Ei bine, apoi am ridicat totul la loc și acum există un anemometru pe catarg lângă generatorul eolian, care începe de la 3 m / s și arată în mod regulat viteza vântului.

>

>

Mai jos în fotografie este o turbină eoliană deja ridicată cu un anemometru fix. Nu am făcut poze mai în detaliu, din moment ce nu este nimic complicat acolo și nu este nimic de repetat. Un anemometru poate fi asamblat din orice, de la aproape orice motor. Desigur, este mai convenabil să calibrați cu mașina. Acolo și confortabil, și mai convenabil, iar vitezometrul este mai precis. Dar m-am hotărât pe o motocicletă și mi s-a părut că merge bine, sper că dacă vitezometrul minte, atunci nu cu mult.

>

Asta e tot deocamdată, aceasta este prima versiune a acestui anemometru și cred că nu ultima. Între timp, voi aștepta vântul și voi afla ce dă generatorul meu eolian. Ei bine, voi completa acest articol cu ​​aceste date. Poate trebuie refăcut ceva...

Plus

Era vânt și am testat anemometrul. Primele observații ale puterii vântului și citirea ampermetrului generatorului au arătat clar cât de instabil era vântul. Aici jos, deoarece catargul nu este înalt, este format în principal din rafale scurte, a căror durată nu depășește două sau trei secunde, iar în câteva secunde vântul poate varia foarte mult.

Un șurub anemometru neîncărcat reacționează brusc la fiecare rafală și schimbare a vitezei vântului. Și șurubul încărcat al acestui generator eolian este încă întârziat în reacții și, din această cauză, date nesincrone în citiri. Astăzi vântul este de 3-7 m / s, anemometrul a prins într-adevăr câteva rafale de până la 10 m / s, dar acestea au durat mai puțin de o secundă și generatorul eolian pur și simplu nu a putut răspunde la ele.

După un timp de observație, unele valori medii ale puterii curentului de la generatorul eolian au fost trase la un anumit vânt. Surubul incepe de la 3,5-4 m/s, incarcare 0,5A la 4m/s, 1A la 5m/s, 2,5A la 6m/s, 4A la 7m/s, 5A la 8m/s. Aceste date sunt mediate, deoarece ampermetrul este stot analog și pot greși până la 0,5 A în citirile curente de la generatorul eolian.

Ar fi trebuit să fie așa ceva

Etapele de fabricație a senzorului în sine:

Cazul a făcut așa: am luat o bucată dintr-o țeavă pătrată și am tăiat o fereastră în ea ca să pot monta ulterior umplutura prin ea (apropo, am tăiat fereastra cu temperatura, dar mi-am dorit foarte mult să o fac că m-am ridicat și m-am dus să ferăstrău). Apoi am sudat o placă în interior (suport rulment interior), apoi sudat partea inferioară (suport rulment inferior). Când m-am hotărât să fac vârful, am decis să fac un acoperiș înclinat - pentru asta am tăiat patru triunghiuri și l-am apucat cu grijă, apoi l-am fiert complet și am făcut astfel o vizor ascuțit. Apoi l-a prins într-o menghină și cu un burghiu cu 0,5 mm mai mic decât diametrul rulmentului a făcut un orificiu vertical în capacul inferior și în cele din mijloc, atât pentru rulmenți. Astfel încât rulmenții din oțel cu întindere au fost reglați printr-o măturare. Rulmentii se potrivesc asa cum ar trebui. Apoi a introdus în ele un cui ușor lustruit de 100-ku, în timp ce a pus o șaibă de plastic cu 4 fante pe ea în mijlocul ferestrei. Am tăiat un fir pe fundul cuiului și am înșurubat rotorul pe el.

Am realizat rotorul astfel: am sudat trei cuie pe piuliță cu un electrod cu un doi, apoi le-am tăiat și am tăiat firele la capetele cărora am înșurubat jumătățile din bilă.

Un suport de tijă hexagonal din oțel inoxidabil a fost sudat pe corp. Carcasa în sine a fost vopsită cu email alb de două ori, astfel încât cu siguranță să nu ruginească.

Am decis să nu inventez o bicicletă, ci să o fac ca într-un mouse de computer, există o șaibă de plastic cu patru fante pe axa de rotație, când rotorul se învârte, se învârte și șaiba pâlpâie peste senzorul, care este atașat. la capacul frontal și când capacul este înșurubat, este ca și când devine astfel încât șaiba cu fante se rotește și fluxul de lumină de la LED la fototranzistor intră și iese. Asta e tot... aici ai impulsuri, și ele pot fi numărate și au numărul de rotații pe secundă.

Leddiodno - senzor fototranzistor scos din imprimantă, există astfel de în vrac.

Mai întâi făcut din mingi de tenis

A trebuit sa modific putin dispozitivul. Pe rotorul de la mingi de tenis a început cu un vânt de 5m/s. bile au fost cumpărate dintr-un magazin de jucării pentru copii cu diametrul de 55 mm. Începe de la 2m/s și măsoară până la 22m/s, m-am săturat.

După ce senzorul a fost gata. A trebuit să facem electronice.

Prima variantă a fost tehnologia LUT de casă + o mască verde din China, care se usucă sub lumină ultravioletă.

55 în fotografie reprezintă rotații pe secundă. A fost necesar să se traducă cumva în m/s. M-am gândit multă vreme cum, mi-am luat chiar și două anemometre, vechi din URSS și chinezești la 50 de dolari, dar au fost probleme cu verificarea, pentru că vântul bate rafale și nu suflă stabil.

Prin urmare, am venit cu asta: într-o zi liberă, eu și tata am găsit 2 km de drum plat în afara orașului fără mașini, fără vânt și sădim copaci pe ambele părți (tata conducea și eu stăteam la jumătatea ferestrei) și hai să mergem înainte și înapoi. Mai întâi, am configurat tacul URSS și anemometrele chinezești, m-am asigurat că ambele arată la fel și corect, pentru că dacă împărțiți viteza de pe vitezometrul mașinii la 3,6, atunci obțineți cifra pe care anemometrele au arătat-o ​​în m. / s. Tata conducea cu aceeași viteză și instrumentele dădeau același vânt. Așa mi-am testat dispozitivul. Tata a adăugat de fiecare dată +5 km pe oră și am notat un nou indicator (rpm). Măsurătorile au fost făcute de trei ori. Când conduceam cu peste 80 km/h (22 m/s), anemometrul meu nu s-a mai putut învârti și cifra a înghețat, pentru că nu măsoară mai mult de 22 m/s....

Apropo, chinezii au apărut până la 28 m/s. URSS cue până la 20 m/s. Când l-am instalat într-un loc cu un program modificat, am verificat din nou cu chinezii totul a venit împreună.

Acum este modificat pentru Arduino.

Planurile sunt să înșurubați asta în sistemul smart home, astfel încât să puteți intra și gestiona încărcăturile din casă de pe smartphone, să urmăriți temperatura din casă (acest lucru este relevant pentru mine, doar că uneori se oprește gazul în iarna si e bine sa vezi ce temperatura) va fi senzor de gaz, si in plus va fi afisat viteza vantului langa casa.

Video cu munca

Rezultatele lucrărilor pentru iarnă

s-st --- ore pentru iarnă
0 m/s --- 511,0
1 m/s --- 475,0
2 m/s --- 386,5
3 m/s --- 321,2
4 m/s --- 219,0
5 m/s --- 131,5
6 m/s --- 63,3
7 m/s --- 32,5
8 m/s --- 15,4
9 m/s --- 9,1
10 m/s --- 5,0
11 m/s --- 3,5
12 m/s --- 2,2
13 m/s --- 1,3
14 m/s --- 0,8
15 m/s --- 0,5
16 m/s --- 0,5
17 m/s --- 0,2
18 m/s --- 0,0
19 m/s --- 0,1


Conform rezultatelor pentru două ierni, am văzut că vântul meu nu era puternic și moara de vânt nu va fi eficientă, așa că am făcut una mică cu pale de 50cm. putere de vârf de 150 wați. Doar m-am asigurat ca cel putin un bec economic sa straluceasca atunci cand lumina dispare.

Acum puțin despre Arduino.

Am găsit o diagramă a mouse-ului pe Internet, care ilustrează clar cum funcționează sistemul meu.

Pe baza diagramei mouse-ului, am realizat următoarea schemă.

Impulsurile vin de la fototranzistor la Arduino și le percepe ca apăsări de butoane.

Algoritmul programului este următorul: Luăm în considerare câte apăsări de butoane au avut loc într-o secundă, deci avem frecvența de rotație. Pentru a converti această frecvență în m/s. cand am facut-o pe Atmel am facut un algoritm pentru calcularea frecventei in m/s. Arăta așa:

ob_per_sec=0; // Variabilă în care scade frecvența rotațiilor pe secundă.

int viteză_vânt=0; // Valoarea va merge aici după ce frecvența a fost convertită în m/s.

int speed_wind_max=0; // Valoarea maximă a citirii vântului m/s merge aici.

int viteză_vânt_2=0; // Numărul de secunde de la începerea programului cu o viteză a vântului de 2 m/s.

int viteză_vânt_3=0; // Numărul de secunde de la începerea programului cu o viteză a vântului de 3 m/s.

int viteză_vânt_4=0; // Numărul de secunde de la începerea programului cu o viteză a vântului de 4 m/s.

int viteză_vânt_5=0; // Numărul de secunde de la începerea programului cu o viteză a vântului de 5 m/s.

…………………………………………………………..

int viteză_vânt_22=0; // Numărul de secunde de la începerea programului cu o viteză a vântului de 22 m/s.

dacă (ob_per_sec >0 && ob_per_sec<4) { speed_wind=2; speed_wind_2++;}

if (ob_per_sec >4 && ob_per_sec<7) { speed_wind=3; speed_wind_3++; }

if (ob_per_sec >7 && ob_per_sec<11) { speed_wind=4; speed_wind_4++; }

dacă (ob_per_sec >11 && ob_per_sec<15) { speed_wind=5; speed_wind_5++; }

dacă (ob_per_sec >15 && ob_per_sec<18) { speed_wind=6; speed_wind_6++; }

dacă (ob_per_sec >18 && ob_per_sec<23) { speed_wind=7; speed_wind_7++; }

dacă (ob_per_sec >23 && ob_per_sec<27) { speed_wind=8; speed_wind_8++; }

if (ob_per_sec >27 && ob_per_sec<30) { speed_wind=9; speed_wind_9++; }

…………………………………………………………..

dacă (ob_per_sec >60 && ob_per_sec<67) { speed_wind=22; speed_wind_22++; }

if (speed_wind> speed_wind_max)( speed_wind_max = speed_wind ;)// verifica si suprascrie daca valoarea maxima este mai mare decat cea scrisa anterior.

Și afișați valoarea.

Dacă este necesar, puteți vizualiza apoi câte minute a suflat vântul la o anumită viteză, pentru aceasta trebuie să afișați variabila (cu indicele de viteză necesar) speed_wind_№ (dar împărțiți-o la 60 pentru a obține minute.).

Am făcut asta în programul meu: când este apăsat un anumit buton, toate variabilele sunt afișate pe rând, de la speed_wind_1 la speed_wind_22.

Se încarcă...Se încarcă...