Pagina's

zaterdag 7 maart 2020

RS 485

5-6-2021

Een leuke uitbreiding op dit onderwerp: soort van bibkiotheek.

Met een bibliotheek voor bepaalde functies in een totaalprogramma, waarbij die functies op een andere plaats staan dan het programma, bereik je dat wijzigingen in die functies gemakkelijker gedaan kunnen worden. Ze staan niet overal her en der in het programma, maar mooi centraal.

Nu ben ik al eens meer bezig geweest om bibliotheken te doorgronden, maar dat is nog een brug te ver voor mij.
Als tussenoplossing maak ik nu gebruik van tabbladen van het IDE ontwikkelplatforn van arduino. Die zijn óf pas ingevoerd met een automatische update, óf ik heb ze nooit gezien. Makkelijk zo'n handleiding, die er niet is.

Die tabbladen gebruiken voor functies heeft het nadeel dat alleen de eigenlijke functies in het tabblad opgenomen kan worden. Initialisaties ed. moeten nog gewoon in het hoofdpragramma.
Maar zeker voor zo iets groots als mijn RS485 protocol werkt dit al heel erg goed. En wat een gemak hierdoor! Bij wijzigingen die ik en elk programma wil doorvoeren, hoef ik nu alleen nog maar dat tabblad te vervangen. En dat kan gewoon in verkenner! (is uitgeprobeerd)

1-2-2021

Er doet zich nu een belangrijke ontwikkeling voor, dat het vermelden de moeite waard is.

Dataconflicten.

Ja, ik kon erop wachten, het zou ooit wel eens kunnen escaleren.

Omdat ik twee systemen door elkaar gebruik, de RS485 en de softwareSerial, is het niet uitgesloten dat het een keer mis zou gaan.

Even een stukje diepzinnigheid:

RS485 is gemaakt om over lange kabels data te kunnen verzenden. Dit is ondergebracht in een klein simpel ic-tje. Bij mij de MAX485. Zie op 11-3-2020.
Dit ic-tje kan op twee manieren gebruikt worden:
  1. half duplex. Dat wil zeggen óf zenden, óf ontvangen. Maar altijd over de twee dezelfde draden in de kabel.
  2. full duplex. Dat wil zeggen met de mogelijkheid van én zenden én ontvangen tegelijkertijd. Maar dit over vier draden.
Ik heb toendertijd gekozen voor half duplex.

Op de arduino zelf maak ik gebruik van softwareSerial. Een software variant van de seriele dataversturing. Dit kan in princiepe op elke pen geconfigureerd worden. Het maakt echter wel gebruik van de eigen vaste seriele buffers. Hoe precies, is me niet duidelijk.

De eigen seriele overdracht op de arduino, heeft de eigenschap dat zowel zenden als ontvangen tegelijkertijd kunnen plaatsvinden. Met de lees en de schrijffuncties kunnen die buffers aangesproken worden.

Maar waarom dan de softwareSerial variant gebruiken?
Om de doodenvoudige reden, dat ik anders mengvormen krijg van de netwerkdata  en de monitor-data. Dan weet je helemaal niet meer waarnaar je moet kijken.

De grote vraag is echter, kan die gelijktijdigheid ook in de softwareSerial plaatsvinden.

Ik heb destijds gekozen om dat maar af te wachten. 
En nu blijkt toch dat ik dataconflicten krijg.
En dat is prima te monitoren.
Ik zie duidelijk dat de ene datastroom wordt onderbroken door een andere, waarbij die andere, in dit geval, overheerst. Hierdoor heb ik een verminkte datastroom, en is daardoor onbruikbaar geworden.

Nu ben ik op zoek gegaan naar de eigenlijke RS485 programma's.
Ik heb er twee onder de loep genomen:
  1. Het eigen protocol van arduino.
    Deze is heel vreemd. Het 485-ic heeft een RX en een TX, en nog twee schakellijnen.
    Arduino gebruikt de RX niet, maar schakelt in plaats daarvan de schakellijnen van het ic.
    Je zou dit kunnen vergelijken met een kamer met een lamp. Ik kan de lamp aan en uitschakelen met de schakelaar op de kamer, maar ook met de hoofdschakelaan in de meterkast. Ja, de lamp gaat inderdaad hiermee ook aan en uit, maar ik vind dit niet fraai. Bovendien kreeg ik het destijd niet werkend.
  2. Een protocol van iemand anders.
    Op zich vind ik dit een heel goede, als je erop voorbereid bent, of toch nog start met een nieuw project. Dan kun je er rekening mee houden.
    Want wat doet het?
    Er zijn vele mogelijkheden, die ik eerlijk gezegd niet helemaal goed heb bekeken. Allemaal onder het mom van conflictvermijding van data. Het safe maken van de data.
    Zo is er een echo-functie (teruggeven van dezelde data), waarop eventueel de data opnieuw wordt verzonden.
    Ook foutdetectie, waardoor de data opnieuw word verstuurd.
    En ook nog meer mogelijkheden.
    Of deze mogelijkheden door mij aan of uit gezet kunnen worden, heb ik nog niet bekeken.
    Maar voor dit moment vind ik dit nog te ingewikkeld.
    Bovendien wordt het oorspronkelijke serialprotocol van arduino om zeep geholpen ten behoeve van zijn 485 protocol. Hier weet ik dus niet wat dit voor concequenties heeft voor andere dataoverdracht, bijvoorbeeld de USB, en dus het monitoren van het programma.
Al met al heb ik besloten om mijn huidige methode uit te breiden met een bezet-lijn.
Dit houdt in, dat deze geschakeld moet wordn als er iemand wilt zenden. Alle andere stations kunnen daarop testen. Hiermee hoop ik gelijktijdige verzending te voorkomen, of zéker tot een minimum te beperken. Ik schat zelf in dat die gelijktijdigheid met een factor van enkele duizenden wordt beperkt.

In het beginstadium van de opbouw van het netwerk, ben ik al bezig geweest met de mogelijkheid van stuur-lijnen. Dat heb ik toen niet toegepast, eerst maar eens kijken hoe het zou gaan.

Momenteel heb ik een datastroom van een stuk of tien datatreintjes per minuut. Eén datatrein kan bestaan uit iets minder dan 10 bytes tot enkele tientallen bytes. Maar ondanks de grote pauzes tussen de treinen, die zeer willekeurig plaatsvinden, komen toch dataconflicten voor.
De snelheid van de data is bij mij 4800 bytes per seconde.

Praktijk:

Dit houdt in dat ik één draad extra in de kabel moet gebruiken voor de bezet-lijn. Ik had er 4 van de 8 in gebruik, dus kan prima zo.
En ik moet een I/O poort op de arduino over hebben voor de bezet-lijn. Helaas zal dit nu steeds een andere pin moeten worden, of ik moet meer wijzigen.
Al met al moeten alle staions onder het mes, zowel softwarematig als hardwarematig.


12-4-2020

Nu ik wat meer ga uitbreiden, en dus de bus RS485 ga uitbreden, bedenk ik me toch over de afsluitweerstanden van 120ꭥ, die "noodzakelijk" zijn voor een goede werking over lange leidingen. In het huidige netwerk heb ik ze weggelaten. Over die korte leiding werk dit prima.

Nu herinner ik me een situatie waarbij ik problemen had met de maximale capaciteit van de 5V van het NANO-bordje. Die was voor een bepaalde situatie niet genoeg. Na aansluiting op de losse spanningesregelaar functioneerde het ineens wél goed.

Het zou zomaar eens kunnen zijn dat de RS485 met hetzelfde probleem zit.
Als je 2x 120ꭥ op 5 volt zet, moet er zomaar ineens 80mA geleverd worden. Het maximum is 200mA.

Dus, als ik de communicatie over de extra regelaar wil laten lopen, moet ik daar wel vanaf nu mee beginnen, én het huidige aanpassen. Op een veel later tijdstip alles aanpassen is ondoenlijk, dus nu maar gelijk doen.

Ik heb net weer een testopstelling gemaakt met een netwerkje. Zowel met interne als met externe spanning van 5V gewerkt. In beide gevallen blokkeert de weerstand van 120ꭥ de communicatie.
Ik ga er dan maar vanuit dat het niet nodig is. Ik hoop dat dit in de toekomst geen problemen gaat geven.

______________________________________________________
16-3-2020.
Inmiddels heb ik de RS485 echt operationeel. De ventilatieklep in de keuken kommuniceert met de basis in mijn werkkamer. En dat is kicken!
En in twee richtingen! Stoer hoor.
______________________________________________________
11-3-2020.

De echt eerste RS485 verbinding had heel wat voeten in aarde.
Ik wilde de ventilatie-klep separaat uitvoeren en RS485 gebruiken voor comando's om de klep in te stellen. In het bestaande gedeelte heb ik de RS485 bibliotheek moeten installeren.
Ik kreeg het spul maar niet werkend. Bovendien ontdekte ik dat de hardware, de ontwikkelbordjes, niet 100% betrouwbaar zijn. En dat is een tegenvaller. Want op die breadboards test je eerst alles uit.
Na een aantal dagen zonder bevredigend resultaat, heb ik maar eens 2 programma's naast erkaar gelegd, een werkend programma naast het programma, waarin de RS485 ingepast moest worden. Hierin ontdekte ik dat ik de noodzakelijke setup was vergeten van de bilbiotheek. (:

En nu werkt het dus wel, hoewel nog met korte draadjes.
Straks ga ik er een lange kabel tussen hangen. Ben benieuwd.




De configuratie van de RJ45 stekerverbindingen heb ik inmiddels ook moeten maken. Hiervoor is niks specifiek vastgelegd.
Deze opstelling wordt uiteraard overal in dit systeem toegepast.

De A en B is de communicatielijn.
De signalen zijn altijd tegengesteld aan elkaar. Dit is dé eigenschap van het RS485 protocol. Hiermee kan je lange leidingen van maximaal 1200mtr halen.
Verder heb ik de 12v meegenomen in de kabel. Hiermee voedt ik alle submodules.
In elke module bevindt zich een 12 naar 5 volt omvormer. Zolang de 12 volt niet onder de 7 volt uitkomt, ben ik gewaarborgt over mijn 5 volt, hetgeen de voeding is voor al mijn modules / onderstations.

Als kabel gebruik ik (reeds gebruikte) CAT5 kabel, unshielded. De twisted pair zorgt voor de imuniteit voor andere signalen, ook de pairs onderling.

Het MAX485 ic vormt het hart van de RS485 communicatie. Deze zet de Rx Tx seriele communicatie om in de harde A en B lijn.
Met de R/W lijn kies ik of ik wil zenden of ontvangen. Standaard staat die lijn altijd op ontvangen. Data wordt daardoor niet gemist.
______________________________________________________
7-3-2020.

Afgelopen tijd ben ik druk geweest met het behandelen van het netwerk RS485 protocol. Maar de praktische uitvoering had heel wat werk in petto.

Arduino kent een bibliotheek voor een origineel RS485 netwerk.
Eigenlijk alle fora gebruiken echter software serial als basis, maar met een RS485 ic.
Door het gebruik van het ic bereik je wel de voordelen van de hardware, namelijk gebruik van lange leidingen.
Maar zoals ik al zei, de diverse fora gebruiken niet het originele RS485 bibliotheek. Deze bilbliotheek kent een groot manco, namelijk de pin-bezetting. Nu kan deze aangepast worden, maar is niet volledig.
Ik heb van allles uitgeprobeerd, maar het lukt me echt niet.

Dus moet ik ook mijn toevlucht nemen tot het software serial bibliotheek.
Deze ondersteunt Rx en Tx protocol op andere dan de standaard penbezetting.
Nu ben ik ook door schade en schande wijs geworden, en ontdekt dat niet alle pennen van de arduino geschikt zijn voor seriele overdracht. Wat heeft me dat tijd gekost om dáár achter te komen. Maar eenmaal onderkend, loopt het ineens heel erg soepel.

In een proefprogramma heb ik het volledige netwerk onder de knie gekregen. Deze kan ik nu in het ventilatieproject inpassen, eerst nog in het huidige "thuis" programma, later in het geheel.

Weerstanden.
Diverse websites laten schema's zien met diverse weerstanden in de hardware rondom de rs485 ic.
Er zijn echter ook complete boards beschikbaar, maar die vind ik veel te groot. en te duur.
Ik heb dus een aantal ic's gekocht voor een paar duppies per stuk. En dan zie ik wel wat nog daaromheen gebouwd moet worden.

Websites laten zien dat in ieder geval de A-B lijn afgesloten moeten worden met weerstanden van 120ꭥ. Ook een voortrekken met 560ꭥ naar +5v en gnd wordt aangeraden.
Nou, in elk van die gevallen slaat de ic dicht. maw: doet dan niks meer.
Maar die weerstanden zijn wel essensieel, zeggen diverse websites.
Maar eens uitproberen.
Een kort draadje van 10 cm werkt prima in de testopstelling.
Een hussel kabel, ik denk 50 meter, werkt een twisted pair prima, zonder weerstanden.
Ook ontdekte ik dat de (noodzakelijke???) gnd, die meegestuurd zou moeten worden, geen effect had.

In de toekomst zie ik wel verder, wat het uiteindelijk moet worden.



overwegingen opbouw blog


_____________________________________________________
Onlang ben ik getipt over het aanvullen van oudere blogs. Nergens is terug te vinden dat dit is gebeurd, je moet er zelf toevalling maar achter komen.

Tja, hoe lossen we dat nou op.

Allereerst wist ik niet dat mijn "kijkers" het gehele blog in zicht kregen, de meest recente bovenaan.
Ik, als blogger, zie uitsluitend de betreffende blog, tenzij ik niet inlog.

Als oplossing wil ik bovenaan elk deel-blog, dus per onderwerp, een revisieregel plaatsen. Die zijn dan snel door te lopen.
In bestaande blogs zal ik proberen de revisies te achterhalen.
Dit ga ik niet meer uitvoeren. Want de revisie-blog is voldoende.

Ook een "revisie-blog", die altijd bovenaan staat is de overweging waard. Ik zal eens kijken naar de mogelijkheden.
Dit is alleen te realiseren door telkens een nieuwe revisie-blog aan te maken en het oude te verwijderen. Dit is vrij simpel. Ga ik dus zeker doen.

Ik wil ook de nieuwe bewerkingen in elke blog BOVENAAN plaatsen. Dit is de extra bewerking wel waard.



zaterdag 15 februari 2020

LCD display 40x4

15-2-2020.

Ik wil op twee plaatsen een flink display plaatsen: In de huiskamer als algemeen bekijk- en bedienstation, en in mijn werkkamer als masterstation.

Nu ben ik al aardig lang bezig om het gekochte display werkend te krijgen.
Op internet is best wel veel te vinden hierover (ik had geen gegevensbladen), het kan bijna niet mis gaan.
Maar bij mij ging het dus mis.

Ik bleek te beschikken over een bijna niet bestaand display. Tenminste, niets ervan op internet te kunnen vinden.
Nu blijken er verschillende pin-layouts te bestaan voor de displays 40x4. En als jouw display nergens te bekennen is op internet, wordt het toch erg moeilijk.

Diverse fora op internet zijn nauwelijks ervaren met dit grote display.
De één heeft het over het "gewoon aansluiten op de I2C bordje" en het ontkennen van problemen, tot het diep ingaan op het verschijnsel 40x4. Want, er zitten hier 2 stuks stuur-ic's in, elk steeds voor 2 regels. En er moet hier bewust op geschakeld worden.
De éne heeft het over buitenom schakelen van de E-lijnen (want hierover gaat het), de ander gebruikt de niet gebruikte RW-lijn als tweede E-lijn.

Nu heb ik al iets gevonden waar ik straks wat aan heb, en kan ik zelfs met I2C werken. En dat kost me geen I/O-lijnen, want I2C heb ik al in gebruik, en plug ik er zo bij.

Na overleg met de leverancier van het display, heb ik de display's teruggestuurd. Want ook zij zelf kwamen er niet uit.

Bij een andere webwinkel heb ik er 2 gekocht. jaja, nu wel met documentatie.
Ze hadden er zelfs twee, elk met een tegengestelde pin-layout van de datapennen. Maar wel duidelijk!

Het is dus nu wachten op het display.
_____________________________________________________
7-3-2020.

De nieuwe displays heb ik reeds binnen. Het is een veel gebruikte versie, dus dat gaat helemaal goed komen.
Binnenkort ga ik er mee aan de slag.
_____________________________________________________
30-3-2020

Na een drukke periode en een tussengeschoven project "koelkast", heb ik afgelopen week tijd kunnen vinden om eens met een display aan de gang gaan.

Dit display is in ieder geval een gangbaar type; is veel te vinden op internet.
"Dat gaat dus goedkomem"..... jaja...

Natuurlijk met I2C aan de gang gegaan. Die kreeg ik echt niet werkend. Ja, chinese tekens (is 2e tekenset in het geheugen), maar europees... ja, uiteindelijk wel íets. Maar het leek wel alsof er 2 datalijnen verdraaid waren. En dat klopte ook wel als ik naar de tekenset keek. Het waren de 2 laagste bits van de 4 datalijnen.
Dan zou je denken, dan draai je gewoon die twee om? Ja, eigenlijk wel zou je denken. Maar die 4 datalijnen worden ook gebruikt voor de commando's. Dus als ik twee datalijnen omdraai, heb ik gewoon helemaal niets meer, want het display weet dan echt niet meer wat het moet doen.
Conclusie: Vergeet het I2C maar!!

Toen werd het spannend.
Schema's (van internet) opgezocht, hoe aan te sluiten.
Oei, erg veel variaties hoor. Maar ook heel erg veel commentaren in fora's. Doolhof alom dus.

Resultaat was wel een meer stabiele display, maar steeds 2 regels tekst. Ook mijn bilbliotheken voor het aansturen van dit display waren een puinhoop geworden.

De bibliotheek was een verhaal appart!
Een bibliotheek is een verzamelplaats van stukken programma met heel specifieke taken. (klok, display, vochtsensor, temperatuur en ga zo maar verder). Zo'n taak kan je gewoon opnemen in je eigen programma.
En binnen zo'n takenpakket zijn er ook weer heel erg veel varianten, En dit is dus écht een nadaal van open-source. Dus wederom een zoektocht....

Nu kent Arduino twee plaatsen voor de bibliotheek. Eén bij de installatiebestanden van Arduino, en één in een zelfgemaakte map arduino/librarys in documenten. Arduino accepteert beide.

Het grote nadeel daarvan is dat je niet weet waar arduino die gegevens vandaan haalt. Als je meerdere versies in die vereiste mappen hebt staan, dan wordt het dus erg lastig voor de programmeur (ik dus). Je denkt een goed programma gevonden te hebben, installeerd die en....... doet wéér niks. Maar ondertussen neemt arduino gewoon het oude programma, terwijl je denk dat het de nieuw neemt, of eigenlijk niet zo bij nadenkt.

Uiteindelijk ben ik hier achtergekomen. Ik heb alle bilbliotheekprogramma's in een tijdelijke bibliotheekmap gezet (want weggoien leek me te rigoreus), zodat ik zeker wist dat arduino het door jou gekozen programma zou nemen.

Ik had inmiddels al gezien dat er veel te licht wordt gedacht in fora's over dit grote display.
Ik herinnerde me iets gezien te hebben over twee keer een grogramma voor een 40x2 te gebruiken. Want een goed werkend programma voor een 40x2 heb ik, alleen wist ik niet hoe ik er twee moest benoemen.
Na een korte zoekactie bleek ik zelf de link van dat forumbericht opgeslagen te hebben.
Een voorzichtig hoera..... en.... HET WERKT!!!!!
Ppppppfffffffff..........

En dan nu maar even een fotootje erbij gemaakt. Dit is één van de teksten die ik gebruikte in het projectje "laatste werkweek".

Het is welliswaar geen I2C, maar ik ben zeer verheugd met dit resultaat.
Hiervoor moet ik 7 datalijnen van de arduino gebruiken. En ik zal dus in complexere projecten aan de slag moeten met uitbreidings-ic's. Nu heb ik er pas 2 gekocht (kosten geen drol), dat gaat dus goedkomen.
Een voorbeeld waar ik zo'n ic kan gaan inzetten is het toetsenbord. Maar dat is een ander blog.

Het programma hiervoor is wat complexer dan gewoonlijk.
Normaal geef je een positie op in een kolom,rij-combinatie, en je geeft een print. Die tekst begint dan op die plaats die je hebt opgegeven.

Maar zoals ik even terug al zei, ik heb de bibliotheek gebruikt voor een 40x2 display, dat ik 2x gebruik.
In de definities van het te schrijven programma, moet je dus ook 2 displays benoemen, bijvoorbeelt als LCD1 en LCD2. En die moet je ook steeds goed uit elkaar houden, wat anders komt er tekst op een plaats te staan die je helemaal niet wilt.
Het programma wordt daardoor best complex. Het wordt al helemaal lastig als je naar posities op het display wilt rekenen, dus het programma zelf laten bepalen waar iets gezet moet worden. En dat komt best wel vaak voor.

Nu hebben ze functies, of routines, bedacht in de programmeertalen. En die zijn daardoor heel mooi te gebruiken.
Zo heb ik de plaatsbepaling al in één enkele functie kunnen stoppen.
De print is een ander ding, maar daar zal ik ook wel uitkomen. Want ik heb er nog niet echt veel tijd in gestoken.
_____________________________________________________
5-4-2020
En dat is nu gelukt voor de meest gangbare data. Dit betekend dan voor vaste teksten en voor variabelen zonder opmaak.

Ik heb nog iets bijzonders gezien: ik kan twee routines met dezelfde naam opnemen in mijn programma, maar met verschillende opmaak.
Voor zowel de vaste tekst als voor de variabelen heb ik twee verschillende functies gemaakt. Arduino neemt zelf de juiste. En dat is een meevaller.

donderdag 30 januari 2020

Het weerstation / windrichting


_____________________________________________________
30-1-2020.


Talen Tools Windhaan In Kleur  
De windvaan wordt zelf gemaakt. Hoe ik een goede lagering maak weet ik nog niet.

De encoder is van een type waar bij verandering van de code slechts 1 bit wijzigt, om foutcode te voorkomen. Dit is de zgn. gray-code. zie aparte post.


Ik maak gebruik van een 4-bits code en encoder. Dit geeft dan 16 mogelijkheden van windrichtingbepaling, dus N . NNO . NO . ONO . O. en zo verder.


Nu wil ik dit als een pijl weergeven in het display. (40x4). Ik gebruik hiervoor de mogelijkheid dat het display me biedt om zelf caracters samen te stellen. Ik wil dan rechts op het display 4 regels over 8 caracters breed een pijl creëeren.


______________________________________________________________
30-1-2020

De vorm van de windvaan moet ik nog bepalen. Of het een haan, pijl of zeilboot wordt, weet ik nog niet.

Maar de techniek kan ik al maken.
Want waar denk ik dan aan?

De lagering:
Ik wil zo min mogelijk wrijving in de lagering hebben, om de windrichting zo betrouwbaar mogelijk te krijgen, zelfs bij het minste briesje.
Ik dacht gelijk aan een zwevend lagersysteem middels magneten.
Op youtube vind je leuke projecten met magneten.

Google is dan een heel mooi medium. En zo kom ik bij een nederlands firma (naam komt nog als ik toestemming heb), met héél veel magneten op voorraad.

Voor de as kom ik uit op de modelbouw. Conrad heeft assen van zilverstaal, en bijbehorende enkele assecoires.

Zowel de magneten als de as vallen ik prijs reuze mee. Maar wel weer de vele kleintjes.....

tekening 1
In het midden de ringmagneet met de as. Daar omheen 3 schijfmagneten om de ringmagneet in positie te houden.

Daar zit maar heel weinig ruimte tussen; ik wil zo min mogelijk beweging in de as hebben, omdat ik een codeschijf moet plaatsen, die maar weinig speling van de as verdraagt.
Deze opstelling zal heel weinig zijdelinkse speling geven.

Het zal nog moeten blijken of ik de magneten zo dicht op elkaar kan krijgen, omdat de magneten heel erg sterk zijn.

Voor de totale opstelling, en het beperken van de axiale speling (speling in de lengterichting van de as), heb ik ook een tekeningetje gemaakt. Ook deze speling moet zo min mogelijk zijn, om dezelfde reden.

tekening 2






Hier zijn de magneten duidelijk te zien. Waarschijnlijk past alles in een doosje van 10x10x10 cm.
Van de magneten in de tekening zijn de zuidpolen grijs ingekleurd, zodat de funcie goed te volgen is.

Bovenin en onderin is de opstelling van de magneten hetzelfde, alleen gespiegeld.
Ik benoem de magneten en zijn functie:

  • De ringmagneet rotor zit vast op de as.
  • De magneten stator staan in een hoek van 120gr opgesteld zoals de
    tekening 1. Deze houden de ringmagneet rotor op korte afstand door de afstotende werking van de magneten. Door deze opstelling zou de as ook ineens axiaal kunnen verschuiven, en de magneten op elkaar klappen.
  • Om dit te voorkomen heb ik de ringmagneten opsluiting geplaatst. Deze voorkomen de axiale beweging van de as.
  • Ten slotte dempen de diamentrale ringmagneten de draaiing van de as. Dit komt door de wervelstromen die in de as ontstaan bij draaiing. De reden van deze demping is dat de vaan waarschijnlijk anders de onrustig heen en weer zal zwiepen.
Verder zit halverwege nog de codeschijf met de 4 IR-sluisjes. Deze lezen de gray-code van de codeschijf, dat een maat is voor de stand van de as.
(zie aparte blog).


Voortgang uitvoering



















2-6-2020.
Het weerhutje is gemaakt. Hierin worden temperatuur en vochtigheid gemeten. Er volgt nog een update qua bouw van de hut, de bovenste delen worden vervangen door schoteltjes.






________________________________________________
24-5-2020
Maar weer eens iets in deze blog schrijven, want ik heb niet stil gezeten.

Allereerst heb ik de besturing van de bediening (display + keypad) vervangen door een MEGA 2560 board. Dat ging vrij vlot, wel wat onvoorziene details, maar het werkt nu geweldig.

Daarna heb ik een paar nieuwe dingen aangepakt.
Eerst de temperatuurmeting met een DS18B20, Dit is een temperatuursensor die zeker op 0,1 gr nauwkeurig meet. Het heeft een eigen processor aan boord, en kan eenvoudig uitgelezen worden. Het is niet groter dan een halve centimeter. (groene plaatje rechts op de hoek twee stuks) Ik heb er twee van, die bovendien op dezelfde aansluitingen aangesloten kunnen worden, omdat elke sensor een eigen uniek nummer heeft. Net zoals internet slechts één kanaal heeft, maar we toch met ons alle miljarden op dat ene kanaal zitten.
De sensoren zijn zó goed, dat ze op enkele hondersten nauwkeurig in elkaars pas lopen.

Verder heb ik de barometer uitgeprobeerd. (op het groene plaatje in het midden) Ook dit werkt heel goed. De nauwkeurigheid is 0,1 mBar.

En ik ben bezig geweest met de SD kaart. Kijken hoe ik een en ander moet installeren om mijn data op te kunnen slaan en gebruiken. Ik heb een SD kaart van 32GB, en daar kan ik jaren mee vooruit. Ik denk zelfs dat ik nooit meer een uitbreiding nodig heb. Want de data die ik wegschrijf zijn maar 1 byte groot (meestal). Eén data is dan de waarde van één temperatuurmeting, luchtdrukmeting, luchtvochtigheidmeting, windkrachtmeting en de windsnelheid, gemiddeld en piek. Nou, die kan ik er totaal dus 34.359.738.368 van opslaan. Nou ja, bijna dan. Zeg maar 32.000.000.000.

Wat ik als volgende dingen wil doen zijn de temperatuur en de barometer op het display plaatsen. En daarna alles opslaan op SD, en daar ervaring mee opdoen.
_________________________________________________
24-5-2020 / 2
De barometer en de temperatuur staan op het display.
Wat me vandaag opvalt is de hoge luchtdruk. 1033 mBar. Toch eens kijken op internet... en ja hoor, 1033 mBar. Erg hoog, zijn we niet gewend.
__________________________________________________
8-5-2020
Vandaag heb ik de MEGA 2560 al binnen. en... HET WERKT.
Mijn conclusie dat het een geheugenprobleem zou kunnen zijn is dus de goeie.

Dit display met keypad kan dus de prullebak in. Was mooi geweest, veel geleerd.
Want: nu ik toch een grote broer heb van de arduino Nano, vervang ik beide nano's op de print voor die ene Mega 2560.
_____________________________________________________________
7-5-2020
Ik ban lang bezig geweest om het LCD goed te krijgen.
Telkens had het zeer onregelmatig gedrag. Met name de klok toonde hij steeds niet.

In een routine maak ik een keuze of een regel gevuld moest worden met de klokkalender, of met informatietekst.
Direkt na de start gaat het nog wel, maar het werd steeds grilliger.

Uiteindelijk heb ik een miniprogrammaatje gemaakt in het hoofdprogramma. Alleen dát programmaatje draaide steeds opnieuw. Hierin heb ik relevante routines gebruikt, waar het steeds fout ging. Het resultaat was, dat dit programmaatje het prima deed.

Conclusie is dan ook dat de hardware het prima doet. Ook de aangesproken routines werken feilloos.

Dat kon maar één ding betekenen: geheugen, en wel de SRAM, waarin de variabelen worden gemaakt.

Ja he, ik heb bijna 1000 bytes beschikbaar, maar blijkbaar gat het met tekstverwerking en manipulering héél erg hard.

Ik ben op zoek gegaan naar geheugenuitbreidingen voor de nano. Die zijn er niet, ja, eeprom, maar daar heb ik niks aan.

Ander bord dus. Veel gezocht en gevonden. Er zijn ook heel dure oplossingen, maar ik heb er een gevonden die verder compatible is met de nano. Het is de MEGA 2560 met 4 keer zoveel poorten en geheugen. Echt een werkpaard dus. Het programma zou dus 1 op 1 overgezet kunnen worden.
Die heb ik dan ook besteld.

Hierdoor kan ik de bediening met twee losse nano's vervangen door deze ene.
Ben benieuwd.
____________________________________________________________
5-5-2020
In het blog "ventilatie" heb ik enen en ander beschreven voor het gebruik van het display rn keypad-combinatie.
Het losse, kleine display van de ventilatie heb ik nu vervangen door het grote display en keypad. Eigenlijk heb ik het hele, oude, ventilatieprogramma vernieuwd. Door de inzichten die ik heb opgedaan afgelopen jaren, voor wat betreft de ventilatie, heb ik uiteraard in het nieuwe programma verwerkt. En omdat ik tóch het programma opnieuw heb geschreven, kon ik het ook veel logischer indelen. En natuurlijk met de nieuwe inzichten voor variabelengebruik en het gebruik van functies. Want dat laatste heb ik nu ook redelijk onder de knie. Het geheugen wordt daardoor veel minder belast, omdat er veel meer lokale variabelen worden gebruikt, dus veel minder vaste geheugenruimte gebruikt.

Ondertussen ben ik veel bezig geweest met het besturen van het grote LCD scherm. Je hebt per scherm maximaal 160 tekens te verwerken. Waar laat je die tekst? Hoe breng je die over naar het LCD? dat zijn zo een paar vragen, waaruit een protocol is ontstaan.

De keuze is gevallen om alle teksten op te slaan op de processor van het LCD scherm, in het vervolg het LCD genoemd. Dit houdt in dan de vaste tekts geen variabelengeheugen meer gebruikt, maar opgeslagen in het flash-geheugen. (programmageheugen) En die heb ik genoeg. Alleen voor de verwerking van de tekstregels gebruik in dan nog variabelen.
De veranderende items in de teksten, momentele waarden ed, worden steeds appart aangeleverd door betreffende stations. Die moeten dan wel ingepast worden in de vaste tekstregels.
Dit inpassen wordt makkelijk gemaakt door op de plaats in de vaste tekstregels waar die waarden moeten verschijnen, te vullen met een '#'. Dit werkt erg goed.

Natuurlijk kijk ik ook hoe ik de tekstregels verwerk.
Ik heb een keuze gemaakt in 3 manieren van weergave:

  1. geheel tekstblok (is hele scherm) laten staan.
  2. telkens verschillende tekstblokken wisselen.
  3. van onder inscrollende tekstregels, waarbij bovenliggende regels omhoog schuiven.
Hier ben ik al aardig ver mee. Dat inscrollen gaat nu nog niet goed, maar dat zal wel komen.

Nu kwam ik ook tegen dat het scherm telkend even flitste als het scherm wordt ververst. En dat is dan bij het vaste tekstblok. En dat kijkt niet lekker.
Als er telkens bij verversing naar een ander scherm wordt gegaan, moet je het scherm wel eerst wissen, maar dat is niet hinderlijk.
Maar bij een vast tekstblok geeft een schermwissen steeds even een knipper-idee. Dit heb ik nu opgelost door het scherm dan niet meer te wissen, maar te overschrijven. Het effect is dan dat alleen de veranderende stukjes tekst veranderen. En dit kijkt nu veel rustiger.

Ik merk nu dat ik wel blij wordt van al die kleine details die het geheel allemaal verbeteren. Het resultaat is telkens zichtbaar. Het is wel erg tijdrovend, maar tijd heb ik nu genoeg.
_____________________________________________________
23-4-2020
Nu ik toch moet wachten op het plexiglas voor de windmetingen, heb ik een uitstapje gemaakt naar het oude ventilatiesysteem.
Ik wil het programma opnieuw opzetten, en gebruik maken van het display met keypad, dat ik in de huiskamer hang. Dit systeem heeft het eerste RS485 netwerk gekregen dat ik wil toepassen in het gehele project.
______________________________________________________
20-4-2020
Inmiddels ben ik met pensioen.
Er zijn diverse projectjes gepasseerd.
De koelkast heeft een nieuwe temperatuurregeling gekregen met arduino.
De ventilatie heeft een klep in het kanaal naar de keuken gekregen. Hiermee is ook het eerste netwerk RS485 een feit geworden.
Voor de laatste werkweek heb ik tussendoor een aardigheidje voor op het werk bedacht.
Een combi van display met keypad is een feit. Hiermee samenhangend het versturen van data over het netwerk was nog een hele klus.

Nu dan op zoek naar een nieuwe uitdaging: het weerstation, en dan met name de windkracht en -richting. Zie betreffende blog.
_____________________________________________________
10-4-2020
Ik ben afgelopen tijd veel bezig geweest met bibliotheken, het LCD display en het keypad. Al dan niet ik combinatie met het uitbreidings-ic van I2C naar 8 digitale poorten.
Nou, de bibliotheken moet in de loop van het project maar worden bekeken, want dat is niet zomaar.
Het uitbreidings-ic is ook een drama.

Het keypad, welke op die uitbreidings-ic zou komen, gaat nu dus toch rechtstreeks op de processor. Het kost wel 8 poorten, maar is niet anders.
Het LCD heeft nog eens 7 poorten nodig. Komt het totaal met de keypad op 15 poorten. Ik zal dus analoge poorten moeten gebruiken om een en ander uit te sturen. Gelukkig zou dat moeten kunnen. Volgende uitdaging.
Deze zou dan met een RS485 in het systeem opgenomen kunnen worden, maar daar moet ik nog even over nadenken.
Ook zou zo'n setje ingeplugged kunnen worden naar een seriele poort. Moet ik echt nog even over nadenken.

Het keypad en het display gaan vanaf nu samen als één blog.
_____________________________________________________
10-4-2020
Ik ben afgelopen tijd veel bezig geweest met bibliotheken, het LCD display en het keypad. Al dan niet ik combinatie met het uitbreidings-ic van I2C naar 8 digitale poorten.
Nou, de bibliotheken moet in de loop van het project maar worden bekeken, want dat is niet zomaar.
Het uitbreidings-ic is ook een drama.

Het keypad, welke op die uitbreidings-ic zou komen, gaat nu dus toch rechtstreeks op de processor. Het kost wel 8 poorten, maar is niet anders.
Het LCD heeft nog eens 7 poorten nodig. Komt het totaal met de keypad op 15 poorten. Ik zal dus analoge poorten moeten gebruiken om een en ander uit te sturen. Gelukkig zou dat moeten kunnen. Volgende uitdaging.
Deze zou dan met een RS485 in het systeem opgenomen kunnen worden, maar daar moet ik nog even over nadenken.
Ook zou zo'n setje ingeplugged kunnen worden naar een seriele poort. Moet ik echt nog even over nadenken.

Het keypad en het display gaan vanaf nu samen als één blog.
_____________________________________________________
30-3-2020
Even een hééééél mooi resultaat: het display 40x4 werkt!
Ik had al een werkend programma van het display 40x2. En die heb ik na een tip op het forum 2x gebruikt, heb ik ook 40x4. Haha....
Alleen een beetje finetunen, gebruik maken van functies om die 2 displays als één te zien.
_____________________________________________________
16-3-2020

Afgelopen dagen veel gedaan met de klepsturing van de ventilatie.
Zo kan nu met de afstandbediening de klep ter plaatse ingesteld worden, maar nu nog alleeen van de huidige ventilatiestand. Dit wordt nog uitgebreid om ook met de afstandbediening tijdelijk voor een ventilatiestand te kiezen.

En ja, dit gaat allemaal over RS485, de eerste functionele netwerkverbinding. En dat werkt goed. Er is ook een definitief printje voor gemaakt.

Maar met de uitbreidingen van het thuis-programma, het programma waar de ventilatie al enige jaren op draait, kom ik ook (weer) voor andere uitdagingen te staan, namelijk geheugen. (van de arduino wel te verstaan). Want het programma loopt zelfs in de setup al vast.
En nou moet ik, wederom, met de programmastructuur aan de gang. Speciaal de lokale variabelen. (zucht....)

Ik heb net het gedeelte van de windmeting eruit gehaald. Dat scheelt veel geheugenruimte. De compiler komt nu niet terug met de waarschuwing over te veel geheugengebruik en mogelijke instabiliteit van het programma.
De windmeting doe ik voorlopig stand-alone (was toch al een poos niet operationeel). Kan later nog een RS485 tussen.





Het is nu erg snel gegaan; de klep werk goed. Ook het instellen in elke ventilatiestand.
RJ45 stekertjes monteren op de kabel is nog wel een dingetje hoor, maar ik krijg het redelijk onder de knie.

Voor het testen of het stekertje op de juiste manier is aangesloten, heb ik 2 testprogrammaatjes gemaak. Eén waarbij ik beide stekers in het apparaat kan steken, en één voor elk stekertje een apart printplaatje; één met een weerstandenbank, en één met de processor. Want het zal me niet gebeuren dat ik de boel opblaas omdat er draden verkeerd zijn aangesloten. Ik zou dan geneigt zijn om de boel aan de kant te gooien.





_____________________________________________________
26-3-2020
Tussendoor een besturing gemaakt voor de koelkast. Zie betreffende blog.

Intussen heb ik een paar dingen besteld voor het project.
Eerst weer een paar arduino's en randzaken.
Verder 2 barometers voor het weerstation.
Een paar I/O uitbreidingen ic's heb i erbij genomen om wat te experimenteren.
En een paar MAX485 ic's, voor de communicatie tussen de stations onderling.
Hier hoop ik voorlopig mee vooruit te kunnen.
_____________________________________________________
9-2-2020.

Nou, het display is nog een hele uitdaging! Dit lukt gewoon nog niet, ondanks de vele positieve geluiden op internet (forums).

Windmeting:
Maar.... intussen hebben we STORM! Dus, even snel een uitstapje naar de windmeter op een NANO en LCD 40x2.
Registratie van momentele windkracht, gemiddelde en piek (windstoot).

Windstoten:
Hier heb ik echt alle pieken te pakken, omdat ik alle door interrupt verkregen data verwerk. (in tegenstelling in het project THUIS). Want pieken zijn vandaag echt "pieken", en die duren doorgaans nog geen seconde. Dus een bemonsterings-frequentie van 5 seconden of langer is dodelijk voor het registreren van windstoten.

Nu heb ik bij windkracht 12 het aantal waarden van 50 stuks per seconde! Ja, sla die maar eens op; niet te doen dus.

Ik móet wel anders denken, om dit te laten slagen. Andere opslaggeheugen is een optie, maar erg onnodig. Want meestal heb ik aan een paar waarden per seconde al genoeg. Variabel denken dus!

Gelukkig hoef ik maar 1 byte per meting op te slaan.
Dit stelt me gelijk in staat om het 10-voudige van de windkracht op te slaan. Waarom? Voor een betrouwbaar gemiddelde.
Want bij de opslag van de eigenlijke waarden, bijvoorbeeld: 22222222221 geeft een gemiddelde van 1, ( ik kan geen 0,5 optellen) en dat is niet reeel.
Bij het 10-voudige 20-20-20-20-20-20-20-10 tel je eerst 5 op, en daarna middelen en delen door 10 geeft 2.
Dit is een methode die ik al eens meer heb gebruikt, en werkt prima.

Bemonstering:
Nu wil ik terwille van het display een bemonstering van 1 seconde; Als ik het display elke seconde iets wil laten zien, is me dat genoeg.

Werkmethode:
Nu hoef ik niet alle waarden van 50 per seconde op te slaan.
Wél wil ik álle waarden gebruiken voor de windkrachtbepaling.
Nu hoef ik windkracht kleiner dan 1 niet te registreren. windkracht 1 komt overeen met een tijd tussen twee pulsen van de windmeter van 777 msec.
Dus als ik 1 x per seconde even reken met de waarden die ik in die seconde heb geregistreerd, is me dat genoeg.

Wat heb ik in die éne seconde nodig?

  • gemiddelde van het aantal metingen in die seconde.
  • piekwaarde van die reeks metingen.
Daarvoor heb ik nieteens een array nodig. Gewoon het totaal aantal als het totaal van de metingen registreren en het maximum eruit filteren.
3-2-2020.

Afgelopen dagen ben ik bezig geweest met het LCD-display en het keypad. Het display heb ik even opzij moeten leggen, omdat ik vastliep op wat praktische bouwzaken voor wat betreft type printplaat. Ik bleek een 2-zijdige printplaat nodig te hebben met doorgemetaliseerde gaten. Hiermee kan ik op beide zijden zowel solderen als componenten aanbrengen. Slechts één firma heb ik kunnen vinden die deze kon leveren. Het wachten is dus op deze printplaten.

Het keypad was een andere uitdaging. Ik heb al eens met een keypad gewerkt, dat één gemeenschappelijke aansluiting had voor de toetsen. Deze staat echter in matrix geschakeld. Dat was nog niet het grootste probleen.
Want ik wilde, net als voorheen, met een weerstandenbank de toetsen koppelen, zodat ik deze op één enkele analoge ingang kon uitlezen. Ik had nog een 3x4 keypad liggen, en daarmee kon dat uitstekend.
Maar bij dit keypad kreeg ik het maar niet voor elkaar om duidelijke resultaten te
krijgen.
Na verschillende wegen bewandeld te hebben ben ik het over een heel andere boeg gaan gooien. Ik heb eens goed naar alleen het keypad gekeken. Het bleek dat de toetsen geen echte goede schakelaartjes zijn, maar waarschijnlijk koolstof-rubber nopjes dat op twee koperen vlakken wordt gedrukt. Er zal wel een naam voor zijn bedacht.
Het grote nadeel hiervan is dat het geen echte schakelaartjes zijn met normaal gesproken zeer lage contact-weerstanden. De weerstand van dit kontakt ligt zo om en nabij de 1000 Ohm, en bovendien verre van stabiel. Dit is een heel ander verhaal!
De andere aanpak is dan een weerstandenbank met heel hoge weestanden, waarbij de contact-weerstand in het niet zou vallen. Alleen.... dan wordt dit wel heel erg gevoelig voor magnetische stoorvelden, het EMC. En daar had ik vrij recent heel slechte ervaringen mee.

Ander aanpak dus.
Nu heb ik een boek van Arduino en een sensorenpakket, waar ook een folie keypad in zit. Gelijk dus gekeken in het boek naar het artikel dat daarover schrijft.
En... ja, hoor, weer een bibliotheek hiervoor, met erg ingewikkelde commando's in het programma. Nu houd ik hier niet zo van; ik heb er dan geen controle meer over.
Nu zijn er wel programmastukjes die met een bibliotheek zeer goed aan te sturen zijn, zoals I2C, LCD en RTC, maar zoiets eenvoudigs als een keypad zou ik toch zeker zelf wel kunnen?
En dat lukte. Het kost me wel 8 digitale poorten, maar het werkt uitstekend!

Keypad op arduino.
Het is eigenlijk heel simpel.
De 4 kolommen zitten op 4 uitgangen. Normaal staan deze hoog.
De 4 rijen op 4 ingangen met pullup weerstanden (intern in arduino).
Telkens maak ik één uitgang van een kolom laag, en kijk ik welke rij ook laag is geworden. En dat werkt heel doeltreffend. De weerstand van het contact speelt hier geen beduidende rol.

Voor de herkenning van de toets maak ik gebruik van een char-array.

const char  matrix[17] = "x147*2580369#ABCD";

Nu heb ik gekeken of arduino ook matrix-variabelen ondersteunt, nou, helaas niet. Maar met een array gaat dat ook goed:

matrix[4*(kolom-1)+rij];

kolom van 1 tot 4, rij ook van 1 tot 4.

En zo kan ik goed bij elk teken komen middels een kolom- en rij- variabele.
Die "x" in de matrix is het nulde symbool van elke array, en moet wel gevuld worden, anders komt het niet uit.
De volgende uitdaging is om deze constructie in een functie te zetten. Maar dat is weer voor later, want ik weet al dat het LCD ook op dit gebied moeilijk zal worden.
De keypad is aangesloten op een arduino nano, echt lekker klein.

Voorlopig kan ik alleen nog op de monitor het resultaat bekijken. Maar als ik het display onder de knie heb, zul je het resultaat daarop zien.











__________________________________________________________________
30-1-2020
De huidige situatie is nu, dat het al lang lopende project, de ventilatie en de windmeter, behoefte heeft aan aanpassing voor het uiteindelijke project. Die behoefte wordt uiteraard gevoedt door het idee dat ik binnenkort met pensioen ga.

Wat doet "ventilatie" op het moment:

  • badkamer ventileren naar behoefte.
  • windsnelheid meten.
  • ventilatiekanaal deels afsluiten ten behoeve van de ventilatie van de badkamer (onlangs uitgevoerd). En hier liep ik tegen de instelling van de afsluitklep aan voor wat betreft de stand van de klep. De klep maakt wat fluitende geluiden als die afgesloten staat. Door het wat open te zetten verminderde de fluittoon. Alleen moest ik dat rechtstreeks in het programma wijzigen. Dat moet anders, dacht ik. Waarom niet interactief de klep instellen?
En hier dus sta ik nu.

Bij het totale project heb ik een registratie / bedien-station in de huiskamer bedacht. En die ga ik nu uitvoeren.

Maar gaandeweg de bestelling van de materialen neem ik enkele andere dingen ook mee. Én ik kom wat beter in de voorraden te zitten door iets meer te bestellen dan strikt noodzakelijk, zeker als het om kleine bedragen gaan.

Wat kan ik er allemaal mee doen:
  • "Ventilatie" opdelen in echt alleen ventilatie en weerstation.
  • Het maken van de windvaan voor de windrichtingsmeting. Voor de lagering maak ik gebruik van swevende magnetische lages, waardoor de vaan ook bij het minste briesje de richting kan aanwijzen. Hierover meer in betreffende blog.
  • Bedieningspaneel in de kamer. Deze bestaat uit een LCD-display van 4 regels, 40 karakters per regel. Lekker groot, de grootste in zijn soort.
    Daarnaast komt er een bedieningspaneeltje, een zg. keypad met 16 knoppen.
  • Hetzelfde geld ook voor het basisstation hier in mijn werkkamer. Ook hier dus display en keypad.
  • Aanschap diverse kleine breadboards, voor het experimenteren met de projecten.
____________________________________________________________



maandag 27 januari 2020

Weergave


_____________________________________________________
Tja, je wilt ook wel eens wat laten zien.

Voor de toekomst wil ik in de huiskamer een LCD-display met keuzebediening, om dingen te laten zien.

Wat kan ik NU al laten zien?

  • luchtvochtigheid in de badkamer.
  • windsnelheid in verschillende vormen over de dag.
Hiermee ga ik definitief over op het netwerk met RS485. Dat wordt dus spannend.

De basis in dit station is het display. Ik kies hiervoor het grootst mogelijke dat te koop is, een 4-regelig 40 karakters breed LCD-display. Misschien ga ik het nog eens uitbreiden met een grafisch display. Maar ook dat zien we wel in de toekomst. Laten we gewoon step-by-step de boel aanpakken.



vrijdag 3 januari 2020

Ventilatie

3-1-2020.

De ventilatie is één van de stations in mijn netwerk. Deze is nu nog als zelfstandige voorziening.

Ik heb thuis de beschikking over een centrale afzuig-unit.  De ruimtes die de ventilatie afzuigen zijn de keuken, badkamer en de toilet. Hij is in de keuken in 3 snelheden te schakelen. Standaard staat de ventilatie op laag.


In de badkamer heb ik veel last van de vochtigheid, dat lang na het douchen blijft hangen. En dat blijft helaas niet zonder gevolgen.


Een poos terug ben ik hier al mee bezig geweest door het afzuigen te automatiseren. Hiervoor gebruik ik een vochtsensor.

Na regelmatig wat aanpassingen in het programma, werkt dit prima.

Nu was de automatische regeling van de badkamer leidend. Dat wil zeggen, als de badkamer een hogere ventilatiestand vroeg, dan is de keukenschakelaar uitgeschakeld.


Dit bleek later niet handig.

Dus wil ik de schakeling uitbreiden.
Door ook de keukenschakelaar te detecteren, kan ik door het programma kiezen voor de hoogst gevraagde stand. En dat ga ik dus uitvoeren.

Maar hoe detecteer je een 230V schakelaar op een arduino? 

Een paar kleine relaistjes leek het simpelste. Hangt wel een prijskaartje aan.

Ik heb gekozen voor twee opto couplers. De led in de opto verbind ik op de schakelaar met een condensator/weerstand spanningsdeler. 

De condensator heeft ook het nadeel dat bij de tegenwoordige netvervuilingen (bijv. zonnepanelen) de condensator te veel doorlaat, met als gevolg mogelijke te hoge spanning op de opto. Dit houd ik nu tegen door een zenerdiode van 12v. Hierdoor ben ik verzekerd van een constante stroom door de LED van de opto.

Vandaag heb ik de onderdelen binnen gekregen. Ik houd jullie op de hoogte.






Dit werkt nu prima. De spanning over de zener is ongeveer 7 volt, niet wat ik had berekend. Maar het voldoet.

Klep in ventilatiekanaal keuken.

De ventilatie staat best wel lang te draaien als er is gedouched. Als ik nou tijdens die afzuiging het ventilatiekanaal van de keuken kan afsluiten, zou ik dat heel fijn vinden.
Ik ben nou toch aan het pionieren met stappen- en servomotoren, dus heb ik in het ventilatiekanaal een klep beplaatst die onder bepaalde voorwaarden dicht wordt gezet. Met name  voor de afzuiging van de badkamer is dit erg praktisch; de ventilatie is dan niet meer zo erg lang aan, omdat dan alle afzuiging naar de badkamer gaat.
De foto laat de aandrijving van de klep zien door een servo-motortje. Deze staat normaal open, zodat alles geventileerd wordt op zijn zachtste stand. Klep gaat dicht als de keuken niet vraagt, en de badkamer moet worden geventileerd.




Vochtsensor.

De vochtsensor is een appart verhaal. 

Bij een thermostaat, het regelen van de temperatuur dus, zijn invloeden van buitenaf nauwelijks hinderlijk voor de regeling. Hooguit de gevoelstemperatuur kan hier een factor zijn dat de regeling anders wordt ingesteld naar behoefte.


Bij een vochtsensor is de vochtigheid buiten van grote invloed op de regeling. Want waar stel je de hygrostaat op af als het buiten hartstikke vochtig is. En hoe als het juist heel erg droog weer is. 

Ik heb in het programma gekozen om een "normaalwaarde" te creëeren die ik als ondergrens hanteer. Als de vochtigheid 5% luchtvochtigheid hoger is dan de normaal, schakelt de ventilatie op halve snelheid. Bij 10% hoger op hoge snelheid. En terug zo ongeveer hetzelfde, maar dan afschakelen.
De normaalwaarde bereken ik als voortschrijdend gemiddelde over één etmaal. En dat werkt goed. Mocht nou toch de ventilatie door wat dan ook (plotselinge hogere vochtigheid) te lang doordraaien, dan zet ik elke minuut de normaalwaarde 1 hoger, zodat vanzelf de ventilatie wél afslaat. Die nieuwe normaalwaarde wordt dan vastgelegd.
______________________________________________
7-3-2020.

Ben bezig om RS485 in te bouwen.

Er komt dus een Arduino Nano bij de servo, de ventilatie klep. Hier komt ook de afstandbediening te zitten om de klep in te regelen.

______________________________________________
23-4-2020
Ik ga dit systeem moderniseren. Het programma ga ik opnieuw opzetten en ik ga gebruik maken van het display met keypad dat ik in de huiskamer hang.
_________________________________________
28-4-2020
Het komt lekker van de grond.
Het vernieuwde programma communiceert al lekker met het grote display, jaja, over RS485.
Er zijn nog wel een paar opties die ik erin moet verwerken, zoals in welke modus het scherm moet weergeven. Want ik heb natuurlijk niet alleen maar een badkamer, waarvan ik de vochtigheid en de ventilatie wil weergeven.
En in welke vorm. Ik heb nu nog 3 opties:
1. vast blok info op het scherm.
2. steeds wisselende blokken met info.
3. van onder inscrollende tekstregels.
De opslag van de tekstblokken vormt nu nog geen problemen, maar die verwacht ik wel in de toekomst. 
Het vormen van teksten bij de bron is geen probleem; die kan ik in flash-geheugen plaatsen, en die heb ik zat.
Maar die teksten moeten ook verzonden worden en bij het display opgeslagen worden, en dat kan niet in flasch, maar moet ik het zeer spaarzame ram-geheugen.
Waarschijnlijk moet ik uitwijken naar de SD-opslag. Maar dat is weer voor later.