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: