Pagina's

zaterdag 28 december 2019

codeschijf windrichting


______________________________________________________________
De kodeschijf.
Deze 4-bits codeschijf stelt mij in staat om de windrichtingen in 16 verschillende richtingen te kunnen detecteren.
N - NNO - NO - ONO - O - enz.

Als je de gewone binaire codering zou gebruiken, dan zal je regelmatig verkeerde informatie verkrijgen. Bij die codering heb je regelmatig een overgang van meerdere bits tegelijkertijd. En in de praktijk kan je die gelijktijdigheid nooit verkrijgen.

Daarom is de grey-code bedacht.

Elke overgang naar een andere stand heeft de gray-code dus maar één bit die verandert.
Bij de binaire code is bij de overgang van 15 naar 0 (of andersom) het nadeel het grootst; alle 4 bits veranderen. Dit kan in de praktijk nooit exact gelijktijdig. Je zou daarom foutcodes kunnen krijgen die overeenkomen met windrichtingen die veraf liggen van de eigenlijke richting.
Ophet display zie je dit verschijnsel dan als snel heen en weer flitsen van verkeerde windrichtingen.

Overigens ben ik bezig of ik de windrichting kan laten zien met een grote pijl in plaats van de combinaties van de letters NOZW.



vrijdag 27 december 2019

windkracht tabel KNMI


De Beaufortschaal (website KNMI). tijd tussen 2 pulsen
van tot
Beaufort [B] Benaming  m/sec km/h msec msec
0 Windstil  Rook stijgt (recht) omhoog
1 Zwak  0,9 3,2 2330 466 Rookpluimen geven richting aan
2 Zwak  2,5 8,8 437 212 Bladeren ritselen
3 Matig  4,4 15,8 206 129 Bladeren en twijgen voortduren in beweging 
4 Matig  6,7 24,1 127 89 Stof en papier dwarrelen op
5 Vrij krachtig  9,4 33,7 87 65 Takken maken zwaaiende bewegingen
6 Krachtig  12,3 44,3 65 51 Grote takken bewegen
7 Hard  15,5 55,8 50 41 Bomen bewegen
8 Stormachtig  19,0 68,2 41 34 Twijgen breken af
9 Storm  22,6 81,4 34 29 Takken breken af. Dakpannen waaien weg 
10 Zware storm  26,5 95,2 29 25 Bomen worden ontworteld
11 Zeer zware storm 30,6 110,0 25 21 Uitgebreide schade aan bossen en gebouwen
12 Orkaan  21 Niets blijft meer overeind

het weerstation / windkracht

_______________________________________________________

Het windmolentje

Afbeeldingsresultaat voor anemometer
... of anemometer.
Deze heb ik kant en klaar gekocht voor een paar euro. Het staat al een poos op het dak en geeft mij inzicht in de werking ervan. De waarden kloppen goed met de actuele weersverwachting, dus is redelijk betrouwbaar.
Op een display laat ik de momentele windkracht zien. Verder de gemiddelde windkracht van afgelopen uur en afgelopen dag (etmaal). Verder geeft het de windpieken (maximale windstoot) aan van afgelopen uur en dag.
Verder doe ik niks met de data.

De verwerking van de pulsen is een ander verhaal. Omdat het van oorsprong een reed-contact is, zit daar veel dender op.
Om dit te omzeilen heb ik een erg ingewikkeld programma geschreven, dat één keer per 5 seconden een meting doet. Het bijverschijnsel hiervan is dat ik pieken in de windkracht niet altijd zie, en dat is jammer.
Maar onlangs heb ik in een ander project met een encoder ontdekt, dat die dender misschien op te vangen is door een condensator te plaatsen op de ingang van de processor. Als dit werkt, kan ik de ingang laten uitlezen via een interrupt, waardoor ik een zeer nauwkeurige meting krijg. Maar het belangrijkste hierin is, dat ik harde windstoten niet misloop. Maar dit moet ik nog uitvoeren op de windmeter.

Nu is de windsnelheid via een tabel (van internet KNMI, zie aparte post) rechtstreeks af te leiden van de tijd tussen twee pulsen van de windmolen.

Er is een moeilijke formule beschikbaar om de tijd tussen twee pulsen om te zetten in de windkracht in Beaufort. Maar hier heb ik dit in de tabel geplaatst.

In het arduino-programma ziet dat er zo uit:


int windtabel[] = {777,286,159,104,75,57,45,37,31,26,23,21};
.....
for(B=0; B<=12; B++)
    {
      if(tijd >= tabel[B])
        {
          break;
        }
    }

waarbij <tijd> de tijd is in msec tussen 2 pulsen. Na de break geeft <B> de windsnelheid in beafort.


Contactdender om zeep.

Ik vertelde al dat ik last heb van contactdender. Hierdoor is bijna niet te werken met interrupt, en dat is juist heel mooi, waardoor je zeer nauwkeurige registratie krijgt tot op de miliseconde.
De sugestie voor het plaatsen van een condensator op de ingang van de microcontroler is zo'n gekke nog niet, want het werkt! Zowel in RISING als in FALLING werkt de interrupt prima.

In het arduino-programma ziet dat er zo uit:

const byte reed = 3;
volatile unsigned long contact_tijd = 0;
unsigned long vorig_tijd = 0;

unsigned long tijd = 0;
......
void setup() 
{
     attachInterrupt(digitalPinToInterrupt(reed),contact,FALLING);
     vorig_tijd = millis();
}


void loop()
{
     tijd=contact_tijd - vorig_tijd;
     if(tijd != 0)
        {
           Serial.println(tijd);
           vorig_tijd = contact_tijd;
         }
}

void contact()
{
    contact_tijd = millis();
}

mijn werkplek




de plaats van ontwerpen

Al een paar arduino's en andere dingen,
waarmee ik regelmatig bezig ben.

De deelprojecten


______________________________________________________________
Een kort overzicht:

  1. weerstation.
  2. badkamer ventilatie.
  3. koffiezetter senseo timer.
  4. bedieningsstation in de kamer.
  5. handdoeken droger badkamer.
  6. medicijnen wekker.
  7. data opslag.
  8. master.
Één en ander zal nog wel aangepast worden tijdens het project, maat dit geeft een inkijkje hoe ik het op het moment zie.

Momenteel zijn de badkamerventilatie en een windsnelheidsmeter als losse eenheid actief.


Algemene opzet van het project


_____________________________________________________
De bedoeling is om de verschillende deelprojecten appart te laten werken middels een eigen processor, de Arduino Nano. Dit is een kleine micro processor, gelijk aan de Uno, maar dan veel kleiner en veel goedkoper. € 3,95. Het heeft dezelfde mogelijkheden als de Uno, dat het paradepaardje is van Arduino.
Hierdoor kan ik de deelprojecten simpel houden en overzichtelijk.

Al deze deelprojecten worden aan elkaar gekoppeld met een netwerk, de RS485. Dit is een netwerk dat hoegenaamd storingvrij werkt met bekabeling tot 1200 meter.


Voor het koppelen van het netwerk maak ik gebruik van RJ45 stekerverbindingen. De RJ45 is een degelijke verbinding. De  verbinding moeten wel doordacht zijn. De 2 datalijnen moeten in ieder geval een twisted pair zijn.


Om alle processen in goede banen te leiden en alle data te verzamelen maak ik gebruik van een "master"procesor, een Arduino Uno. De keuze voor de UNO is omdat ik daar het meeste mee heb gewerkt, is me erg vertrouwd.

De data wordt hier opgeslagen op een micro-SD kaartje. Van hieruit kan de data ook naar een exel-bestand worden gezet voor statistieken en dergelijke. Zo krijg ik een goed overzicht van hetgeen ik aan data heb verzameld.

Een goed voorbeeld van statistieken is het weertsation dat op de planning staat. Al de data die dit oplevert kunnen een goed beeld geven over het huidige klimaat.


Het verzamelen en uitwerken van data is voor mij een uitdaging op zich. Ik ben altijd al met exel en statistieken en grafieken bezig geweest. 

Voorbeeld is het verbruik van de auto, afhankelijk van het weer en van de rijstijl, bijvoorbeeld maximum snelheid op de snelweg.
Het weer is dus een volgende uitdaging.

Doel van het Blog

Ik kom er achter dat het maken van het Blog een doel op zich is geworden in mijn hoofd.

Natuurlijk is de Blog bedoeld om geintresseerden te informeren over mijn Arduino Thuis-project. En ook ikzelf kan hiermee alles even op een rijtje zetten wát ik eigenlijk wil met het project. Respons is hierbij erg belangrijk.
Zo heb ik gisteren met mijn zoon uitgebreid gepraat over de algemene opzet van het project. 


donderdag 26 december 2019

Inleiding

Goede dag allemaal.

In april ga ik met pensioen, een mooie gelegenheid om wat meer aan hobby's te doen.


Één van die hobby's is besturingen maken met Arduino, een microprocessor-voor-iedereen.


Ik wil beginnen met het maken van een weerstation, die ik zelf helemaal in elkaar knutsel.


Maar tussendoor kunnen nog leuke projecten voorbij komen die wat meer voorrang vragen. 


Ik zal regelmatig aan zelfstudie moeten doen om bijvoorbeeld de werking van componenten te leren kennen, en hoe aan te sturen vanuit Arduino.


Maar ik ben ook opgelopen tegen het regelmatig vergeten van mijn o zo broodnodige medicijnen. Ik wil een doosje maken in combinatie met een pil-wekker, en die alleen blijvend uit te zetten is als het doosje is open geweest.


Ik ben altijd al met besturingen en computers bezig geweest. Dat begon al in het tijdperk van de Commodore 64. Jongeren onder jullie zullen zich afvragen, waar ik het over heb. 

Nou, die commodore is een computer, in het begin nog met cassettebandjes als data opslag, met een intern geheugen van 64kB, waarvan 32kB voor de gebruiker bestemd. En daar deed ik best wel veel mee, tot een heuse tekstverwerker aan toe.
Ook deed ik veel in machinetaal, de basistaal van iedere computer. Hiermee omzeilde ik de o zo trage BASIC-compiler. 

Tot zover mijn eerste post.