Inhoudsopgave:

8-kanaals programmeerbare timer - Ajarnpa
8-kanaals programmeerbare timer - Ajarnpa

Video: 8-kanaals programmeerbare timer - Ajarnpa

Video: 8-kanaals programmeerbare timer - Ajarnpa
Video: 5V-36V Timer Modul Trigger Zyklusverzögerung Zeitschaltuhr Ein und Aus schalten Mosfet mit LED DSP 2024, Juli-
Anonim
8-kanaals programmeerbare timer
8-kanaals programmeerbare timer
8-kanaals programmeerbare timer
8-kanaals programmeerbare timer
8-kanaals programmeerbare timer
8-kanaals programmeerbare timer

Invoering

Ik gebruik Microchip's PIC-reeks microcontrollers voor mijn projecten sinds 1993 en heb al mijn programmering in assembler-taal gedaan, met behulp van de Microchip MPLAb IDE. Mijn projecten varieerden van eenvoudige verkeerslichten en knipperende LED's tot USB-joystick-interfaces voor R/C-modellen en schakelapparatuur-analisatoren die in de industrie worden gebruikt. De ontwikkeling duurde vele dagen en soms duizenden regels assembler-code.

Na ontvangst van Matrix Multimedia Flowcode 4 Professional stond ik nogal sceptisch tegenover de software. Het leek te gemakkelijk om te geloven. Ik besloot het eens te proberen en testte alle verschillende Component Macro's, allemaal met groot succes. Het beste van het gebruik van Flowcode was dat eenvoudige projecten in één nacht konden worden gecodeerd. Na het spelen met de I²C en een DS1307 real-time klok, besloot ik om de 8 Channel Timer te ontwerpen met Flowcode. Omdat het geen klein en gemakkelijk project was, geloofde ik dat dit een geweldig project zou zijn om mezelf Flowcode te leren.

Een microprocessor en andere componenten selecteren

Vanwege het aantal benodigde I/O-pinnen was het duidelijk dat er een 40-pins apparaat nodig zou zijn. De PIC 18F4520 werd gekozen, voornamelijk vanwege zijn 32K programmageheugen en 1536 bytes aan datageheugen. Alle gebruikte componenten zijn standaard through-hole devices, waardoor het desgewenst mogelijk is om de schakeling op Vero board te bouwen. Dit hielp ook bij de ontwikkeling op een breadboard.

Stap 1: Projectdoelstellingen

Projectdoelen
Projectdoelen

Doelen

- Nauwkeurige tijdregistratie, met back-up van de batterij.

- Alle programma's en gegevens blijven behouden, ook na stroomuitval.

- Eenvoudige gebruikersinterface.

- Programmeerflexibiliteit.

Tijd bijhouden

Als u in een gebied woont dat gevoelig is voor stroomstoringen, is de standaard 50/60 Hz van de hoogspanningslijnen niet voldoende voor een nauwkeurige tijdregistratie. Een real-time klok was essentieel, en na het testen van verschillende RTC-chips, koos ik voor de DS1307 vanwege zijn eenvoudige oscillator- en batterij-back-upconfiguratie. Vrij nauwkeurige tijdregistratie werd verkregen met alleen een 32,768 kHz-kristal dat op de DS1307 was aangesloten. De nauwkeurigheid was binnen 2 seconden gedurende een proefperiode van 2 maanden met behulp van 4 verschillende merken kristallen.

Dataretentie

Alle timerprogrammagegevens moeten behouden blijven, ook bij stroomuitval. Met maar liefst 100 verschillende programma's en diverse configuratiegegevens werd duidelijk dat de 256 bytes aan on-board EEPROM van de PIC niet groot genoeg zullen zijn. Een 24LC256 I²C EEPROM wordt gebruikt om alle programmeerinformatie op te slaan.

Eenvoudige gebruikersinterface

De gebruikersinterface bestaat uit slechts 2 items, een 16 x 4-regelig LCD-scherm met LED-achtergrondverlichting en een 4 x 3-toetsenbord. Alle programmering kan worden gedaan met een druk op slechts een paar knoppen. Toevoegingen aan de interface zijn een hoorbare piëzo-zoemer en visueel knipperende LCD-achtergrondverlichting.

Stap 2: Programmeerflexibiliteit

Programmeerflexibiliteit
Programmeerflexibiliteit

Om voldoende programmaflexibiliteit te garanderen, heeft de timer 100 programma's die individueel kunnen worden ingesteld. Voor elk programma kunnen de Aan-tijd, Uit-tijd, Uitgangskanalen en Dag van de week worden ingesteld. Elk programma heeft drie modi:

- Auto: Aan-tijd, Uit-tijd, Uitgangskanaal en Dag van de week worden ingesteld.

- Uit: Het individuele programma kan worden uitgeschakeld, zonder de instellingen te wissen. Om het programma weer in te schakelen, selecteer eenvoudig een andere modus.

- Dag/Nacht: Aan tijd, Uit tijd, Uitgangskanaal en Dag van de week worden ingesteld. Werkt hetzelfde als de Auto-modus, maar zal

schakel de uitgangen alleen tussen de aan- en uit-tijden in als het donker is. Dit maakt ook volledige dag/nacht-regeling mogelijk

als de extra flexibiliteit om de lichten aan te doen bij zonsondergang en uit te schakelen bij zonsopgang.

Voorbeeld 1: Gaat het licht aan na 20:00 uur en gaat het licht uit bij zonsopgang.:

Op: 20:00, Uit:12:00, Voorbeeld 2: Zal het licht aan doen bij zonsondergang en het licht uit doen om 23.00 uur.

Op: 12:00

Uit: 23:00

Voorbeeld 3: Zal het licht aan doen bij zonsondergang en het licht uit doen bij zonsopgang.

Op: 12:01

Uit: 12:00

Extra opties beschikbaar, allemaal onafhankelijk van de 100 aan/uit-programma's.

Programmakanalen actief: in plaats van meerdere programma's uit te schakelen, kunnen afzonderlijke uitgangskanalen worden uitgeschakeld zonder dat de programma's hoeven te worden gewijzigd.

Hulpingangen: Er zijn twee digitale ingangen beschikbaar, zodat bepaalde uitgangskanalen voor een bepaalde tijd kunnen worden ingeschakeld. Het kan bijvoorbeeld worden gebruikt om bepaalde lichten aan te doen wanneer u 's avonds laat thuiskomt, wanneer een knop op een afstandsbediening wordt ingedrukt, of om een andere reeks lichten aan te doen wanneer het huisalarm wordt geactiveerd.

Hulpuitgangen: Er zijn twee extra uitgangen (behalve de 8 uitgangskanalen) beschikbaar. Ze kunnen worden geprogrammeerd om in te schakelen met bepaalde uitgangskanalen of met de digitale ingangen. In mijn installatie heb ik uitgangen 6-8 die mijn irrigatie regelen, die werkt op 24V. Ik gebruik kanaal 6-8 om een van de hulpuitgangen aan te zetten, om een 24V voeding voor het irrigatiesysteem in te schakelen.

Handmatig aan: In het hoofdscherm kunnen knoppen 1-8 worden gebruikt om kanalen handmatig in of uit te schakelen.

Stap 3: Hardware

Hardware
Hardware

Voeding: De voeding bestaat uit een gelijkrichter, afvlakcondensator en een 1 Amp zekering voor overbelastingsbeveiliging. Deze voeding wordt dan geregeld door een 7812 en 7805 regelaar. De 12V-voeding wordt gebruikt voor het aansturen van de uitgangsrelais en alle andere circuits worden gevoed vanuit de 5V-voeding. Aangezien de 7805-regelaar is aangesloten op de uitgang van de 7812-regelaar, moet de totale stroom via de 7812-regelaar worden beperkt tot 1 ampère. Het is raadzaam om deze regelaars op een geschikt koellichaam te monteren.

I²C Bus: Hoewel Flowcode hardware I²C-besturing mogelijk maakt, heb ik besloten om gebruik te maken van de software I²C-configuratie. Dit zorgt voor meer flexibiliteit van pintoewijzingen. Hoewel langzamer (50 kHz), presteert het nog steeds geweldig in vergelijking met de hardware I²C-bus. Zowel DS1307 als 24LC256 is aangesloten op deze I²C-bus.

Real Time Clock (DS1307): Tijdens het opstarten wordt het RTC-register 0 en 7 gelezen om te bepalen of het geldige tijd- en configuratiegegevens bevat. Zodra de setup correct is, wordt de RTC-tijd gelezen en de tijd geladen in de PIC. Dit is de enige keer dat de tijd wordt uitgelezen uit de RTC. Na het opstarten is er een puls van 1 Hz op pin 7 van de RTC. Dit 1Hz-signaal is verbonden met RB0/INT0 en via een interruptserviceroutine wordt de PIC-tijd elke seconde bijgewerkt.

Externe EEPROM: Alle programmagegevens en opties worden opgeslagen op de externe EEPROM. De EEPROM-gegevens worden bij het opstarten geladen en een kopie van de gegevens wordt opgeslagen in het PIC-geheugen. EEPROM-gegevens worden alleen bijgewerkt wanneer programma-instellingen worden gewijzigd.

Dag/Nacht-sensor: Een standaard lichtafhankelijke weerstand (LDR) wordt gebruikt als de dag/nacht-sensor. Omdat LDR's in vele vormen en varianten verkrijgbaar zijn, allemaal met verschillende weerstandswaarden onder dezelfde lichtomstandigheden, heb ik een analoog ingangskanaal gebruikt om het lichtniveau af te lezen. De dag- en nachtniveaus zijn instelbaar en bieden enige flexibiliteit voor verschillende sensoren. Om enige hysterese in te stellen, kunnen individuele waarden voor Dag en Nacht worden ingesteld. De status verandert alleen als het lichtniveau langer dan 60 seconden onder de Dag- of boven de Nacht-instelpunten ligt.

LCD-scherm: er wordt een 4-regelig, 16-tekens display gebruikt, omdat niet alle gegevens op een 2-regelig display kunnen worden weergegeven. Het project bevat enkele aangepaste tekens, die zijn gedefinieerd in de macro LCD_Custom_Char.

Hulpingangen: beide ingangen zijn gebufferd met een NPN-transistor. +12v en 0V is ook beschikbaar op de connector, waardoor flexibelere verbindingen met externe verbindingen mogelijk zijn. Op de voeding kan bijvoorbeeld een afstandsbedieningsontvanger worden aangesloten.

Uitgangen: Alle uitgangen zijn galvanisch gescheiden van het circuit door middel van een 12V relais. De gebruikte relais zijn geschikt voor 250V AC, bij 10 ampère. De normaal open en normaal gesloten contacten worden naar de klemmen gebracht.

Toetsenbord: Het gebruikte toetsenbord is een 3 x 4 matrix toetsenbord en is aangesloten op PORTB:2..7.

Stap 4: Toetsenbordonderbrekingen

Toetsenbordonderbrekingen
Toetsenbordonderbrekingen
Toetsenbordonderbrekingen
Toetsenbordonderbrekingen
Toetsenbordonderbrekingen
Toetsenbordonderbrekingen

Ik wilde gebruik maken van de PORTB Interrupt on Change interrupt bij elke toetsaanslag. Hiervoor moest een Custom Interrupt worden aangemaakt in Flowcode, om ervoor te zorgen dat de PORTB-richting en gegevens correct zijn ingesteld voor en na elke keypad-interrupt. Elke keer dat een knop wordt ingedrukt of losgelaten, wordt een interrupt gegenereerd. De interruptroutine reageert alleen als er een toets wordt ingedrukt.

AANGEPASTE ONDERBREKING

Code inschakelen

poortb = 0b00001110;trisb = 0b11110001;

intcon. RBIE = 1;

intcon2. RBIP = 1;

intcon2. RBPU = 1;

rcon. IPEN = 0;

Handlercode:

if (intcon & (1 << RBIF))

{ FCM_%n();

poortb = 0b00001110;

trisb = 0b11110001;

wreg= poort;

clear_bit(intcon, RBIF);

}

Problemen gevonden

Tijdens een interrupt moet de interruptserviceroutine onder GEEN ENKELE omstandigheden een andere macro aanroepen die ergens in de rest van het programma kan worden gebruikt. Dit zal uiteindelijk leiden tot stack-overflow-problemen, omdat de interrupt kan plaatsvinden op hetzelfde moment dat het hoofdprogramma zich ook in dezelfde subroutine bevindt. Dit wordt ook geïdentificeerd als een ERNSTIGE FOUT door Flowcode wanneer de code wordt gecompileerd.

In de Custom code van het Keypad onder GetKeyPadNumber is er zo'n aanroep naar de Delay_us macro, die een stack overflow zal veroorzaken. Om dit te verhelpen, heb ik de opdracht Delay_us(10) verwijderd en vervangen door 25 regels "wreg = porta;" commando's. Dit commando leest PORTA, en plaatst zijn waarde in het W-register, gewoon om wat vertraging te krijgen. Deze opdracht wordt gecompileerd tot een enkele instructie die lijkt op assembler movf porta, 0. Voor de 10MHz-klok die in het project wordt gebruikt, zal elke instructie 400ns zijn, en om een vertraging van 10us te krijgen, had ik 25 van deze instructies nodig.

Merk op dat op de tweede regel van Afbeelding 3: GetKeypadNumber Custom Code de oorspronkelijke opdracht delay_us(10) is uitgeschakeld met "//". Hieronder heb ik mijn 25 "wreg = porta;" toegevoegd commando's om een nieuwe 10us-vertraging te krijgen. Zonder aanroepen van macro's binnen de aangepaste code van Keypad_ReadKeypadNumber, kan de Keypad-macro nu worden gebruikt binnen een onderbrekingsserviceroutine.

Opgemerkt moet worden dat het Flowcode-toetsenbord en de eBlocks-componenten niet de standaard pull-up-weerstanden op de ingangslijnen gebruiken. In plaats daarvan gebruikt het 100K pull-down weerstanden. Vanwege enige interferentie die tijdens de ontwikkeling op het toetsenbord werd aangetroffen, werden de 100K-weerstanden allemaal vervangen door 10K en alle 10K-weerstanden vervangen door 1K5. Het toetsenbord is getest om correct te werken met snoeren van 200 mm.

Stap 5: De timer gebruiken

De timer gebruiken
De timer gebruiken
De timer gebruiken
De timer gebruiken
De timer gebruiken
De timer gebruiken

Alle schermen zijn zo ingesteld dat ze alle benodigde informatie weergeven zodat de gebruiker snel wijzigingen kan aanbrengen in de instellingen. Lijn 4 wordt gebruikt om te helpen bij het navigeren door de menu's en programma-opties. Bij normaal gebruik zijn er in totaal 22 schermen beschikbaar.

LIJN 1: Tijd en Status

Toont de huidige dag en tijd, gevolgd door statuspictogrammen:

A – Geeft aan dat Aux-ingang A is geactiveerd en dat Aux-ingang A-timer loopt.

B – Geeft aan dat Aux-ingang B is geactiveerd en dat de timer van Aux-ingang B loopt.

C – Geeft aan dat Aux-uitgang C is ingeschakeld.

D – Geeft aan dat Aux-uitgang D is ingeschakeld.

} – Dag/Nacht sensorstatus. Indien aanwezig, geeft aan dat het nacht is.

LIJN 2: Programma-uitgangen

Toont de kanalen die zijn ingeschakeld door de verschillende programma's. Kanalen worden weergegeven in hun uitgangsnummers en een "-" geeft aan dat de specifieke uitgang niet is ingeschakeld. Kanalen die zijn uitgeschakeld in de "Programma-uitgangen actief" worden hier nog steeds aangegeven, maar de echte uitgangen worden niet ingesteld.

LIJN 3: Echte uitgangen

Toont welke kanalen zijn ingeschakeld door de verschillende programma's, Aux-ingangen A & B, of handmatige uitgangen ingesteld door de gebruiker. Als u op 0 drukt, worden alle handmatig geactiveerde uitgangen uitgeschakeld en worden de Aux-uitgangen A & B-timers gereset.

LIJN 4: Menu- en toetsopties (op alle menu's)

Geeft de functie van de toetsen “*” en “#” aan.

Het middelste gedeelte geeft aan welke cijfertoetsen (0-9) actief zijn voor het geselecteerde scherm.

De ingangsstatus van Aux Ingang A & B wordt ook weergegeven door middel van een Open of Gesloten schakelaarpictogram.

Uitgangen kunnen handmatig worden in-/uitgeschakeld door op de bijbehorende toets op het toetsenbord te drukken.

In de menu's worden de ster- en hekje-toetsen gebruikt om door de verschillende programma-opties te navigeren. Toetsen 0-9 worden gebruikt om de opties in te stellen. Waar meerdere opties beschikbaar zijn op een enkel scherm of programmeermenu, wordt de Hash-toets gebruikt om door de verschillende opties te bladeren. De huidige geselecteerde optie wordt altijd aangegeven door het teken ">" aan de linkerkant van het scherm.

0-9 Tijdwaarden invoeren

1-8 Kanaalselectie wijzigen

14 36 Programma's doorlopen, 1 stap terug, 4 stappen terug 10 programma's, 3 stappen vooruit, 6 stappen vooruit 10

programma's

1-7 Dagen van de week instellen. 1=zondag, 2=maandag, 3=dinsdag, 4=woensdag, 5=donderdag, 6=vrijdag, 7=zaterdag

0 Wis in het hoofdscherm alle handmatige overrides en Input A & Input B timers. In andere menu's, wijzigingen

geselecteerde opties

# In het hoofdscherm worden alle handmatige overrides, ingang A & ingang B timers en programma-uitgangen uitgeschakeld, tot:

het volgende evenement.

* en 1 Start de timer opnieuw op

* en 2 Wis alle programma's en opties, herstel de standaardinstellingen.

* en 3 Zet de timer op stand-by. Druk op een willekeurige toets om de timer weer in te schakelen.

Tijdens onjuiste invoer van een tijdwaarde, zal de LCD-achtergrondverlichting 5 keer knipperen om een fout aan te geven. Tegelijkertijd klinkt de zoemer. De opdrachten Afsluiten en Volgende werken alleen als de huidige invoer correct is.

LCD-achtergrondverlichting

Bij de eerste keer opstarten wordt de LCD-achtergrondverlichting gedurende 3 minuten ingeschakeld, tenzij:

- Er is een hardwarestoring (EEPROM of RTC niet gevonden)

- Tijd niet ingesteld in de RTC

De LCD-achtergrondverlichting gaat weer gedurende 3 minuten aan bij elke gebruikersinvoer op het toetsenbord. Als de LCD-achtergrondverlichting uit is, zal elk toetsenbordcommando eerst de LCD-achtergrondverlichting inschakelen en de ingedrukte toets negeren. Dit zorgt ervoor dat de gebruiker het LCD-scherm kan lezen voordat hij het toetsenbord gebruikt. De LCD-achtergrondverlichting wordt ook gedurende 5 seconden ingeschakeld als Aux-ingang A of Aux-ingang B is geactiveerd.

Stap 6: Menuschermafbeeldingen

Menuschermafbeeldingen
Menuschermafbeeldingen
Menuschermafbeeldingen
Menuschermafbeeldingen
Menuschermafbeeldingen
Menuschermafbeeldingen

Met behulp van het toetsenbord kan elk van de opties eenvoudig worden geprogrammeerd. De afbeeldingen geven wat informatie over wat elk scherm doet.

Stap 7: Ontwerp van het systeem

Ontwerp van het systeem
Ontwerp van het systeem

Alle ontwikkeling en testen werden gedaan op breadboard. Als ik naar alle secties van het systeem kijk, heb ik het systeem opgedeeld in drie modules. Deze beslissing was voornamelijk te wijten aan de beperkingen van de PCB-afmetingen (80 x 100 mm) van de gratis versie van Eagle.

Module 1 - Voeding

Module 2 - CPU-kaart

Module 3 - Relaiskaart

Ik besloot dat alle componenten gemakkelijk verkrijgbaar moesten zijn en dat ik geen componenten voor opbouwmontage wilde gebruiken.

Laten we ze allemaal doornemen.

Stap 8: Voeding

Stroomvoorziening
Stroomvoorziening
Stroomvoorziening
Stroomvoorziening
Stroomvoorziening
Stroomvoorziening
Stroomvoorziening
Stroomvoorziening

De voeding is rechttoe rechtaan en voorziet de CPU en relaisborden van 12V en 5V.

Ik monteerde de spanningsregelaars op degelijke koellichamen en gebruikte ook overschatte condensatoren voor de voeding.

Stap 9: CPU-kaart

CPU-kaart
CPU-kaart
CPU-kaart
CPU-kaart
CPU-kaart
CPU-kaart
CPU-kaart
CPU-kaart

Alle componenten, behalve LCD-scherm, toetsenbord en relais, zijn op het CPU-bord gemonteerd.

Er zijn aansluitblokken toegevoegd om de verbindingen tussen de voeding, twee digitale ingangen en de lichtsensor te vereenvoudigen.

Header pinnen/sockets zorgen voor gemakkelijke verbindingen met het LCD-scherm en toetsenbord.

Voor de uitgangen naar de relais heb ik de ULN2803 gebruikt. Het bevat al alle benodigde stuurweerstanden en flyback-diodes. Dit zorgde ervoor dat het CPU-bord nog steeds gemaakt kan worden met de gratis versie van Eagle. De relais zijn aangesloten op de twee ULN2803's. De onderste ULN2803 wordt gebruikt voor de 8 uitgangen en de bovenste ULN2803 voor de twee hulpuitgangen. Elke hulpuitgang heeft vier transistoren. Verbindingen met de relais zijn ook via header-pinnen/sockets.

De PIC 18F4520 was uitgerust met een programmeersocket, om eenvoudig te kunnen programmeren via de PicKit 3 programmer.

OPMERKING:

U zult merken dat het bord een extra 8-pins IC bevat. Het bovenste IC is een PIC 12F675, en aangesloten op een digitale ingang. Dit is toegevoegd tijdens het PCB-ontwerp. Dit maakt het voorbewerken van de digitale ingang gemakkelijker. In mijn applicatie is een van de digitale ingangen verbonden met mijn alarmsysteem. Als het alarm afgaat, gaan bepaalde lampen in mijn huis aan. Het in- en uitschakelen van mijn alarmsysteem geeft verschillende piepjes op de sirene. Door de PIC 12F675 te gebruiken, kan ik nu onderscheid maken tussen in-/uitschakelen en een echt alarm. De 12F675 is ook uitgerust met een programmeeraansluiting.

Ik heb ook een I2C-poort voorzien via header-pin/socket. Dit komt later van pas bij de relaisborden.

Het bord bevat een paar jumpers, die moeten worden gesoldeerd voordat de IC-voetjes worden geplaatst.

Stap 10: Flowcode Conclusie

Flowcode Conclusie
Flowcode Conclusie
Flowcode Conclusie
Flowcode Conclusie
Flowcode Conclusie
Flowcode Conclusie

Omdat ik gewend ben om in assembly op registerniveau te werken, was het soms moeilijk en frustrerend om de componentmacro's te gebruiken. Dit kwam voornamelijk door mijn gebrek aan kennis van de programmeerstructuur van Flowcode. De enige plaatsen waar ik de C- of ASM-blokken heb gebruikt, waren om uitgangen in een onderbrekingsroutine aan te zetten, en in de Do_KeyPressed-routine om de toetsenbordonderbreking in of uit te schakelen. De PIC wordt ook in SLEEP geplaatst met behulp van een ASM-blok, wanneer de EEPROM of RTC niet wordt gevonden.

Hulp bij het gebruik van de verschillende I²C-commando's werd allemaal verkregen vanuit de Flowcode Help-bestanden. Het is nodig om precies te weten hoe de verschillende I²C-apparaten werken, voordat de opdrachten met succes kunnen worden gebruikt. Het ontwerpen van een circuit vereist wel dat de ontwerper alle relevante datasheets beschikbaar heeft. Dit is geen tekortkoming van Flowcode.

Flowcode heeft de test echt doorstaan en wordt ten zeerste aanbevolen voor personen die willen gaan werken met het Microchip-assortiment microprocessors.

Flowcode-programmering en configuratie voor de PIC zijn ingesteld volgens afbeeldingen

Stap 11: Optionele I2C-relaiskaart

Optionele I2C-relaiskaart
Optionele I2C-relaiskaart
Optionele I2C-relaiskaart
Optionele I2C-relaiskaart
Optionele I2C-relaiskaart
Optionele I2C-relaiskaart

Het CPU-bord heeft al header-aansluitingen voor 16 relais. Deze uitgangen zijn open-collectortransistoren via de twee ULN2803-chips. Hiermee kunnen de relais rechtstreeks worden gevoed.

Na de eerste tests van het systeem vond ik alle draden tussen het CPU-bord en de relais niet leuk. Omdat ik een I2C-poort op het CPU-bord had opgenomen, besloot ik het relaisbord te ontwerpen om verbinding te maken met de I2C-poort. Met behulp van een 16-kanaals MCP23017 I/O Port Expander-chip en een ULN2803-transistorarray heb ik de verbindingen tussen de CPU en relais teruggebracht tot 4 draden.

Omdat ik geen 16 relais op een printplaat van 80 x 100 mm kon plaatsen, besloot ik twee printplaten te maken. Elke MCP23017 gebruikt slechts 8 van zijn 16 poorten. Bord 1 verwerkt de 8 uitgangen en bord 2 de twee hulpuitgangen. Het enige verschil op de borden zijn de adressen van elk bord. Dit is eenvoudig in te stellen met een mini-jumper. Elk bord heeft connectoren om stroom en I2C-gegevens aan het andere bord te leveren.

OPMERKING:

Indien nodig voorziet de software in slechts één bord dat alle 16 poorten kan gebruiken. Alle uitgangsrelaisgegevens zijn beschikbaar op het eerste bord.

Omdat het circuit optioneel en heel eenvoudig is, heb ik geen schema gemaakt. Als er genoeg vraag is, kan ik het later toevoegen.

Stap 12: Optionele RF-link

Optionele RF-link
Optionele RF-link
Optionele RF-link
Optionele RF-link
Optionele RF-link
Optionele RF-link

Na voltooiing van het project realiseerde ik me al snel dat ik veel 220V AC bedrading naar de timer moet trekken. Ik ontwikkelde een RF-link met behulp van standaard 315MHz-modules waarmee de timer in een kast kon worden geplaatst en de relaisborden in het dak, dicht bij alle 220V-bedrading.

De link maakt gebruik van een AtMega328P die draait op 16MHz. De software voor zowel zender als ontvanger is hetzelfde en de modus wordt geselecteerd door een mini-jumper.

Zender

De zender wordt eenvoudig in de CPU I2C-poort gestoken. Er is geen extra installatie vereist, omdat de AtMega328P naar dezelfde gegevens luistert als de I2C-relaiskaarten.

Gegevens worden eenmaal per seconde bijgewerkt op de I2C-poort en de zender verzendt deze informatie via de RF-link. Als de zender gedurende ongeveer 30 seconden geen I2C-gegevens ontvangt, zal de zender continu gegevens verzenden om alle relais naar de ontvangereenheid uit te schakelen.

De voeding naar de zendermodule kan worden geselecteerd tussen 12V en 5V met een mini-jumper op de printplaat. Ik voed mijn zender met 12V.

Ontvanger

De ontvanger luistert naar gecodeerde gegevens van de zender en plaatst de gegevens op een I2C-poort. Het relaisbord wordt eenvoudig op deze poort aangesloten en werkt hetzelfde als op het CPU-bord.

Als de ontvanger gedurende 30 seconden geen geldige gegevens ontvangt, zal de ontvanger continu gegevens verzenden via de I2C-poort om alle relais op de relaiskaarten uit te schakelen.

Schema's

Op een dag, als er vraag naar is. De Arduino-schets bevat wel alle benodigde informatie om de schakeling zonder schakelschema te bouwen.

Bereik

In mijn installatie staan de zender en ontvanger ongeveer 10 meter uit elkaar. De timer bevindt zich in een kast en de relaiseenheid bovenop het plafond.

Stap 13: Eindproduct

Eindproduct
Eindproduct
Eindproduct
Eindproduct
Eindproduct
Eindproduct

De hoofdunit zat in een oude projectdoos. Het bevat het volgende:

- 220V/12V Transformator

- Voedingskaart

- CPU-kaart

- LCD scherm

- Toetsenbord

- RF-linkzender

- Extra ontvanger op afstand voor thuis, zodat ik de lichten via de afstandsbediening kan in- en uitschakelen

De relaiseenheid bestaat uit het volgende:

- 220V/12V Transformator

- Voedingskaart

- RF Link-ontvanger

- 2 x I2C-relaiskaarten

Alle boards zijn ontworpen met dezelfde afmeting, waardoor ze gemakkelijk op elkaar gestapeld kunnen worden met 3mm spacers.

Aanbevolen: