-
-
-Geschiedenis:
-Voor het pand van Hack42 aan de Cruquiusweg 3 in Arnhem werd de behoefte gesignaleerd om het -energie verbruik in de gaten te houden, teneinde te voorkomen dat het -totaal verbruik zo hoog zou worden dat er een hoofdzekering aanspreekt. -Grote verbruikers zijn vooral de warmtepomp, heetwater voorzieningen en -keuken apparatuur.
-Daarbij komt een slecht voorspelbare, maar in de pieken aanzienlijke energieleverantie van de zonnepanelen.
-Het idee ontstond bij mij om op toepasselijke plaatsen, vooral -(sub) groepenkasten, de opgenomen stroom te meten, om aan de hand -van die gegevens te besluiten om bepaalde belastingen af te schakelen of - niet toe te laten.
-In de loop van de ontwikkeling bleek er ook behoefte om een aantal -parameters van het binnenklimaat te meten, om daarmee verwarming, -koeling en ventilatie te kunnen regelen.
-Het resultaat van dit project is:
-
-Beknopte omschrijving:
-Een Monitor-unit (elektronica bord met behuizing) waarmee de stromen van - diverse verbruikers gemeten kunnen worden, en waarop aansluit -mogelijkheden zijn voor sensors waarmee temperaturen, luchtvochtigheid, -CO2 gehalte, diverse verontreinigende gassen en de fijnstof concentratie - gemeten kunnen worden.
-Er kunnen relais aangestuurd worden waarmee bepaalde verbruikers -afgeschakeld dan wel niet toegelaten kunnen worden, o.a. op grond van de - SpaceState.
-
-De monitor units zijn niet slim, d.w.z. ze nemen geen beslissingen over -afschakelen of niet toelaten van verbruikers. Die taak is voor de -�Mediator�, een stuk software dat buiten het bereik van dit project -valt.
-Deze units communiceren met die �Mediator� via het MQTT protocol.
-Het MQTT protocol laat wel toe dat andere entiteiten gebruik maken van de informatie die de Monitor-units aanleveren.
-
-
-
-
-
-Foto
-Het gemonteerde bord, ca. 190 x 110 mm. Rechts onder het Ethernet -Shield, aan de onderkant van de print is de Arduino MEGA ingestoken -(niet zichtbaar) Voor dit bord + een 24VDC power supply is een behuizing - ontworpen (lasersnijden) met een doorzichtig deksel zodat de led�s -ge�nspecteerd kunnen worden.
-Het bord is aan de componentenzijde vingerveilig t.a.v. de 230 Volt -voedingsspanning in het gebied linksboven. De onderkant van het bord is -daar niet vingerveilig.
-Nabij de rode led is een lange messing schroef gemonteerd. Deze is bedoeld om de GND draad van een oscilloscope aan te klemmen.
-Alle aansluitingen van de Arduino MEGA zijn uitgevoerd met een bus aan -de bovenzijde. Ook dat is gedaan voor het gemakkelijk aansluiten van -meetapparatuur.
-
- -
Specificaties:
-
-Algemeen:
-Het bord wordt bestuurd door een Arduino MEGA 2560 R3. Er zijn versies -in omloop met verschillende USB-serial converters. De PC waarop de -firmware gecompileerd wordt moet hiervoor ingericht zijn.
-Er wordt een Arduino Ethernet Shield gebruikt voor de communicatie - met de MQTT-Broker. Er zijn ETH-shields in omloop met verschillende -Ethernet Interface IC�s. Voor het compileren van de firmware moet de -juiste chip geconfigureerd zijn in de Arduino libraries.
-
-Stroom meting:
-Via maximaal 7 stroom transformatoren kunnen 50 Hz wisselstromen gemeten - worden in bijv. een groepenkast. De stroommeting en calibratie gebeurt -zodanig dat het resulteert in de amplitude van de stroom en de -fase-hoek, zodat ook het werkelijke vermogen berekend kan worden.
-De meetmethode is niet true-RMS, d.w.z. dat als de golfvorm van de -stroom sterk afwijkt van de zuivere sinusvorm er een meetfout optreedt. -Alle meetkanalen hebben wel een 2e orde laag-doorlaat filter dat -harmonischen wegfiltert. Deze filters zijn identiek uitgevoerd zodat de -faseverschuiving in alle meetkanalen dezelfde is.
-De fase-referentie wordt betrokken van de voedingstrafo op het board, -die geacht wordt op de R-fase aangesloten te zijn. De stroom- en -fasemetingen worden gemiddeld over 1/2 seconde.
-De eerste 3 stroom meetkanalen worden geacht aangesloten te zijn op -stroomtrafo�s in de R, S en T-fasen. De 4 andere kanalen (8 t/m 11) -kunnen naar believen andere stromen meten. De nominale fase voor deze -kanalen wordt d.m.v. jumpers ingesteld.
-Kanaal 8 is geschikt te maken om de spanning tussen de Nul en de Veiligheidsaarde te meten.
-De calibratie van de metingen vindt plaats door het kiezen van de -weerstanden waarmee de stroomtrafo�s afgesloten worden, in combinatie -met parameters in de firmware (hard te coderen)
-
-In / Uit schakelen van verbruikers:
-Er kunnen maximaal 7 relais aangesloten worden voor het schakelen van eindgroepen.
-De relais dienen te werken met een spoelspanning van 24 VDC en -gezamenlijk niet meer dan 1A te gebruiken, per stuk niet meer dan 300 -mA.
-Als er relais gebruikt worden dan moet er een aparte 24 VDC voeding -aangesloten worden. Daarvoor is ruimte gereserveerd in de behuizing.
-
-Sensoren voor luchtkwaliteit:
-Er is voorzien om een BME280, een CSS811 en een SDS011 sensor aan te sluiten.
-De BME280 meet temperatuur, luchtvochtigheid en barometrische druk.
-De CSS811 meet relatieve CO2 en VOC gehaltes. (VOC = Volatile Organic Compounds)
-De SDS011 meet fijnstof deeltjes van 10μm en 2.5 μm.
-
-Daarnaast kunnen maximaal 10 temperatuur sensoren van het Dallas type DS18B20 of DS18S20 aangesloten worden.
-
-De BME280 en CSS811 sensoren worden in een daarvoor ontworpen behuizing -geplaatst en aangesloten met een 4-aderig kabeltje, bijv. het type -telefoonkabel met rood-blauw-zwart-geel.
-Deze sensoren gebruiken het I2C protocol. In die behuizing is een -conversie naar 3.3 Volt voorzien voor de CSS811. Er kunnen ook andere -sensoren op 3.3 Volt aangesloten worden.
-
-De SDS011 heeft een 3 aderig kabeltje nodig en praat seri�el 9600 baud.
-Deze sensor bevat een laserdiode met een beperkte levensduur en wordt -normaliter slechts 1 x per 10 minuten of zo, even ingeschakeld.
-
-De Dallas temperatuur sensoren hebben 3 aders nodig. Er is 5 Volt -voedingsspanning beschikbaar zodat er geen gebruik gemaakt hoeft te -worden van de z.g. parasite power mogelijkheid.
-Sensoren van het type DS18S20 (0.5 �C resolutie) en DS18B20 (0.0625 �C -resolutie) kunnen door elkaar aangesloten worden. De firmware bepaalt -automatisch de juiste calibratie factor.
-De identificatie codes voor deze sensoren worden bij het opstarten -automatisch door de firmware uitgeplozen en toegekend aan de -meetkanalen. Er moet dan alleen nog experimenteel uitgezocht worden -welke sensor op welk meetkanaal gerapporteerd wordt.
-
-Request kastjes:
-In sommige gevallen zal het wenselijk zijn dat een grote verbruiker niet -domweg ingeschakeld wordt, en dat de Mediator dan maar moet uitzoeken -wie er afgeschakeld kan/moet worden, maar dat er eerst een verzoek -gedaan wordt om die grote verbruiker te mogen inschakelen. Daarvoor -kunnen er twee z.g. Request kastjes aangesloten worden.
-En request kastje bevat een rode en een groene led en een drukknop.
-Als de betreffende load ingeschakeld mag worden brandt de groene led, -indien niet de rode. In dat geval kan het verzoek ingediend worden door -op de drukknop te drukken.
-De groene led gaat knipperen zolang het verzoek in behandeling is. Als -het mag gaat groen continue, anders terug naar rood. (jammer dan)
-Het is aan de Mediator om te bepalen hoe lang de betreffende load ingeschakeld mag blijven.
-
-Feature Connector:
-Er is een connector aanwezig waarmee extra dingen gedaan kunnen worden. Daarvoor moet de firmware aangepast worden.
-De volgende functies zijn bereikbaar:
-- GND en +5Volt.
-- RXD en TXD voor seriele communicatie.
-- 4 digitale in/uitgangen (kunnen geen interrupt genereren).
-- 2 digitale in/uitgangen (kunnen interrupts genereren of PWM output zijn).
-- 2 analoge ingangen.
-- SPI poort met faciliteiten voor bijv. een display.
-
- -
MQTT berichten:
-
-Voor een beknopte samenvatting van het MQTT protocol zie �Broker� e.v. in de begrippenlijst.
-
-Elke Monitor unit moet een unieke ClientID te hebben. Deze verschijnt in - alle publicaties en subscriptions (behalve de HeartBeat subscription).
-De ClientID verwijst bij voorkeur naar de locatie of het doel van de betreffende unit.
-
-Publicaties:
-
-Topic: ClientID/Status
-Payload: �sss � + <VersionString>
-Waar sss (byte) Status.
-Status:
-bit 0 = Request van kastje 1,
-bit 1 = Request van kastje 2,
-bit 3 .. 6 n.t.b.
-bit 7 = Error tijdens initialisatie van de unit.
-De <VersionString> bevat de ClientID en de bouw datum en tijd van de firmware.
-Publicatie interval: Eens per minuut, en als de Request Status verandert.
-
-Topic: ClientID/Power
-Payload: � aaa aaa aaa aaa aaa aaa aaa fff fff fff fff fff fff fff�.
-Waar aaa de amplitude in deci-Amperes en fff de fasehoek in graden is -van de kanalen R, S, T, ch11, ch10, ch09 en ch08, in die volgorde.
-Publicatie interval: 2 x per seconde. Er wordt steeds over 25 lichtnet periodes gemiddeld.
-
-Topic: ClientID/AirQuality
-Payload: � tttt hhhh bbbb cccc vvvv nnnn pppp�
-Waar tttt de temperatuur in deci �C (kan negatief zijn), hhhh Hygro in -%relatief, bbbb de barometrische druk in mBar c.q. hectoPascal, cccc de -CO2 -concentratie in ppm, vvvv de VOC concentratie in ppm, nnnn de fijnstof -concentratie van 10um deeltjes en pppp de fijnstof concentratie van 2.5 -um deeltjes, beide in ug/m3, bereik 0 .. 999.
-Voor niet gebruikte sensoren wordt -999 gerapporteerd.
-Publicatie interval: 1 x per minuut. (Fijnstof wordt infrequent gemeten, de laatst gemeten waarde wordt opgegeven)
-
-Topic: ClientID/DallasTemperatures
-Payload: � tttt tttt tttt tttt tttt tttt tttt tttt tttt tttt�
-Waar tttt de temperatuur is in deci �C.
-Er is gerekend op maximaal 10 sensoren. Voor afwezige sensoren wordt -999 gerapporteerd.
-Publicatie interval: 1 x per minuut.
-
-Topic: ClientID/HeartBeatAck
-Payload: 1 byte, die de payload van de Mediator�s HeartBeat publicatie echo�t.
-Publicatie interval: Als respons op de HeartBeat van Mediator.
-
-Abonnementen (Subscriptions):
-
-Topic: ClientID/SetRelays
-Payload: �ddd�
-Waar ddd de relais code is.
-De relais zijn genummerd 1 t/m 7. Dit correspondeert met de bitjes 1 t/m 7 in binary(ddd). Bit 0 doet niets.
-
-Topic: ClientID/SetRequestLights
-Payload: �ddd�
-Waar ddd een byte waarde is met:
-Bits 0, 1, 2, 3 voor RequestBox 1, bits 4, 5, 6, 7 voor RequestBox 2.
-Bit 0, 4 rood, bit 1, 5 groen knipperend, bit 2, 6: groen.
-Bit 3, 7: cancel RequestButton.
-
-Topic: Mediator/HeartBeat
-Payload: 1 byte, wordt modulo 256 opgehoogd door de Mediator.
-Mediator verwacht een ClientID/HeartBeatAck bericht en rapporteert (n.t.b. aan wie?) een error als die uitblijft.
-N.B. Het MQTT protocol ondersteunt ook een soort HeartBeat procedure. Ik - vond de mogelijkheden daarvan echter te beperkt of niet erg geschikt -(Last Will gedoe)
-
-
-
-
-
- Integratie.
-Een voorbeeld van hoe zulke monitoren in de elektrische installatie ge�ntegreerd kunnen worden.
-In dit voorbeeld is ook een suggestie van mij verwerkt, nl. om de -sub-groepenkasten niet afzonderlijk af te zekeren maar via een scheider -aan te sluiten op de hoofdkast. De daarvoor benodigde kabel moet flink -zwaar zijn, ik denk aan 5 x 10 mm2. Elke kast heeft uiteraard ook een -scheider aan de ingang om veilg te kunnen werken zonder alle sub-kasten -af te schakelen.
-Het afzonderlijk afzekeren van de sub-kasten leidt tot een bijkans onoplosbaar selectiviteits probleem.
-
-
-
-
-
-Aansluiten van relais en 24 VDC Power Supply.
-
-
-
-
-Aansluiten van Sensors en Stroomtransformatoren.
-Houd er rekening mee dat de - kant van de stroomtrafo�s op + 2.5 Volt DC staat.
-
-
- -
Genereren van een nieuwe unit:
-
-Montage hardware:
-Zie de onderdelen lijst.
-Componenten die alleen dienen voor functies die toch niet gebruikt worden kunnen weggelaten worden. Check daarvoor de schema�s.
-Er is een modificatie nodig op -de print. De verbinding tussen pin 13 en de Reset van de arduino moet -worden doorgesneden en Reset moet aan pin 8 van de arduino mega gelegd -worden.
-De benodigde schroefklemmen moeten worden samengsteld uit de beschikbare - 2- en 3-polige blokjes. Van de goene blokjes moeten de pennen -ingeknepen worden met een platbektangetje.
-
-Firmware:
-Gebruik een PC of laptop met een recente versie van de Arduino IDE en de juiste libraries:
-
-Adafruit_BME280_Library-master
-Adafruit_BusIO-master
-AdaFruit_CSS811-master
-Adafruit_Sensor-master
-Ethernet-5500 (voor het geval dat er W5500 ETH chips gebruikt worden)
-OneWire-master
-PubSubClient
-
-1/ Maak een directory met de naam FW_<Nieuwe CLIENTID>
- <Nieuwe CLIENTID> dient z.m. de locatie of het doel van de nieuwe unit aan te geven.
-2/ Copieer de files van een bestaande instantie naar dat directory.
-3/ Wijzig de naam van de .ino file in die van het directory en start de IDE.
-4/ Wijzig in de Gobals.h file het item #define CIENTID in de nieuwe naam.
-5/ Geef in de file Globals.h op welke sensors er gebruikt gaan worden. Dat zijn de items:
-
-#define USE_CURRENTS
-#define USE_BME280
-#define USE_CCS811
-#define USE_SDS011
-#define USE_DALLAS_SENSORS
-#define USE_REQUEST_BOX1
-#define USE_REQUEST_BOX2
-
-6/ Geef in de file Client.cpp op wat het IP adres van deze unit moet zijn. (ClientIP, verschillend voor alle monitor units)
-7/ Geef in de file Client.cpp op wat het IP adres van de Broker is. (BrokerIP, zelfde voor alle monitor units)
-8/ Compileer het programma en laad het in de unit.
-9/ Activeer de Arduino Monitor met ctrl-shift-M en inspecteer de uitvoer bij het opstarten. Zie voorbeeld.
-10/ Copy-paste de Build-datum en tijd van de uitvoer naar de .ino file bij het item VERSIONSTRING en sla het project op.
-N.B. De build datum en tijd worden automatisch gegenereerd bij het -compileren, maar komen niet automatisch in de broncode terecht. Voor de -traceability is dat wel erg gewenst.
-
- -
Calibraties:
-
-Berekenen van de afsluitweerstanden voor de stroomtrafo�s. (Zie ook schema deel 2)
-Het p-p bereik van de A/D converter is 5 Volt en de gain van de filterversterkers is 1.
-5V p-p komt overeen met 1.77 V RMS.
-Stroomtransformatoren hebben een conversiefactor F (vaak 100 , 1000 of 10000)
-Voorbeeld:
-Kies het maximale stroombereik I-max, bijv. 30A voor een 25A gezekerde groep. (We houden wat marge).
-De afsluitweerstand moet dan zo gekozen worden dat bij die stroom een -spanning van 1.77 V ontstaat. Dus bereik 30A, stel F= 1000, de secondaire - stroom is dan 30 mA, en je krijgt 1.77 V met een weerstand van 1.770 / -0.030 = 59 Ohm. Neem de eerst kleinere reekswaarde: 56 Ohm. Verdere -calibratie gebeurt in de firmware.
-De afsluitweerstanden voor de kanalen R, S, T, zijn resp. R29, R30, R31, - en die voor de kanalen 11, 10, 09, 08 resp. R52, R53, R54 en R55.
-Om kanaal 08 te gebruiken met een stroomtrafo moeten R51 en C18 overbrugd worden.
-Kanaal 08 is in beginsel voorbereid om de spanning tussen de Nul en -Veiligheidsaarde te meten. Met R55 = 1 kOhm en R51 = 11 kOhm is er een -bereik van 20 Volt. In de praktijk mag die spanning enkele volts -bedragen; als het meer is dan ca. 10 Volt dan is er iets geks aan de hand -dat aandacht vereist.
- -De fase waarop de stroom meetkanalen 08 t/m 11 aangesloten zijn kan -ingesteld worden met het 3 x 4 jumperblok. (kan on-the-fly gewijzigd -worden).
- - -Zonder jumper geldt de fase als R (dezelfde fase als die waarop de -voeding is aangesloten) Met een jumper op de R of T positie wordt de -fasehoek zodanig gecorrigeerd dat de fase voor een zuiver ohmse -belasting nagenoeg 0 of 359 is.
-Verdere calibraties in de software.
-De stromen worden bepaald met een quadratuurmeting. Dat wil zeggen dat -het signaal bemonsterd wordt op de momenten A, B, C en D. Zie figuur -hieronder. De waarde A wordt opgeteld bij een Sinus-term, C wordt daar -van afgetrokken. B wordt opgeteld bij een Cosinus-term en D wordt -daarvan afgetrokken. Dat gebeurt over een interval van 0.5 seconde, dus -25 periodes.
-De amplitude wordt dan berekend als de Wortel uit (Sinus-term2 + Cosinus-term2). Deze amplitude is onafhankelijk van de fase hoek van de stroom.
-De A/D converter heeft een bereik van 5 V p-p of 1.77 Volt RMS, hetgeen -1023 A/D eenheden oplevert. Na sommatie over 25 periodes geeft dat 25565 - eenheden.
-Dus: 25565 eenheden komt overeen met 1.77 Volt rms.
-De calibratie wordt nu: Stroom in A-rms = gemeten eenheden / 25565 * 1.77 / Rt * F [A]
-De waardes voor elk kanaal dienen ingevuld te worden in de file Currents.cpp van de firmware. (regel 31 e.v. )
-
-
-
-De sample momenten voor de quadratuurmeting, hier voor een Ohmse stroom met -fasehoek ϕ = 0, oftewel cos(ϕ) = 1. A en C zijn de sinus termen, B - en D de cosinus termen.
-Het signaal heeft een offset ter grootte van de halve voedingsspanning -omdat deze A/D converter geen negatieve signalen kan verwerken. Bij de -uiteindelijke signaalverwerking blijkt dat die offset wegvalt, zodat de -precieze waarde ervan niet ter zake doet.
-
- -
Testen en Diagnose:
-
-Voor Testen en Diagnose dient er een terminal aangesloten te worden op -de seriele poort van de Arduino. Dit kan de monitor van de Arduino IDE -zijn (ctrl-shift-M) of een andere terminal, bijv. Putty. Instelling: -19200 baud, 8 bit, No parity, 1 of 2 stopbits.
-Het is ook nodig dat er een goed werkende MQTT Broker aanwezig is in het netwerk, bijv. Mosquitto.
-
-Hulpsoftware:
-Er is een dummy-Mediator gemaakt, een PC-programma dat zich als Mediator - gedraagt in zoverre dat het de data van een monitorunit weergeeft.
-Er is eveneens een MQTT-Spy beschikbaar die alle berichten van de Broker toont.
-
-Service Mode: Jumper op JP1-JP2. (kan on-the-fly gewijzigd worden).
-In Service Mode worden de sensoren veel vaker uitgelezen dan in de -normale mode, en de voeding voor de fijnstofsensor blijft continue aan.
-Diagnose Mode: Jumper op JP3-JP4. (kan on-the-fly gewijzigd worden).
-In Diagnose Mode worden de ontvangen en verstuurde MQTT berichten ook weergegeven via de seriele poort.
-
- Andere diagnose voorzieningen:
-Het intypen van de (hoofd) letter 'R' veroorzaakt een volledige (ook hardware) reset van de Arduino.
-Een 'D' veroozaakt het opnieuw uitzoeken en rapporteren van de Dallas temperatur senors.
-Relais kunnen aangezet worden door het intypen van een cijfer 1 t/m 7, en 0 voor het uitzetten van alle relais.
- -N.B. Als er een MQTT Topic_SetRelays binnenkomt gaat dat voor.
-
- Led's:
-CONN (groen) Continue aan: Connectie met Broker OK. Snel knipperen: Fout bij verbinden met de Broker.
-PUB (geel) Toggelt bij elke publicatie
-SUB (blauw) Subscriptions gelukt. Snel knipperen: 1 of meer subscriptions mislukt.
-HTBT (rood) Toggelt bij het ontvangen van de Heartbeat -Topic. Snel knipperen: Fout tijdens het initialiseren van de sensors.
-
-Testpunten:
-De 8 aansluitingen ADCL van de Arduino MEGA zijn gebruikt als -test-uitgangen, bedoeld om met een oscilloscope bepaalde (timing) -signalen te bekijken. Ze zijn bereikbaar op het Ethernet shield als A0 -t/m A5. A6 en A7 zijn beschikbaar op de connector onder het ETH shield. -(A6 wat lastig bereikbaar)
-In de firmware zijn deze aansluitingen aangeduid als DIAGPIN_n.
-
-DIAGPIN_0:
-Toont de activiteit in FW_Monitor_xxx.ino/loop(). Verwacht een puls van ca. 80 usec met een herhalingstijd van ca. 1.1 msec.
-
-DIAGPIN_1:
-Toont de in-service tijd van de interrupt ISR(TIMER3_COMPA_vect).
-Verwacht een puls van 4 � 5 usec met een herhalingsfrequentie van 20 kHz.
-
-DIAGPIN_2:
-50 Hz Mains trigger.Toggelt op het moment waarop een positief gaande -nuldoorgang gevonden wordt voor het signaal op de ADC-15 input. Dat is -het gefilterde signaal van de voedingstrafo.
-Als USE_CURRENTS uitgeconfigureerd is of er is geen lichtnet signaal zien we een triggersignaal van ongeveer 50 Hz.
-
-DIAGPIN_3:
-Toont de periodes waarin het sampelen van de stromen plaatsvindt. -Verwacht per 50 Hz periode 4 pulsen van 300 usec op tijden 0, 5, 10 en -15 msec na de trigger op DIAGPIN_2.
-
-DIAGPIN_4:
-Toont het 4e quadrant, als de 4 samples genomen zijn, tot aan het vinden van de volgende nul-doorgang.
-
-DIAGPIN_5:
-Toont het uitlezen van de sensoren. Verwacht pulsen met een interval -niet korter dan 200 msec. De pulsduur varieert afhankelijk van welke -sensor er uitgelezen wordt.
-
-DIAGPIN_6:
-Wordt niet gebruikt want is lastig te bereiken.
-
-DIAGPIN_7:
-Toont de tijden gebruikt voor het uitlezen van de Dallas temperatuur sensoren (indien in gebruik)
-Er zijn steeds 2 pulsen na elkaar te zien, eerst het uitlezen van een -sensor, kort daarna het starten van de conversie voor de volgende -sensor.
-Deze pulsen vallen samen met de activiteit op de 1-wire bus op T9.
-
-Opstart sequence:
-Na opstarten of reset wordt er achtereenvolgens een aantal tests gedaan:
-- De 4 MQTT leds op het bord worden in sequentie aan / uit gezet gedurende 4 seconden.
-- Indien geconfigureerd worden de leds op de RequestBoxen 1 en 2 getest in de sequentie rood, groen, gedurende ca. 4 seconden.
-- De te publiceren topics worden weergegeven, maar alleen als de betreffende sensors niet uitgeconfigureerd zijn.
-- De topics waarop deze unit zich moet abonneren worden weergegeven.
-- Vervolgens wordt de verbinding met de Broker opgezet en worden de nodige subscriptions gedaan.
-- De jumper settings voor ServiceMode en DiagnoseMode worden ge�valueerd - en gerapporteerd. Alleen indien USE_CURRENTS is geconfigureerd wordt de - instelling van de Fase-configuratie jumpers weergegeven.
-- Het stroom-meetsysteem wordt ge�nitialiseerd als USE_CURRENTS -geconfigureerd is. Indien niet dan verschijnt de mededeling �Falling -back to default Task Dispatcher�. Dat betekent het volgende: Het stukje -software dat de timing voor de stroommetingen regelt wordt ook gebruikt -voor de timing van de andere sensoren en het publiceren van topics. Het -wordt daartoe gesynchroniseerd met de lichtnet frequentie. Indien niet -gebruikt voor stroommetingen moet het toch in een tempo van ongeveer 50 -Hz blijven lopen. Dat is de �Fall back� voorziening.
-Idem als USE_CURRENTS wel geconfigureerd is maar er is geen 50 Hz -voeding aanwezig. In dat geval verschijnt het bericht �No Mains Zero -Crossing found�. Als de 50 Hz weer terugkomt komt het weer goed.
-- Hierna worden de andere sensors ge�nitialiseerd, indien ze geconfigureerd zijn.
-- Indien USE_DALLAS_SENSORS geconfigureerd is wordt er gezocht naar -zulke sensors. Van de sensors die gevonden zijn wordt de ROM code, het -chip-type en de temperatuur weergegeven.
-Als er twee of meer zulke sensors in bedrijf zijn moet er handmatig -uitgezocht worden welke sensor op welk kanaal gerapporteerd wordt. Dat -kan bijv. door steeds 1 van de sensoren met de hand te verwarmen en dan -te kijken op welk kanaal je de temperatuurstijging ziet.
-Door het intypen van de hoofdletter �D� wordt opnieuw gezocht naar de Dallas sensoren.
-Het is sterk aan te bevelen om een copie te maken van dit lijstje -kanaalnummers en ROM codes, en daarbij te noteren waar die sensors -precies zitten. Als er in de toekomst sensors bijkomen, afgaan of -vervangen worden zal de volgorde in het algemeen anders worden. Je kunt -dan aan de ROM codes zien wie wie is/was.
-
Output op de seri�le poort tijdens het opstarten: (voorbeeld)
-
-16:54:00.734 -> FW_Monitor_Primary Build: Oct 2 2021 16:53:47 -
-16:54:00.767 -> Client ID = Monitor_Primary -
-16:54:01.065 -> Client IP = 192.168.2.5 -
-16:54:01.065 -> Broker IP = 192.168.2.4 -
-16:54:01.098 -> -
-16:54:01.098 -> Testing MQTT Leds -
-16:54:05.078 -> Testing RequestBox 1 Leds -
-16:54:07.101 -> Testing RequestBox 2 Leds -
-16:54:09.125 -> -
-16:54:09.125 -> Prepare Topics to publish: -
-16:54:09.125 -> Monitor_Primary/Status -
-16:54:09.125 -> Monitor_Primary/Power -
-16:54:09.158 -> Monitor_Primary/AirQuality -
-16:54:09.158 -> Monitor_Primary/DallasTemperatures -
-16:54:09.191 -> Monitor_Primary/HeartBeatAck -
-16:54:09.191 -> -
-16:54:09.191 -> Prepare Topics to subscribe to: -
-16:54:09.224 -> Monitor_Primary/SetRelays -
-16:54:09.224 -> Monitor_Primary/SetRequestLights -
-16:54:09.258 -> Mediator/HeartBeat -
-16:54:09.258 -> -
-16:54:09.258 -> Try to connect to the MQTT Broker -
-16:54:09.457 -> Monitor_Primary is now connected to the MQTT Broker -
-16:54:09.490 -> Subscribe to Topic: Monitor_Primary/SetRelays....OK -
-16:54:09.523 -> Subscribe to Topic: Monitor_Primary/SetRequestLights....OK -
-16:54:09.556 -> Subscribe to Topic: Mediator/HeartBeat....OK -
-16:54:09.556 -> -
-16:54:09.556 -> Evaluate Jumper settings: -
-16:54:09.589 -> Service Mode is OFF -
-16:54:09.589 -> Diagnostic Mode is OFF -
-16:54:09.589 -> -
-16:54:09.622 -> Channel 08 Mode is: R -
-16:54:09.622 -> Channel 09 Mode is: T -
-16:54:09.622 -> Channel 10 Mode is: R -
-16:54:09.656 -> Channel 11 Mode is: R -
-16:54:09.656 -> -
-16:54:09.656 -> Initializing Current Measurements.... -
-16:54:09.689 -> Current Measurements Initialized. -
-16:54:09.689 -> -
-16:54:12.806 -> Start initialisation of sensors: -
-16:54:12.806 -> Initialize BME280 sensor for Temperature, Hygro and Baro.....OK -
-16:54:13.237 -> Initialize CCS811 sensor for eCO2 and eVOC..... OK -
-16:54:17.416 -> Initialize SDS011 Particle Sensor.....OK -
-16:54:19.440 -> Searching for Dallas Temperature Sensors.... -
-16:54:19.473 -> Sensor no 0: ROM = 40 25 65 117 208 1 60 30 , Chip = DS18B20 -
-16:54:19.507 -> Sensor no 1: ROM = 40 31 51 117 208 1 60 66 , Chip = DS18B20 -
-16:54:19.540 -> Found 2 Dallas Temperature Sensors. -
-16:54:20.568 -> Sensor no 0: Temperature = 25.12 Celsius, -
-16:54:21.596 -> Sensor no 1: Temperature = 24.69 Celsius, -
-16:54:21.596 -> -
-16:54:21.596 -> Enter 'D' to repeat the Dallas Sensor Search -
-16:54:21.630 -> -
-16:54:21.630 -> No errors found during initialisation -
-
-
Hulp Software:
-
-Voor het testen van de Arduino firmware zijn twee hulpprgramma's -gemaakt in FreePascal (3.2.0) met de Lazarus-IDE (2.0.12) voor Linux.
-Het programma Mediator vervult de functies van de "Mediator" in die zin -dat de door de Monitor unit geproduceerde gegevens getoond worden en dat - de "Mediator commando's" gegeven kunnen worden. Er zit verder geen -slimmigheid in.
-Het programma MqttSpy abonneert zich op alle berichten van de Broker en laat die zien met een time-stamp.
-Beide programma's produceren een event-log file met een date-timestamp als naam.
-Het IP adres van de Broker wordt uit een tekst bestandje -MQTTBrokerIP.txt gelezen, en -indien gewijzigd- daar ook weer naar -teruggeschreven bij het stoppen van het programma
-Beide programma's zijn in broncode te downloaden in zip-formaat. Er zit een linux-32 executable bij.
-Voor -het compileren is een niet te oude versie van Lazarus / Free Pascal -nodig.
-
- -
Software:
-
-De software voor de monitor units is ontwikkeld met de Arduino 1.8.16 IDE op een Linux-Mint PC.
-Het testen van de communicatie is gedaan tegen de �Mosquitto� Broker op diezelfde PC.
-
-De Arduino software bestaat uit:
-Een directory �FW_Monitor_Primary� met de files:
-
-�FW_Monitor_Primary.ino�
-�Client.cpp�
-�Currents.cpp�
-�Sensors.cpp�
-�Globals.h�
-�DiagMEGA.h�
-
-�FW_Monitor_Primary.ino� is de start-up file voor het project. -Aanbeveling voor de naam: �FW_� + de CLIENTID van de betreffende -instantie.
-De naam van het directory en deze .ino file moeten identiek zijn.
-Deze .ino file bevat de setup(), loop() en enkele algemene functies.
-
-�Client.cpp� bevat nagenoeg alles wat nodig is voor het publiceren en ontvangen van MQTT berichten.
-
-�Currents.cpp� bevat de routines die nodig zijn voor het meten van de -stromen. Er wordt een interrupt handler gebruikt die ook nodig is als er - geen stromen gemeten hoeven te worden.
-In deze interrupt handler worden ook enkele andere functies afgehandeld.
-
-�Sensors.cpp� bevat de routines voor het initialiseren en bevragen van de sensors, anders dan de stroom sensors.
-
-�Globals.h� bevat definities voor variabelen die in meer dan 1 file -nodig zijn, en de #defines voor het in/uit configureren van sensors.
-
-�DiagMEGA.h� bevat een aantal definities die handig zijn voor het debuggen, i.h.b. met een oscilloscope.
- -
- Overzicht Functies:
- -
-
| Functie - |
- Aangeroepen door - |
- Hoe vaak - |
- Doel - |
-
| In .INO file: - |
- - |
- - |
- - |
-
| EvaluateLeds () - |
- Currents.cpp / ISR(TIMER3_COMPA_vect) - |
- ca. 6 Hz - |
- Leds, zo nodig knipperen - |
-
| EvaluateJumpers () - |
- .ino-file setup () | -1-malig of in service mode bij invoer van 'D' - |
- Stand van de jumpers uitzoeken - |
-
| Sequence_MQTT_Leds () - |
- .ino-file setup () | -1-malig | -Testen van de 4 MQTT leds - |
-
| Sequence_Request1_Leds () - |
- .ino-file setup () | -1-malig | -Testen van de leds op Request box 1 - |
-
| Sequence_Reques2_Leds () - |
- .ino-file setup () | -1-malig | -Testen van de leds op Request box 2 | -
| SystemReset () - |
- .ino-file loop () | -In service mode bij invoer van 'R' | -Complete hardware reset van de Arduino. -Doet hetzelfde als de reset button - |
-
| setup () - |
- Bij opstarten - |
- 1-malig | -Initialisaties - |
-
| loop () - |
- Continue - |
- ca. 1 kHz - |
- Handelt opdrachten via de seri�le poort af. - |
-
- |
- - |
- - |
- - |
-
| In file Client.cpp: - |
- Aangeroepen door - - |
- Hoe vaak - - |
- Doel - - |
-
| InitTopics () - |
- InitClient () | -1-malig | -Voorbereiden van de Topic strings - |
-
| TopicReceived () - |
- PubSub Library (Callback) - |
- Bij ontvangen van een topic - |
- Opdracht uitvoeren - |
-
| UpdateClient () - |
- .ino-file loop () - |
- ca. 1 kHz - |
- Publiceren van Topics - |
-
| InitClient () - |
- .ino-file setup () | -1-malig | -Initialisatie, opzetten van communicatie met de Broker, Subscriptions doen. - |
-
- |
- - |
- - |
- - |
-
| In file Currents.cpp: - |
- Aangeroepen door - - |
- Hoe vaak - - |
- Doel - - |
-
| ISR(TIMER3_COMPA_vect) - |
- Timer 3 Interrupt - |
- 20 kHz - |
- Systeem timing, Meten van de stroomtrafo's, -Opwekken Blink signaal. - |
-
| UpdateCurrents () - |
- ISR(TIMER3_COMPA_vect) | -0.5 Hz - |
- Berekenen van stromen en fase hoeken, Voorbereiden van Payload Power - |
-
| InitCurrents () - |
- .ino-file setup () | -1-malig | -Initialisatie van A/D converter en Timer 3 - |
-
- |
- - |
- - |
- - |
-
| In file Sensors.cpp: - |
- Aangeroepen door - - |
- Hoe vaak - - |
- Doel - - |
-
| UpdatePublicationScheduler () - |
- - |
- - |
- Bepaalt publicatie interval - | -
| UpdateSensors () - |
- .ino-file loop () | -ca. 1 kHz | -Uitlezen van geconfigureerde sensoren - |
-
| SearchDallasSensors () - |
- .ino-file setup () -.ino-file loop () |
- 1-malig, of in service mode bij invoer van 'D' | -Zoek naar Dallas temperatuursensors op de 1-wire bus. - |
-
| ReadDallasSensor () - |
- .ino-file setup () -.ino-file loop () |
- 1-malig, of in service mode bij invoer van 'D' | -Uitlezen van de gevonden Dallas sensoren. -N.B. Het periodiek uitlezen van deze sensoren gebeurt via een ander mechanisme in UpdateSensors () - |
-
| InitSensors () - |
- .ino-file setup () | -1-malig | -Initialisatie van sensors, voor zover die geconfigureerd zijn - |
-
- |
- - |
- - |
- - |
-
| In file DiagMEGA.h - |
- - |
- - |
- Definities voor diagnose signalen op ADC-L connector. - |
-
| In file Globals.h - |
- - |
- - |
- Definities van globale identifiers, -Configuratie van sensor gebruik. - |
-
-
- Arduino MEGA 2560 - pin use:
- -
- - -
| Pin
- number - |
- Port,
- Bit - |
- Funtion - |
- Remark - |
-
| A0 - |
- PORTF-0 - |
- Diagnostic output - |
- - |
-
| A1 - |
- PORTF-1 | -Diagnostic output | -- |
-
| A2 - |
- PORTF-2 | -Diagnostic output | -- |
-
| A3 - |
- PORTF-3 | -Diagnostic output | -- |
-
| A4 - |
- PORTF-4 | -Diagnostic output | -- |
-
| A5 - |
- PORTF-5 | -Diagnostic output | -- |
-
| A6 - |
- PORTF-6 | -Diagnostic output - | -Also on Feature Connector - | -
| A7 - |
- PORTF-7 | -Diagnostic output | -Also on Feature Connector - | -
- |
- - |
- - |
- - |
-
| A8 - |
- PORTK-0 - |
- Analog input Channel 8 - |
- Current input Line tbd / Voltage PE-N - |
-
| A9 - |
- PORTK-1 | -Analog input Channel 9 | -Current input Line tbd | -
| A10 - |
- PORTK-2 | -Analog input Channel 10 | -Current input Line tbd | -
| A11 - |
- PORTK-3 | -Analog input Channel 11 | -Current input Line tbd | -
| A12 - |
- PORTK-4 | -Analog input Channel 12 | -Current input Line T | -
| A13 - |
- PORTK-5 | -Analog input Channel 13 | -Current input Line S | -
| A14 - |
- PORTK-6 | -Analog input Channel 14 | -Current input Line R - |
-
| A15 - |
- PORTK-7 | -Analog input Channel 15 | -Voltage input Line R - |
-
- |
- - |
- - |
- - |
-
| 0 - |
- PORTE-0 | -RXD-0 - |
- programming / diagnostics - |
-
| 1 - |
- PORTE-1 | -TXD-0 - |
- programming / diagnostics | -
| 2 - |
- PORTE-4 - |
- /Enable Particle Sensor - |
- - |
-
| 3 - |
- PORTE-5 | -1-Wire - |
- DS18x20 Temperature Sensors - |
-
| 4 - |
- PORTG-5 | -n.c. - |
- - |
-
| 5 - |
- PORTE-3 | -SEL-TFT - |
- On Feature Connector - |
-
| 6 - |
- PORTH-3 | -DIR-TFT - |
- On Feature Connector | -
| 7 - |
- PORTH-4 | -n.c. - |
- - |
-
- |
- - |
- - |
- - |
-
| 8 | -PORTH-5 | -RESET - | -Hardware Reset - |
-
| 9 - |
- PORTH-6 | -n.c. - |
- - |
-
| 10 | -PORTB-4 | -SEL-ETH - |
- Internally to ETH Board - |
-
| 11 - |
- PORTB-5 | -PB5 / OC1A / PCINT5 - |
- On Feature Connector | -
| 12 - |
- PORTB-6 | -PB6 / OC1B / PCINT6 - |
- On Feature Connector | -
| 13 - |
- PORTB-7 | -n.c. - |
- - |
-
- |
- - |
- - |
- - |
| 14 - |
- PORTJ-1 - |
- TXD3 - |
- n.c. - |
-
| 15 - |
- PORTJ-0 | -RXD3 - |
- Data from particle
- Sensor - |
-
| 16 - |
- PORTH-1 | -TXD2 - |
- not used - |
-
| 17 - |
- PORTH-0 | -RXD2 - |
- not used - |
-
| 18 - |
- PORTD-3 | -TXD1 - |
- On Feature Connector | -
| 19 - |
- PORTD-2 | -RXD1 - |
- On Feature Connector | -
| 20 - |
- PORTD-1 | -I2C-SDA - |
- Sensors - |
-
| 21 - |
- PORTD-0 | -I2C-SCL - |
- Sensors - |
-
- |
- - |
- - |
- - |
-
| 22 - |
- PORTA-0 - |
- Led-Green-1 - |
- Request Unit 1 - |
-
| 23 - |
- PORTA-1 | -Led-Green-2 - |
- Request Unit 2 | -
| 24 - |
- PORTA-2 | -Led-Red-1 | -Request Unit 1 | -
| 25 - |
- PORTA-3 | -Led-Red-2 - |
- Request Unit 2 | -
| 26 - |
- PORTA-4 | -Switch-1 - |
- Request Unit 1 | -
| 27 - |
- PORTA-5 | -Switch-2 - |
- Request Unit 2 | -
| 28 - |
- PORTA-6 | -JP1 (JP2 = GND) - |
- When connected: Service Mode - |
-
| 29 - |
- PORTA-7 | -JP3 (JP4 = GND) - |
- When connected: Diagnose Mode - | -
- |
- - |
- - |
- - |
-
| 30 - |
- PORTC-7 | -Relay Output-T26 | -- |
-
| 31 - |
- PORTC-6 | -Relay Output-T27 | -- |
-
| 32 - |
- PORTC-5 | -Relay Output-T28 | -- |
-
| 33 - |
- PORTC-4 | -Relay Output-T29 | -- |
-
| 34 - |
- PORTC-3 | -Relay Output-T30 | -- |
-
| 35 - |
- PORTC-2 | -Relay Output-T31 | -- |
-
| 36 - |
- PORTC-1 | -Relay Output-T32 - |
- - |
-
| 37 - |
- PORTC-0 | -Led HeartBeat - |
- - |
-
- |
- - |
- - |
- - |
-
| 38 - |
- PORTD-7 - |
- Led-SUB - |
- - |
-
| 39 - |
- PORTG-2 | -Led-PUB - |
- - |
-
| 40 - |
- PORTG-1 | -Led-CONN - |
- - |
-
| 41 - |
- PORTG-0 | -Config-alt - |
- - |
-
- |
- - |
- - |
- - |
-
| 42 - |
- PORTL-7 | -PL7 | -On Feature Connector | -
| 43 - |
- PORTL-6 | -PL6 - |
- On Feature Connector | -
| 44 - |
- PORTL-5 | -PL5 - |
- On Feature Connector | -
| 45 - |
- PORTL-4 | -PL4 - |
- On Feature Connector | -
| 46 - |
- PORTL-3 | -Config-ch-11 jumper - |
- - |
-
| 47 - |
- PORTL-2 | -Config-ch-10 jumper | -- |
-
| 48 - |
- PORTL-1 | -Config-ch-09 jumper | -- |
-
| 49 - |
- PORTL-0 | -Config-ch-08 jumper - | -- |
-
- |
- - |
- - |
- - |
-
| 50 - |
- PORTB-3 | -SPI-MISO - |
- Also on Feature Connector | -
| 51 - |
- PORTB-2 | -SPI-MOSI - |
- Also on Feature Connector | -
| 52 - |
- PORTB-1 | -SPI-SCK - |
- Also on Feature Connector | -
| 53 - |
- PORTB-0 | -SPI-SS - |
- SEL SD-Card on ETH Shield? not used - |
-
- |
- - |
- - |
- - |
-
- -
- -
Begrippen: (binnen het kader van dit document / project)
-
-Monitor, Monitor-unit, Unit: De hier beschreven elektronica en firmware.
-
-Mediator:
-Een software die de gevens van de Units verzamelt en besluiten neemt -over toe te laten c.q. af te schakelen verbruikers. Zou ook de -verwarming / koeling en ventilatie kunnen aansturen.
-
-Broker, Client, Topic, Payload:
-Begrippen van het MQTT protocol. MQTT-clients �publiceren� hun gegevens -aan de Broker en kunnen �geabonneerd� zijn op bepaalde gegevens van -andere clients.
-Een MQTT bericht bestaat uit een �Topic� en een �Payload�. De Topic -geeft aan waar een bericht vandaan komt of naartoe moet, de Payload is -de inhoud van het bericht (gemeten waardes, afschakel opdrachten, e.d.) -De Broker (ook wel Server genoemd) verdeelt de aangeboden informatie -over de geabonneerde clients, maar bemoeit zich niet met de inhoud van -de berichten.
-
-BME280:
-Een sensor die temperatuur, luchtvochtigheid (hygro) en luchtdruk meet. -Deze sensor gebruikt het I2C protocol en wordt met een 4-ader kabeltje -aangesloten op de Unit. Deze sensor zal in het algemeen op een geschikte - plek in de buurt van de Unit geplaatst worden, en niet in de buurt van -een warmtebron.
-Er zijn diverse goedkope PCB-tjes te koop waarmee deze chip gemakkelijk aangesloten kan worden, o.m. GY-BM E/P 280.
-Let op: de zeer goedkope BMP280 heeft geen hygro sensor aan boord.
-
-CSS-811:
-Een sensor die de equivalente CO2 en VOC gehaltes in de lucht meet.
Deze goedkope sensor meet ook VOC, Volatile Organic Compounds, Vluchtige - Organische Bestanddelen. Dat is een verzamelnaam voor gasjes die niet -in frisse lucht thuishoren.
-Er zijn diverse goedkope PCB-tjes te koop waarmee deze chip gemakkelijk aangsloten kan worden..
-De goedkopere versie loopt op 3.3 Volt en is offici�el niet 5 Volt -tolerant.
-
-CO2 of kooldioxide wordt door mensen en dieren uitgeademd en door planten opgenomen. Enkele richtwardes (Wikipedia):
- -390 ppm (2011) .. 417 ppm (2020) "normale" concentratie in de buitenlucht.
- -1500 ppm: Maximum toelaatbaar in een klaslokaal.
- -5000 ppm: MAC waarde = maximale langdurige blootstelling zonder blijvende schade.
- -10000 ppm: Sufheid bij langdurige blootstelling.
- -40000+ ppm: Ademnood, bewusteloosheid, dodelijk.
-
-Dallas, Dallas-Sensors:
-Hiermee wordt gedoeld op de bekende DS18B20 of DS18S20 temperatuur -sensoren. Deze sensoren leveren digitale informatie via een 1-draads -protocol. De calibratie is afhankelijk van het �B� of �S� type. Ik heb -slechte ervaring met het gebruik van �Parasite Power�, waarbij de sensor - z�n voedingsspanning betrekt van de signaaldraad. Ik gebruik ze hier -met een 5Volt voedingsspanning via een derde draad.
-
-CT, Current Transformer, Stroomtrafo:
-Een instrumentje om (doorgaans vrij grote) wisselstromen te meten, -zonder het circuit noemenswaardig te be�nvloeden. Een CT bestaat uit een - kern van gelamineerd ijzer, als bij een gewone transformator, of van -een of ander ferriet. De primaire wikkeling is doorgaans een enkele -draad die door het gat van de kern gestoken wordt en waardoor de te -meten stroom loopt. Er is een secondare wikkeling van doorgaans 100, -1000 of 10000 wikkelingen die aangesloten wordt op het meetcircuit. In -deze secondaire loopt dan een stroom die 100, 1000 of 10000 maal kleiner - is dan die in de primaire. Met een geschikte weerstand kan deze stroom -omgezet worden in een spanning die op velerlei manieren gemeten kan -worden.
-
-