Étape 10 : Projet mise à jour 1 - direction du vent
Il a été un moment depuis la création de cette instructable et les choses sont quelque peu améliorée.
La station météo s’exécute et télécharge maintenant les deux vitesse et direction du vent. Je vais maintenant vous montrer comment fonctionne la direction du vent. C’est aussi lire et télécharger índex d’UV.
Il sont a quelques projets qui utilisent une configuration de reed predisposées pour obtenir le titre de vent. J’ai toujours pensé que c’est une solution assez simple, mais de nos jours avec compas numériques, il semble plus approprié d’utiliser un de ces petits appareils. En outre, étant donné que mon objectif était d’exécuter tous les capteurs sur bus I2C, j’étais sûr que j’ai pu trouver celui qui s’inscrirait dans ce type d’autobus. Alors j’ai fait.
J’utilise un HMC5883L, qui est une boussole numérique 3 axes, à l’aide du bus I2C. Vous pouvez trouver des modules soudés prêts sur ebay aussi bon marché que 1 euro. Il suffit de rechercher et vous les trouverez à coup sûr.
Un petit conseil avec ce capteur. Je pense que ce genre de capteurs sont très sensibles, puisque j’ai réussi à en tuer un. Après quelques jours d’obtenir de fausses indications d’elle, j’ai eu un nouveau que tous trié. Il suffit de faire attention, il ne pas tomber trop souvent, beaucoup.
L’autre partie importante que j’ai utilisé s’appelle une bague collectrice. Ce qui est une bague collectrice ? C’est un petit appareil qui vous permet d’avoir un axe de rotation et de connexions en même temps. Il y a plusieurs paramètres qui définissent ce dispositif. L’un est le nombre de voies (ou fils) et autre est le courant nominal, accepté par les fils. Depuis lors, nous sommes seulement capteur de lecture et dans ce cas I2c, nous aurons besoin 4 fils et le courant est aussi bas que vous pouvez obtenir.
J’ai obtenu un fil 6, faible courant qui est arrivé d’avoir le diamètre de l’axe identique à la mesure interne de certains tuyaux en plastique que j’ai utilisé pour construire la girouette.
Les diverses photos montrent comment j’ai réussi à construire la chose. Il n’est pas joli mais il dows le travail.
LOGICIEL
C’est une chose assez simple à lire de la MCH. J’ai pris quelques regards sur la feuille de données, faite quelques recherches sur le web, et je suis arrivé à ces lignes de code pour dire les choses de travail :
def write_byte (adresse, adr, valeur) :
bus.write_byte_data (adresse, adr, valeur)
-Procédure d’écrire des données dans une adresse spécifique du bus I2C.
def median(lst) :
LST = sorted(lst)
si len(lst) < 1 :
Aucun retour
si len(lst) %2 == 1 :
retour de lst [((len (lst) + 1) / 2)-1]
autre chose :
retour float(sum(lst[(len(lst)/2)-1:(len(lst)/2)+1])) / 2.0
-Il s’agit d’une procédure pour obtenir le nombre moyen d’une liste de lectures. Il sera nécessaire
write_byte (0x1E, 0, 0b01110000) la valeur # 8 échantillons à 15Hz
write_byte (0x1E, 1, 0b00100000) # 1.3 gagner LSb / 1090 Gauss (par défaut)
write_byte (0x1E, 2, 0b00000000) échantillonnage continu #
Scale = 0,92
DECALAGE_X = 45
y_offset = -82
-Déclarations nécessaires pour le capteur. Les 3 premières lignes mis en place des lectures des échantillons et gagner. Le quatrième définit l’échelle. Les 2 derniers sont des valeurs pour accorder vers le haut de la lecture de la sonde. Ils peuvent varier d’un capteur, mais la plupart du temps elles n’affectent pas beaucoup la lecture.
def get_heading() :
x_out = (read_word_2c(0x1E,3) - DECALAGE_X) * échelle
y_out = (read_word_2c(0x1E,7) - y_offset) * échelle
z_out = (read_word_2c(0x1E,5)) * échelle
portant = math.atan2 (y_out, x_out)
Si (portant < 0) :
portant += 2 * math.pi
Si ((math.degrees(bearing) + 90) < 360 et (math.degrees(bearing)+90) > 90) :
position = math.degrees (roulement) + 90
# round(heading,0) impression
Elif math.degrees (roulement) + 90 == 360 :
position = 0
# round(heading,0) impression
autre chose :
position = math.degrees (roulement) -270
# round(heading,0) impression
retour rubrique
-C’est la procédure de lecture principale. Il vous donne le titre de l’aube en degrés de 0 à 359
Donc maintenant que nous avons toutes les déclarations et les procédures, la seule qui manque passé est Insérez le code suivant dans le programme principal :
dir = 0
Lista = range(500)
imprimer ('lu 500 fois vent direction séparés par 10mS chaque pour le lissage final lecture...')
pour le dd dans l’intervalle (0, 500) :
Lista [dd] = get_heading()
Time.Sleep(0.01)
direction = median(lista)
imprimer (« Done! »)
imprimer (« vent dir est », direction)
J’ai trouvé que faire juste une lecture se traduirait par énormes variations dans le sens, donc ce que nous faisons ici est de prendre 500 mesures séparées par 10mS chaque et la sortie de la moyenne de toutes les valeurs. Afficher toutes les lignes peuvent être supprimées car elles ne servent qu’à des fins de débogage.
N’oubliez pas de mettre à jour la ligne de chargement à wunderground, maintenant nous avons plus de données, vous devez mettre dans le dossier %windir% = direction, dans mon cas.
A bientôt, les gens !