Stap 10: Update voor Project 1 - windrichting
Het is al een tijdje sinds de oprichting van dit instructable en dingen kreeg enige verbetering.
Het weerstation loopt en upload nu beide wind snelheid en richting. Nu zal ik u tonen hoe de windrichting werkt. Het is ook lezen en uploaden van UV-índex.
Er zijn een paar projecten rond die gebruikmaken van een installatie van riet swicthes te krijgen van de kop van de wind. Ik dacht altijd dat het doet een vrij eenvoudige oplossing, maar tegenwoordig met digitale kompassen lijkt geschikter om één van deze kleine apparaten te gebruiken. Ook, aangezien mijn doelstelling was om uit te voeren van alle sensoren op I2C bus, was ik zeker dat ik kon vinden dat zou passen in dit soort bus. Dus deed ik.
Ik ben met behulp van een HMC5883L, die een 3-as digitale kompas is, I2C bus gebruikt. Vindt u klaar gesoldeerd modules op ebay zo goedkoop als 1 euro. Gewoon zoeken en u vindt ze zeker.
Een stuk van advies met deze sensor. Ik denk dat dit soort sensoren erg gevoelig, omdat ik erin geslaagd om te doden een. Na een paar dagen krijgen van verkeerde aanwijzingen van het, kreeg ik een nieuwe die een en al geregeld. Maar wees voorzichtig, niet laten vallen ook veel vaak.
Importante anderzijds dat ik gebruikte heet een Sleepring. Wat is een Sleepring? Het is een klein apparaat waarmee u een roterende as en verbindingen tegelijkertijd. Er zijn verschillende parameters die definiëren van dergelijk apparaat. Één is het aantal manieren (of draden) en de andere is de nominale stroom aangenomen door de draden. Sindsdien zijn we alleen lezing sensor, en in dit geval I2c, zullen we 4 draden en de huidige is zo laag als je kunt krijgen.
Ik heb een 6 draad, lage huidige die is er gebeurd met de as diameter hebben hetzelfde als de binnenste maatregel van sommige kunststof leidingen die ik gebruikt om te bouwen van de vaan.
De diverse foto's tonen hoe ik erin geslaagd om te bouwen van het ding. Het is niet mooi maar het dows de baan.
SOFTWARE
Het is een vrij simpel ding om te lezen van de HCM. Nam ik een paar blikken op het gegevensblad, wat onderzoek gedaan in het web, en ik moet de regels van deze code om het werk te zetten:
def write_byte (adres, adr, waarde):
bus.write_byte_data (adres, adr, waarde)
-Procedure om gegevens te schrijven in een specifiek adres van de I2C-bus.
def median(lst):
LST = sorted(lst)
Als len(lst) < 1:
retourneren geen
Als len(lst) %2 == 1:
lst terug [((len (lst) + 1) / 2)-1]
anders:
Return float(sum(lst[(len(lst)/2)-1:(len(lst)/2)+1])) / 2.0
-Dit is een procedure voor het krijgen van het gemiddelde aantal van een lijst van lezingen. Het zal nodig zijn
write_byte (0x1E, 0, 0b01110000) # 8 monsters bij 15Hz instellen
write_byte (0x1E, 1, 0b00100000) # 1.3 krijgen LSb / Gauss 1090 (standaard)
write_byte (0x1E, 2, 0b00000000) # continue bemonstering
schaal = 0.92
x_offset = 45
y_offset =-82
-Verklaringen voor de sensor nodig. De eerste 3 regels instellen monster lezingen en krijgen. De vierde stelt de schaal. De 2 laatsten zijn waarden af te stemmen op de sensorgegevens. Ze kunnen variëren van sensor naar sensor, maar allermeest naar de tijd zij niet van invloed op veel van de lezing.
def get_heading():
x_out = (read_word_2c(0x1E,3) - x_offset) * schaal
y_out = (read_word_2c(0x1E,7) - y_offset) * schaal
z_out = (read_word_2c(0x1E,5)) * schaal
rekening houdend met = math.atan2 (y_out, x_out)
Als (rekening houdend met < 0):
rekening houdend met += 2 * math.pi
Als ((math.degrees(bearing) + 90) < 360 en (math.degrees(bearing)+90) > 90):
rubriek = math.degrees (lager) + 90
# print round(heading,0)
Elif math.degrees (lager) + 90 == 360:
rubriek = 0
# print round(heading,0)
anders:
rubriek math.degrees (lager) =-270
# print round(heading,0)
rubriek terug
-Dit is de belangrijkste lezing-procedure. Het geeft u de kop van de lamel in graden tussen 0 tot 359
Dus nu dat we alle declaraties en procedures, de enige ontbreekt voorbij is de volgende code invoegen in het hoofdprogramma:
DIR = 0
Lista = range(500)
afdrukken ('lezen van 500 keer windrichting gescheiden door 10mS elke voor het vloeiend maken laatste lezen...')
voor dd in bereik (0, 500):
Lista [dd] = get_heading()
time.Sleep(0.01)
richting = median(lista)
afdrukken ('Done!')
afdrukken ('Wind dir is', richting)
Ik vond dat slechts één lezing doen leiden enorme variaties in de richting, tot zou dus wat we hier doen is het nemen van 500 metingen gescheiden door 10mS elke en uitvoeren van het gemiddelde van alle waarden. Alle regels afdrukken kunnen worden geschrapt aangezien ze alleen dienen voor foutopsporing.
Vergeet niet de upload-lijn om aan te werken wunderground, nu we meer gegevens hebben, dus je moet zetten in windir = richting, in mijn geval.
Cheers, mensen!