Met deze stroomsensor is een redelijk goede indicatie te verkrijgen hoeveel stroom er door een draad vloeit bij een spanning van 230V AC.
De print is voor diverse zaken te gebruiken, afhankelijk van hoe het PIC Basic programma is opgebouwd.
De 150711 print.
Ikzelf woon op een appartement met onderin een kelderbox en een garage.
Om nu in de woning boven te kunnen controleren of de verlichting in één van deze twee ruimtes niet is blijven branden,
controleert deze print de stroomopname van beide ruimtes.
De bedrading van deze ruimtes loopt achter een wandcontactdoos (= stopcontact) in de werkkamer naar beneden,
dus is de stroomsensor bij deze wandcontactdoos in de werkkamer geplaatst.
De 230V fasedraad van beide ruimtes loopt nu dóór de dikke rode draad die een paar maal door een ontstoringsspoel is gewikkeld,
die hierdoor als een soort trafo werkt en tevens de galvanische scheiding garandeert (de schakeling zelf is dus niet met het 230V net verbonden).
Opamp LM358 versterkt het zwakke signaal uit de spoel dat grotendeels evenredig is met de stroom die door de 230V leiding loopt.
Het versterkte signaal van de opamp wordt aangeboden aan een analoge ingang van een 12F675 of (als er een display nodig is) een 16F676.
Op een andere analoge ingang van de PIC zit de loper van een 5k potmeter aangesloten waarmee een spanning is in te stellen tussen 0 en 5V.
De PIC vergelijkt beide spanningen (dus die van de opamp en de instelling van de potmeter) en zal als de spanning van de opamp langer dan
1 seconde boven die van de instelpotmeter uitkomt een korte piep door een piëzo-zoemer in de woonkamer laten klinken en
continu een buzzer in de slaapkamer af laten gaan.
Alarm
De buzzer is geplaatst in de slaapkamer omdat de stroomsensor tevens een alarm functie heeft.
Als namelijk beneden een deur van kelderbox of garage wordt geopend dan gaat de verlichting aldaar automatisch aan,
wat de stroomsensor weer opmerkt en onmiddellijk de buzzer in de slaapkamer een akoestisch signaal zal laten geven, iemand opent een deur beneden!
In de woonkamer klinkt ook direct eenmalig heel kort een piep uit een piëzo-zoemer.
Als de grotere stroom door de 230V draad langer dan zo'n 5 minuten aanhoudt,
dan zal de piëzo-zoemer in de woonkamer elke minuut een korte piep laten klinken,
ten teken dat de verlichting in kelderbox of garage nog steeds aanstaat.
Aangezien de garagedeur automatisch (natuurlijk ) open gaat,
en er dus in rust een stand-by stroom voor de draadloze ontvanger van de garagedeur door de 230V leiding loopt,
is met de potmeter in te stellen hoeveel stroom er mag lopen, zonder dat het alarm zal afgaan
(ook makkelijk als er een diepvrieskist in de kelderbox zou worden geplaatst).
Het is al eens voorgekomen dat ik in de woning per ongeluk op de draadloze afstandsbediening van de garagedeur drukte en de garagedeur zonder mijn weten open stond.
Nu, dankzij deze stroomsensor, krijg ik meteen een seintje door de eerste piep van de piëzo-zoemer in de woonkamer.
Bij gebruik van een (tijdelijk) display i.p.v. 12F675 een 16F676 plaatsen.
![]() Geprepareerde spoel. Conrad 53 43 40 |
Spoel
De maximale stroom door de spoel is afhankelijk van de dikte van de draad door de spoel en het maximum vermogen dat door de gebruikte printkroonsteen mag.
Ikzelf heb soepel 1,5mm² gebruikt en deze vier keer door de spoel gehaald (zie foto rechts).
Display
Door (tijdelijk) een HD44780 display op de (witte) connector aan te sluiten
is af te lezen hoe groot de gemeten waarden zijn van de stand-by stroom van de automatische garagedeur en bij inschakeling van de lampen.
Hierop is het PIC Basic programma weer aan te passen.
Normaal heb ik er dus geen display aan zitten (eigenlijk is de voeding van deze print hiervoor ook te klein).
Als je helemaal geen display hebt kan het onderste deel van de print sowieso vervallen en kan er een 8-pins 12F675 PIC worden geplaatst
in plaats van een 14-pins 16F676.
Bij gebruik van een tijdelijk display het backlight zo mogelijk uit laten om de stroom te beperken.
Moet er continu een display (mét eventueel backlight) op aangesloten worden, dan zelf een print ontwerpen met een grotere voeding,
de trafo van de 150711 print is van een zeer klein formaat om de stand-by stroom van de print zo laag mogelijk te houden.
Wees voorzichtig met dit project omdat een deel hiervan met de 230V netspanning zit verbonden!
Print 150711 | Zelf etsen of door iemand laten maken (70 × 40mm of 70 × 50mm) |
IC1 | PIC12F675 of 16F676 - Download het HEX bestand onderaan deze pagina |
IC2 | LM358 (dual opamp) |
VR1 | 78L05 spanningsstabilisator 5V / 100mA / TO-92 |
B1 | B80C800 (Conrad 50 11 74 of 50 12 04) of Voti |
LED1 | Rode LED, 3mm, low current type |
T1 | BC547 NPN transistor |
D1 | BAT85 Schottky diode |
R1 | 560Ω |
R2 | 1k |
R3,4,5 | 10k |
R6 | 100k |
R7 | 33k (mag weggelaten worden als MCLR op OFF staat) |
P1 | Mini-instelpotmeter (6mm) 5k ... 25k, liggend |
C1,C2 | 10µF / 25V (radiaal) |
C3 | 1µF |
C4 | 100n (axiaal) |
C5 | 220n |
Trafo1 | Transformator 12V / 0,35VA (bijvoorbeeld Display 02.10.12003) |
Spoel1 | Dimmer ontstoorspoel 1,8mH (Conrad 53 43 40) + eigen wikkeling (zie tekst) |
Conn1 | 4-polig printkroonsteen voor 230V aansluiting |
Conn2 | 4-polig Stocko connector |
Conn3 | 8-polig connector (2,54mm raster, eigen keus) voor display |
IC-voet | 8 of 14-pins, eigen keus |
Draad | Soepel, dikte afhankelijk van door te laten stroom |
Op de foto's zit een 33k weerstand van pin 4 naar de +5V, deze mag weggelaten worden als MCLR uitgeschakeld is.
De geprepareerde spoel, geplaatst op de 150711 print.
PIC Basic programma
De programma's inkorten als je deze met de LITE versie wilt compileren.
; PIC16F676: +--v--+ ; +5V [ ] GND ; Buzzer <[ ]> LED ; Piezo <[ ]< Potmeter ; 33k pull-up! Vpp/Reset >[ ]< Stroomsensor ; (Optioneel) display EN <[ ]> D4 display (Optioneel) ; (Optioneel) display RS <[ ]> D5 display (Optioneel) ; (Optioneel) display D7 <[ ]> D6 display (Optioneel) ; +-----+ ;www.picbasic.nl / Frits Kieftenbelt, Raalte, Netherlands (Frizie) ; ;Opstarten gebeurt na programmering van de PIC soms niet automatisch ;Dan even opnieuw de spanning inschakelen ;Programmeren met de potmeter in middenstand, anders heb je kans dat programmeren niet wil DEVICE 16F676 ;Gebruik een 16F676 type CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, BODEN_OFF, PWRTE_ON, MCLRE_OFF 'ALL_DIGITAL TRUE ;ALL_DIGITAL TRUE mag weggelaten worden 'SET_OSCCAL ;Fabrieks kalibratiewaarde in OSCCAL register plaatsen ;Constanten SYMBOL Tijd = 3500 ;700 = 1 minuut, na deze tijd gaat piezo zoemer piepen SYMBOL TijdPiezo = 450 ;Piezo "af en toe piep" tijd, deze moet kleiner dan 'Tijd' zijn ;Logische constanten SYMBOL OFF = 0 ;UIT SYMBOL ON = 1 ;AAN ;Poortnamen SYMBOL LED = PORTA.0 ;LED brandt onmiddellijk als stroom boven instelling komt SYMBOL Potmeter = PORTA.1 ;Instelpotmeter 5k ... 25k op print SYMBOL Spoel = PORTA.2 ;Hierop zit de stroomsensor aangesloten (spoel) SYMBOL Piezo = PORTA.4 ;Piezo-zoemer (piep in kamer) SYMBOL Buzzer = PORTA.5 ;Buzzer (bzzzz in slaapkamer) LCD_DTPIN = PORTC.0 ;Optionele HD44780 display LCD_RSPIN = PORTC.4 LCD_ENPIN = PORTC.5 ;Variabelen declareren ;WORD-ARRAY DIM Meting[15] AS WORD ;Sla laatste 15 metingen op in een array ;WORD DIM MeetGemiddelde AS WORD ;Bevat het totaal van de laatste 15 stroommetingen DIM PotmeterInst AS WORD ;Bevat de potmeter instelling DIM Timer AS WORD ;Lopende timer voor piezo-zoemer DIM WD1 AS WORD ;Word Dummy 1 ;BYTE DIM Index AS BYTE ;Indexvariabele voor array 'Meting[]' DIM BD1 AS BYTE ;Byte Dummy 1 ;BIT DIM ID1 AS BIT ;bIt Dummy 1 ;Register 76543210 PORTA = %00000000 PORTC = %00000000 TRISA = %11001110 ;Uitgangen voor Buzzer, Piezo-zoemer en LED TRISC = %11111111 ;PORTC kan gebruikt worden voor een HD44780 display ADCON0 = %10000000 ;Analoog right justified / Vdd als referentie spanning ADCON1 = %00010000 ;Fosc/8 ANSEL = %00000110 ;Analoog input alleen PORTA.2 en A.1 (de rest DIGITAL INPUT) CMCON = %00000111 ;Comparator uit (Bits 2, 1 en 0 op '1' zetten) CLEAR ;Wis alle RAM geheugen DELAYMS 500 ;Signaal en display stabilisering ;Hoofdprogramma CLS ;Wis LCD scherm PRINT AT 1, 2, "Analoog:" ;Plaats vaste tekst op LCD PRINT AT 2, 1, "Potmeter:" FOR BD1 = 1 TO 4 ;Laat LED een paar keer knipperen (indicatie dat PIC opstart) LED = ~LED ;Toggle de LED DELAYMS 300 ;Knippersnelheid van de LED NEXT WHILE 1 = 1 Meting[Index] = ADIN 2 ;Lees huidige stroomopname in op PORTA.2(=AN2) IF Index < 14 THEN ;'Index' telt in een lus van 0 ... 14 (15 metingen) INC Index ;Verhoog de indexvariabele voor arrayvariabele 'Meting[]' ELSE CLEAR Index ;Reset indexvariabele van de array CLEAR MeetGemiddelde ;Wis eerst de metingswaarde van de vorige keer FOR BD1 = 0 TO 14 ;Bereken het gemiddelde van de 15 metingen (meting 0 t/m 14) MeetGemiddelde = MeetGemiddelde + Meting[BD1] ;Tel waarden van laatste 15 metingen op NEXT MeetGemiddelde = MeetGemiddelde / 15 ;Deel het totaal van de 15 metingen door 15 WHILE 1 = 1 PotmeterInst = ADIN 1 ;Lees instelling van 5k ... 25k instelpotmeter op PORTA.1 PRINT AT 2, 11, DEC4 PotmeterInst IF PotmeterInst < 450 THEN BREAK ;Potmeter < bijna maximaal, dan is alarm ingeschakeld Buzzer = OFF ;Bij potmeter (bijna) maximaal 'Buzzer' en 'Piezo' uit Piezo = OFF CLEAR Timer ;Timer resetten omdat de buzzer anders niet meer aan zou gaan DELAYMS 250 ;Rustig kijken naar potmeterstand WEND PRINT AT 1, 11, DEC4 MeetGemiddelde IF MeetGemiddelde > PotmeterInst THEN ;Stroomopname groter dan potmeterinstelling, dan... INC Timer ;Verhoog 'Timer' IF Timer > Tijd THEN ;Tijd voorbij? Dan... Piezo = ON ;Piezo-zoemer aan (kamer) Timer = Tijd - TijdPiezo ;Timer iets terugzetten waardoor piezo opnieuw zal afgaan ELSE ;...anders... (is Tijd voorbij) Piezo = OFF ;Piezo-zoemer uit (kamer) ENDIF LED = ON ;LED reageert zonder vertraging (direct aanzetten) IF Timer = 20 THEN ;Hysteresis zodat buzzer niet piept bij een korte stroompuls Buzzer = ON ;Buzzer slaapkamer aan Piezo = ON ;Eerste piep piezo (kamer) direct bij hoge stroommeting DELAYMS 200 ;Deze eerste piep duurt ook wat langer Piezo = OFF ;Gaat elders korte piepen geven als stroommeting te lang duurt ENDIF ELSE ;...anders... (is stroomopname lager dan potmeterinstelling) CLEAR Timer ;Tijd resetten Buzzer = OFF ;Buzzer (slaapkamer) uitzetten LED = OFF ;LED uitzetten Piezo = OFF ;Piezo-zoemer (kamer) uitzetten ENDIF ENDIF DELAYMS 5 ;Vertraging voor o.a. piezo-zoemer timer WEND |
Het programma voor de 12F675 (zonder display dus)
; PIC12F675: +--v--+ ; +5V [ ] GND ; Buzzer <[ ]> LED ; Piezo <[ ]< Potmeter ; 33k pull-up! Vpp/Reset >[ ]< Stroomsensor ; +-----+ ;www.picbasic.nl / Frits Kieftenbelt, Raalte, Netherlands (Frizie) ; ;Opstarten gebeurt na programmering van de PIC soms niet automatisch ;Dan even opnieuw de spanning inschakelen ;Programmeren met de potmeter in middenstand, anders heb je kans dat programmeren niet wil DEVICE 12F675 ;Gebruik een 12F675 type CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, BODEN_OFF, PWRTE_ON, MCLRE_OFF 'ALL_DIGITAL TRUE ;ALL_DIGITAL TRUE mag weggelaten worden 'SET_OSCCAL ;Fabrieks kalibratiewaarde in OSCCAL register plaatsen ;Constanten SYMBOL Tijd = 3500 ;700 = 1 minuut, na deze tijd gaat piezo zoemer piepen SYMBOL TijdPiezo = 450 ;Piezo "af en toe piep" tijd, deze moet kleiner dan 'Tijd' zijn ;Logische constanten SYMBOL OFF = 0 ;UIT SYMBOL ON = 1 ;AAN ;Poortnamen SYMBOL LED = GPIO.0 ;LED brandt onmiddellijk als stroom boven instelling komt SYMBOL Potmeter = GPIO.1 ;Instelpotmeter 5k ... 25k op print SYMBOL Spoel = GPIO.2 ;Hierop zit de stroomsensor aangesloten (spoel) SYMBOL Piezo = GPIO.4 ;Piezo-zoemer (piep in kamer) SYMBOL Buzzer = GPIO.5 ;Buzzer (bzzzz in slaapkamer) ;Variabelen declareren ;WORD-ARRAY DIM Meting[15] AS WORD ;Sla laatste 15 metingen op in een array ;WORD DIM MeetGemiddelde AS WORD ;Bevat het totaal van de laatste 15 stroommetingen DIM PotmeterInst AS WORD ;Bevat de potmeter instelling DIM Timer AS WORD ;Lopende timer voor piezo-zoemer DIM WD1 AS WORD ;Word Dummy 1 ;BYTE DIM Index AS BYTE ;Indexvariabele voor array 'Meting[]' DIM BD1 AS BYTE ;Byte Dummy 1 ;BIT DIM ID1 AS BIT ;bIt Dummy 1 ;Register 76543210 GPIO = %00000000 TRISIO = %11001110 ;Uitgangen voor Buzzer, Piezo-zoemer en LED ADCON0 = %10000000 ;Analoog right justified / Vdd als referentie spanning ANSEL = %00010110 ;Fosc/8 en analoog input alleen GPIO.2 en GPIO.1 CMCON = %00000111 ;Comparator uit (Bits 2, 1 en 0 op '1' zetten) CLEAR ;Wis alle RAM geheugen DELAYMS 500 ;Signaal stabilisering ;Hoofdprogramma FOR BD1 = 1 TO 4 ;Laat LED een paar keer knipperen (indicatie dat PIC opstart) LED = ~LED ;Toggle de LED DELAYMS 300 ;Knippersnelheid van de LED NEXT WHILE 1 = 1 Meting[Index] = ADIN 2 ;Lees huidige stroomopname in op GPIO.2 (=AN2) IF Index < 14 THEN ;'Index' telt in een lus van 0 ... 14 (15 metingen) INC Index ;Verhoog de indexvariabele voor arrayvariabele 'Meting[]' ELSE CLEAR Index ;Reset indexvariabele van de array CLEAR MeetGemiddelde ;Wis eerst de metingswaarde van de vorige keer FOR BD1 = 0 TO 14 ;Bereken het gemiddelde van de 15 metingen (meting 0 t/m 14) MeetGemiddelde = MeetGemiddelde + Meting[BD1] ;Tel waarden van laatste 15 metingen op NEXT MeetGemiddelde = MeetGemiddelde / 15 ;Deel het totaal van de 15 metingen door 15 WHILE 1 = 1 PotmeterInst = ADIN 1 ;Lees instelling van 5k ... 25k instelpotmeter op GPIO.1 IF PotmeterInst < 450 THEN BREAK ;Potmeter < bijna maximaal, dan is alarm ingeschakeld Buzzer = OFF ;Bij potmeter (bijna) maximaal 'Buzzer' en 'Piezo' uit Piezo = OFF CLEAR Timer ;Timer resetten omdat de buzzer anders niet meer aan zou gaan DELAYMS 250 ;Rustig kijken naar potmeterstand WEND IF MeetGemiddelde > PotmeterInst THEN ;Stroomopname groter dan potmeterinstelling, dan... INC Timer ;Verhoog 'Timer' IF Timer > Tijd THEN ;Tijd voorbij? Dan... Piezo = ON ;Piezo-zoemer aan (kamer) Timer = Tijd - TijdPiezo ;Timer iets terugzetten waardoor piezo opnieuw zal afgaan ELSE ;...anders... (is Tijd voorbij) Piezo = OFF ;Piezo-zoemer uit (kamer) ENDIF LED = ON ;LED reageert zonder vertraging (direct aanzetten) IF Timer = 20 THEN ;Hysteresis zodat buzzer niet piept bij een korte stroompuls Buzzer = ON ;Buzzer slaapkamer aan Piezo = ON ;Eerste piep piezo (kamer) direct bij hoge stroommeting DELAYMS 200 ;Deze eerste piep duurt ook wat langer Piezo = OFF ;Gaat elders korte piepen geven als stroommeting te lang duurt ENDIF ELSE ;...anders... (is stroomopname lager dan potmeterinstelling) CLEAR Timer ;Tijd resetten Buzzer = OFF ;Buzzer (slaapkamer) uitzetten LED = OFF ;LED uitzetten Piezo = OFF ;Piezo-zoemer (kamer) uitzetten ENDIF ENDIF DELAYMS 5 ;Vertraging voor o.a. piezo-zoemer timer WEND |
Werking hoofdprogramma
Het programma doet eerst 15 metingen met tussenpozen van 5mSec (met ADIN 2).
Elke meetwaarde wordt opgeslagen in de array met de naam 'Meting'.
Zijn de 15 metingen voorbij (de variabele 'Index' houdt dit bij), dan wordt 'Index' weer gereset
(CLEAR Index)
en worden de 15 metingen allen bij elkaar opgeteld en de uitkomst hiervan weer gedeeld door 15.
Door deze berekening is het gemiddelde van de stroommeting bekend en geplaatst in de variabele 'MeetGemiddelde'.
Meer over array's zie hier in PIC Basic cursus deel 6.
Hierna wordt de stroominstelling van de instelpotmeter gemeten (met ADIN 1).
Dit doet het programma door een WHILE ... WEND lus binnen te lopen,
de stand van de potmeter te meten en meteen daarna te bekijken of deze een kleinere waarde heeft dan 450.
Is dat het geval, dan wordt de WHILE ... WEND lus meteen weer verlaten met BREAK
waarna het programma verderop de eerder gemeten stroom gaat vergelijken met de zojuist gemeten instelling van de potmeter.
Als de potmeter helemaal in de hoek wordt gedraaid, dan is het alarm dus uitgeschakeld.
Het programma blijft dan in de WHILE ... WEND lus rondlopen die continu 4x per seconde de instelpotmeter blijft meten en
zal deze lus pas weer verlaten (= alarm weer ingeschakeld)
als de potmeter niet meer in de maximale stand staat ingesteld (= waarde < 450).
Zolang het meetgemiddelde groter is dan de instelling van de potmeter
(IF Meetgemiddelde > PotmeterInst THEN...) wordt variabele 'Timer' verhoogd met 1.
Is variabele 'Timer' op een gegeven moment groter geworden dan de waarde van constante 'Tijd' (hier op 3500), dan wordt het alarm ingeschakeld.
Variabele 'Timer' zorgt ervoor dat het alarm niet meteen al af gaat als er alleen een stroompiek gemeten is.
Pas als blijkt dat alle 3500 meetgemiddelden aan elkaar (= ongeveer 1 seconde) boven de ingestelde waarde van de potmeter zijn,
zal het programma het programmadeel met de piëzo-zoemer en buzzer uitvoeren.
De LED reageert overigens wél meteen op een stroompiek, aangezien deze zich buiten de timerlus bevindt.
Met een 16F676:
Met een 12F675 (zonder display) kan de onderkant van de print vervallen: