Draadloze regentonmeter

 

 

 

 

 

 

1.     Inleiding.. 1

2.     Beschrijving.. 1

3.     Gebruik. 1

4.     Schema. 2

5.     Werking.. 2

6.     Sensor opbouw.. 4

7.     Afregelen.. 4

8.     De zender/meetmodule print: 2 versies. 4

9.     Testen.. 5

10.       RF data transmissie/ontvangst 7

11.       Software voor de meet/zender module. 7

12.       De receiver module. 8

13.       Het schema voor de receiver module. 8

14.       De receiver print 9

15.       Software voor de receiver module. 9

 

 

 

1.                   Inleiding

 

 

Deze schakeling is gebaseerd op de PIC16F687 microcontroller. Deze chip is eigenlijk een kleine computer die in één enkele chip bevat is, inclusief RAM geheugen, EEPROM, I/O poorten, centrale verwerkingseenheid enz. Als je deze chip koopt, is hij uiteraard leeg en bevat geen enkel programma. Je moet de broncode (zie link onderaan) compileren en de resulterende machinecode naar de chip downloaden. Hierbij kun je gebruik maken van een kleine "programmer" die verbonden wordt tussen de parallelle poort van de PC en de chip. Voor meer in detail uitleg van dit soort dingen, kun je best eens naar volgende plaats surfen: Getting started with microcontrollers.

 

Terug naar boven

 

2.                   Beschrijving

 

Dit apparaat meet de vloeistof inhoud van een tank met behulp van 8 wisselstroom elektroden.

Het apparaat kan zowel lokaal gebruikt worden als in combinatie met een “in-house” ontvanger unit (draadloze gegevensoverdracht).

Dit project demonstreert een aantal aspecten van de PIC16F687 microcontroller, zoals: ultra low power wake up, seriele communicatie, nanowatt technologie e.a.

De vloeistofmeting gebeurt in een resolutie van 1/8 (bijna leeg) tot 8/8 (vol).

Het apparaat kan voor verschillende doeleinden worden ingezet. Bijvoorbeeld: meten van de inhoud van een opslagtank voor regenwater, van een drinkwatertank in een motorhome of caravan, van de afvalwater tank in een motorhome of caravan, enzovoort.

 

Terug naar boven

 

3.                   Gebruik

 

De sensor moet in de te meten tank geplaatst zijn. Na het insteken van de batterijen verschijnt de hoeveelheid vloeistof op het bar-graph display (van 1/8 tot 8/8). Na ongeveer 1 minuut schakelt het display van het apparaat terug uit. Het display kan ten allen tijde weer ingeschakeld te worden door kort op de knop te drukken. Weer uitschakelen gebeurt door de knop langer dan 1 seconde ingedrukt te houden.

 

Eén-knops bedienoing: druk op de knop om het display in werking te stellen. Houd de knop langer dan 1 seconde ingedrukt om het display weer uit te schakelen.

 

Nul-indicatie: als de te meten tank helemaal leeg is zal de onderste LED knipperen om een lege tank aan te geven.

 

Eenmaal per uur schakelt het apparaat zichzelf gedurende enkele seconden in om de draadloze gegevensoverdracht te verzorgen (433,92 MHz) (optioneel).

 

De zender/meet module werkt op batterijen die ca. 1 jaar meegaan.

Vervanging van de batterijen: 2 lithium knoopcellen formaat 2032. Deze batterijen hebben een capaciteit van ca. 220 mAh.

 

De zender/meet module kan op zichzelf gebruikt worden ofwel in combinatie met een optionele ontvanger module (die op 230V werkt). Deze ontvanger module kan geplaatst worden in een straal van 30 meter rond de zender module.

 

Terug naar boven

 

4.                   Schema

 

 

 

 

Onderdelenlijst

 

Link naar Eagle schema

 

Link naar Eagle schema, SMD

 

Terug naar boven

 

5.                   Werking

 

(Referentie naar het schema).

 

Voeding

 

Diode D2 staat in voor de bescherming tegen omgekeerd aansluiten van de batterijen en tevens om de voedingsspanning ietwat omlaag te brengen. Twee lithium-knoopcellen leveren in principe 6V, in de praktijk zal dat 6.2 V zijn als ze nieuw zijn, de spanningsval over de diode brengt dit omlaag naar ca. 5.7 V wat nog net aanvaardbaar is voor de PIC en de andere ICs. Dit bespaart een spanningsregelaar (dewelke het stroomverbruik alleen maar zou doen toenemen).

 

 

Meten van vloeistofinhoud

 

Aangezien het meten van vloeistoffen met behulp van gelijkspanning snel tot elektrolyse-effecten en corrosieproblemen leidt, is in deze schakeling gekozen voor een meetspanning in de vorm van een blokvormige wisselspanning van ca. 10 kHz.

De schakeling is voornamelijk bedoeld voor het meten van het niveau in een reservoir met regenwater, maar kan uiteraard ook voor andere vloeistoffen aangewend worden. Er wordt gebruik gemaakt van acht meetpunten die op bepaalde plaatsen in het reservoir aangebracht zijn. Door de plaatsing hiervan verstandig te kiezen, kunnen onnauwkeurigheden in de niveau-indicatie tot een minimum worden herleid.

De microcontroller (IC1) fungeert als centraal stuurelement van de schakeling. Poort RC6 (uitgang) is een softwarematige oscillator van ca. 10 kHz. Deze uitgang vormt de meetspanning, die terecht komt op de spanningsdeler R3/R4. Via de-multiplexer IC2 en condensatoren C5..C12 komt de meetspanning tevens op de via de X1 sub-d connector aangesloten elektroden. Dit komt doordat de de-multiplexer aangestuurd wordt door een BCD waarde (0..7) die door de microcontroller geleverd wordt via <RB6:RA1:RA2>, waardoor dus de elektroden beurtelings worden afgetast.

Wanneer de elektrode in kwestie droog is, dan blijft de meetspanning ongewijzigd. Bevindt de elektrode zich onder water, dan is er sprake van een extra belasting voor spanningsdeler R3/R4 en daalt de meetspanning tot een iets lagere waarde. Met behulp van een simpele demodulator (D1/C1/R5) wordt het verloop van de meetwisselspanning herleid tot een soort omhullende die vervolgens wordt toegevoerd aan comparator IC3.

De uitgang van comparator IC3 wordt vervolgens weer in de microcontroller ingevoerd (RB4), waarbij een “hoog” betekent dat de elektrode droog is, en een “laag” dat de elektrode nat is.

Er dient rekening gehouden worden met de tijdconstante C1/R5, die de meetwaarde van elke elektrode vasthoudt tot iets ná het volgende omschakelpunt. Dit zou tot effect hebben dat de volgende elektrode als “nat” gemeten wordt terwijl hij misschien eigenlijk “droog” is. Door een halve tijdsblok te wachten (t.o.v. RB6) wordt dit voorkomen.

De gemeten waarde wordt via leds LD1..LD8, die gemultiplexed vanuit de microcontroller aangestuurd worden, keurig getoond.

 

 

Oscillator

 

Als oscillator is gekozen voor een extern 20 MHz kristal omdat de ingebouwde (max. 8 MHz) oscillator niet snel genoeg is om een softwarematige frequentie van 10 kHz op te wekken. We moeten deze frequentie zelf opwekken om volledige controle tijdens elke periode te hebben (PWM module is dus niet bruikbaar).

Bij een 20 MHz kristal kan best de configuratie optie _HS_OSC gekozen worden in de MPLAB source code.

 

 

Gebruikte microcontroller

 

Als microcontroller werd gekozen voor een PIC16F687. Dit omdat deze controller een aantal belangrijke eigenschappen heeft dewelke we voor dit project nodig hebben: nanowatt technologie, seriele communicatie, enz.

 

De programmering van de PIC doe ik vrijwel altijd via ICSP programmatie (in-circuit serial programming). Daarbij dient wel rekening gehouden worden met het feit dat bij deze PIC de lijnen RA0 en RA1 gebruikt worden voor het programmeren en niet RB6..RB7 zoals bij de meeste andere PICs.

 

Zie ook de datasheet van de PIC16F687.

 

Om de seriële communicatie werkend te krijgen dank ik Fr. Tom McGahee's voor zijn uitstekende bijdrage omtrent dit onderwerp, zoals te lezen is op zijn website. (Klik daarbij op PICUART.ZIP). Wel heb ik wat aanpassingen moeten doen aan de PICUART voorbeeld source code specifiek voor de PIC16F687.

 

 

Ultra laag batterij verbruik door periodiek ontwaken.

 

De schakeling is zo opgezet dat ze een jaar of langer kan werken op 2 lithium knoopcellen. Een aan/uit schakelaar ontbreekt dan ook. Dit wordt mogelijk gemaakt door de zogenaamde Ultra Low Power Wake Up (ULPWU) module die in de PIC16F687 is ingebouwd. De microcontroller schakelt zichzelf 1 maal per uur in gedurende 1.5 seconden, waarbinnen de meting uitgevoerd wordt en draadloos doorgestuurd wordt. Nadien gaat de processor weer in slaap voor één uur. Tijdens slaap is het verbruik minder dan 1 µA, tijdens de 1.5 seconden werktijd iets van 10 à 20 mA.

 

De werking is als volgt: een condensator (C13) van 680 nF is aangesloten op poort RA0 (de ULPWU poort). Net voor het in slaap gaan doet de processor een 5-tal dingen:

-          de rest van de schakeling (dit zijn de andere IC’s, de zendmodule enz.) uitzetten door poort RC7 laag te zetten;

-          de condensator opladen (door poort RA0 als output te zetten, hoog te zetten en 5 ms te wachten);

-          poort RA0 weer als digitale input zetten;

-          de Interrupt-On-Change enabelen;

-          tevens de ULPWU module enabelen

 

Hierna gaat de processor in slaap. Tijdens slaap is het stroomverbruik minder dan 1 µA. Tijdens slaap zal tevens, door de ULPWU module, de condensator langzaam leeg lopen. Na 15 seconden zal de spanning over de condensator zo laag zijn dat de processor (door de Interrupt-On-Change feature) automatisch weer wakker zal worden. Omdat 15 seconden te kort is voor onze doeleinden gaat de processor een telwerk onderhouden (sleepCounter) en onmiddellijk weer in slaap gaan. Pas na 240 keer in slaap en terug wakker te zijn geweest wordt de “één uur” mijlpaal bereikt en zal de processor beslissen om zijn éénmaal-per-uur-werk te doen: meting uitvoeren en doorzenden via de RF module. Deze handeling wordt een aantal keer herhaald (via telwerk <clock:clockH:clockHH>) om zeker te zijn dat de ontvanger de data goed ontvangen heeft. Na 1.5 seconden dit werk herhaald te hebben gaat de processor weer in slaap en begint de hele procedure weer opnieuw.

Bij elke wakker-cyclus van 15 seconden wordt bovendien kort (5 ms) led8 aangezet zodat de gebruiker kan zien dat het apparaat draait.

 

Het stroomverbruik per jaar (=8760 uur) is dus theoretisch:

Eén-uurs cyclus:

15 mA x (1.5 x (1 h)/ 3600) x 8760 = 54 mAh per jaar voor het periodisch doorzenden van gegevens

Standby tijd:

0.001 mAh x 8760 h = 8.8 mAh per jaar voor de slaap modus.

15 seconden lichtpuls op LED8:

      8 mA x 0.005 (1 h / 3600) x 240 x 8760 + 23.4 mAh per jaar voor de knipper-led8 modus.

 

Totaal dus ca. 86 mAh per jaar (een lithium-knoopcel maat 2032 kan zo’n 220 mAh leveren dus dit zou geen probleem mogen zijn).

 

 

(De informatie over de ULPWU module werd gehaald uit de Microchip application note nr. 879).

 

Terug naar boven

 

6.                   Sensor opbouw

 

Het maken van een geschikte sensor is heel eenvoudig. Neem wat lintkabel van 9 geleiders en knip elke geleider op de gewenste lengte af. De massa moet het langst zijn want deze komt helemaal op de bodem van het te meten vat, of toch minstens onder de draad van de onderste sensor. Strip alle 9 uiteinden ook een halve centimeter af. De lintkabel vervolgens in een stuk PVC buis steken en vastmaken.

 

De andere kant van de lintkabel wordt gesoldeerd op een 9-pins vrouwelijke sub-d connector (massa=pin 9, draad 1=pin1, draad 2=pin2 enz.). Deze connector wordt in de mannelijke 9-pins printmontage sub-d connector op de print gestoken.

 

Hieronder een zeer simpele sensor (zonder PVC buis alsnog) gebruikt om te testen met een glas water:

 

 

 

Terug naar boven

 

7.                   Afregelen

 

De schakeling moet eenmalig afgeregeld worden. Leg de sensor in een glas water en zorg ervoor dat alleen de massa en de onderste vier meetpunten in het water komen. Regel met P1 nu zo af dat er 4 LEDs gaan branden en geen 8 of nul.

 

Terug naar boven

 

8.                   De zender/meetmodule print: 2 versies

 

Er zijn 2 versies van de zender print: een through-hole en een smd versie.

 

Through-hole versie

 

Dubbelzijdig, geschikt voor ICSP programmatie.

 

PDF file met bovenzijde, onderzijde, beide zijdes en componenten-opstelling: Print-layout

 

Link naar Eagle print

 

Prototype van de opgebouwde print:

 

 

 

Bovenaan links de 4051 IC met daar overheen de zend module TWS-434 (de overblijvende header pin rechts is om een draad-antenne in te steken). Onderaan ietwat rechts van het midden bevindt zich de PIC 16F687. Links daarvan het 20 MHz kristal. Rechts de 8 LEDs, links daarvan de drukknop.

Zoals je kunt zien bevatte de eerste versie van de print nog een paar design foutjes vandaar hier en daar wat patch kabeltjes.

 

 

SMD versie

 

Dubbelzijdig, geschikt voor ICSP programmatie.

 

PDF file met bovenzijde, onderzijde, beide zijdes en componenten-opstelling: Print-layout

 

Link naar eagle print, SMD

 

Terug naar boven

 

9.                   Testen

 

Bij problemen kan men met een oscilloscoop bepaalde metingen uitvoeren.

Onderstaande foto geeft weer wat men kan verwachten als men met een 2-kanaals oscilloscoop de signalen RB6 (pin 11 van de PIC) en opamp-out (pin 6 van de CA3130) vergelijkt. Het groene signaal is dat van RB6, het rode signaal is dat van de CA3130 waarbij de onderste twee elektroden onder water staan. De scaling van de scope is aangepast op respectievelijk 5V en 10V om de signalen beter van mekaar te kunnen onderscheiden. De tijdinstelling staat op 1 ms/div.

Hoe meer sensor draden er onder water staan, hoe breder de nul-tijd van het rode signaal. In onderstaand voorbeeld is de breedte van het 0-tijd van het rode signaal dus ongeveer twee groene pulsen (een groene 0 en een groene 1). Zoals eerder reeds aangegeven blijft de 0 van het rode signaal iets langer duren dan verwacht (dit is normaal) en gaat hij dan weer omhoog.

Het groene signaal geeft de LSB (least significant bit) weer van de BCD waarde voor selectie van de sensordraad. De andere bits van de BCD staan niet op het plaatje.

 

 

 

Twee andere interessante  signalen om te bekijken zijn de wisselspanning op 1 sensor en de oscillator. Verwijder de sensor uit het water en sluit kanaal 1van de scope aan op de anode van D1.Sluit kanaal 2 van de scope aan op pin 1 van de sub-d connector op de print. De scope toont nu (groene signaal) een wisselspanning (doordat C5 er tussen zit) van 8 periodes die op sensor 1 terecht komt maar slechts gedurende 1/8 van de tijd (dat komt doordat het 4051 IC de aangeboden oscillator frequentie verdeelt over de 8 sensordraden). De continue oscillator frequentie op de anode van D1 (rode signaal) is gelijkspanning (want ging niet door een condensator).

 

 

 

Terug naar boven

 

10.               RF data transmissie/ontvangst

 

Optioneel kan een RF zendmodule gemonteerd worden op de 5-pins header “OPTIONAL_RF_TRANSMIT_MODULE”. Als module is hierbij gekozen voor deTWS-434 RF transmitter module van Rentron (www.rentron.com). Deze is speciaal bedoeld voor transmissie over 433.92 MHz van serieel aangeboden data.

Om de data aan te bieden aan de module gebruiken we de USART (universal synchronous/asynchronous receiver/transmitter) module van de PIC microcontroller.

 

Als tegenhanger van de TWS-434 bestaat de RWS-434 RF Receiver module van dezelfde fabrikant. Deze ontvangt onze gegevens en maakt hier terug een mooie seriële blokvorm van die zo kan worden gelezen door de USART van de PIC van de ontvanger.

 

Terug naar boven

 

11.               Software voor de meet/zender module

 

Beschrijving.

 

De software is vrij heftig interrupt gedreven. Dit betekent dat het meeste werk gedurende timer interrupts gebeurt. De belangrijkste taken hierbij zijn:

-          het genereren van de oscillator output op RB6

-          het genereren van de 3-bits BCD waarde voor de 4051 chip

-          het terug inlezen van het resultaat van de op-amp op poort RB4 (routine measureOneSensor)

-          het multiplexen van de LED display (routine LEDmultiplex)

In de main loop gebeuren dan de andere zaken zoals lezen van de drukknop, vertraging, seriële data transmissie, automatisch in slaap gaan na één minuut enz.

 

 

Customistaties van de software:

 

De software kan gehercompileerd worden met behulp van MPLAB indien gewenst. Men kan hierbij een aantal aangepaste definities (“#define”’s) veranderen om de werking lichtjes te veranderen.

 

Dit zijn de definities (voor meer uitleg bekijk de commentaar in de source code):

 

MAINS_POWERED:          om het apparaat alternatief met netvoeding te voeden (automatische uitschakeling is dan niet actief)

REVERSE:                        om de bargraph LED array omgekeerd te laten werken

RF_DISABLED:                 om de uurlijkse wake-up voor data transissie inactief te maken

TESTING:                          voor test doeleinden, zorgt er voor dat de RF data transissie om de 90 seconden plaatsvindt i.p.v. uurlijks

 

 

ASM file:

 

Source code

 

HEX file:

 

Hex file

 

Terug naar boven

 

12.               De receiver module

 

Eigenschappen van de receiver module

 

De receiver module kan optioneel gebruikt worden om de gemeten tank inhoud op een andere plaats af te lezen.

De kenmerken van de receiver module zijn:

-          werkt op 230 V AC en scant voortdurend of er iets te ontvangen is

-          is softwarematig uitbreidbaar in de toekomst; momenteel ontvangt hij enkel de tankinhoud van de meetmodule maar in de toekomst kan hij bijvoorbeeld net zo goed de gegevens van een zelfbouw windsnelheids meter ontvangen

-          SMD design

 

 

Werking van de receiver module

 

De receiver module bevat eveneens een PIC16F687 microcontroller als centraal element. Daarnaast zijn er nog drie 7-segment displays. Dit is een beetje overkill, want aan één display hebben we in principe genoeg (de gemeten waarde is van 0 tot en met 8). In de toekomst ben ik van plan om deze receiver-module nog voor andere projecten in te zetten zoals bijvoorbeeld een draadloze wind snelheidsmeter enz., vandaar dus 3 displays.

 

De drie displays worden gemultipexed aangestuurd d.m.v. drie transistoren Q1..Q3.

 

De data wordt ontvangen met behulp van de RWS-434 RF Receiver module. Deze biedt de seriële data aan de PIC aan via pin 2 (2400 baud). De ontvangst is constant. Nu gebruiken natuurlijk ook nog andere huishoudelijke apparaten de frekwentie van 433.92 MHz zoals bijvoorbeeld weerstations, RC auto’s enz. De PIC controleert daarom of de binnenkomende data wel van onze meet/zender module afkomstig is. Deze zend immers de bytes “FLUx” uit (FLU staat voor Fluid level meter, x is een waarde van 0 .. 8, nl. de gemeten vloeistof niveau waarde) gevolgd door een korte pauze. De gemeten vloeistof niveau waarde wordt bij een geldige ontvangst opgeslagen in een variabele en via interrupt-routines gemultiplexed naar de display.

 

De drukknop S1 dient om van functie te veranderen bijvoorbeeld schakelen tussen inhoud van de inhoud van de regentank, windsnelheid (deze functie dient nog ontwikkeld te worden), enz.

 

 

Voeding

 

De voeding komt vanuit een willekeurige wall-adapter die een gelijk- of wisselspanning levert van 8 .. 20 V. Deze wordt gelijkgericht (via diodes D1..D4) en gestabiliseerd via een 7805 spanningsregelaar. Dankzij de gelijkrichter D1..D4 is omgekeerd aansluiten van de wall-adapter van geen belang.

 

 

Oscillator

 

Als oscillator is ditmaal gekozen voor de ingebouwde 8 MHz oscillator van de PIC.

 

Terug naar boven

 

13.               Het schema voor de receiver module

 

(niet getest)

 

 

Onderdelenlijst receiver module

 

Link naar Eagle schema

 

Terug naar boven

 

14.               De receiver print

 

Dubbelzijdig, geschikt voor ICSP programmatie. Alleen een SMD versie beschikbaar (deze bevat wel een paar through-hole componenten zoals de 7-segment displays en de headers).

 

PDF file met bovenzijde, onderzijde, beide zijdes en componenten-opstelling: Print-layout

 

Link naar Eagle print

 

Terug naar boven

 

15.               Software voor de receiver module

 

 

ASM file:

 

Source code

 

HEX file:

 

Hex file

 

 

Terug naar boven

 

 

 

 

   Home                            Terug naar Electronica projecten