Bouw een leger van knipperende LED-verkeerskegels op basis van de PIC12F1612
De Verkeerskegel
Ik heb de verkeerskegel getekend in Autodesk Fusion. Deze bestaat uit drie componenten: de hoofdbehuizing, de "verzwaarde" ring aan de basis en het waarschuwingslicht. Het waarschuwingslicht is verdeeld in twee delen: de basis van het licht en de lens. Dit maakt het gemakkelijker om in de slicing-software verschillende filamenten voor elk deel van het waarschuwingslicht te gebruiken.
De hoofdbehuizing van de kegel is ongeveer 82 mm hoog. Het handvat voegt 8 mm toe en het licht nog eens 29 mm. Dit is ongeveer een schaalmodel van 1:10 tot 1:12 van een echte verkeerskegel, die ongeveer 1 meter hoog is met een waarschuwingslicht van 200 mm diameter.
De Behuizing
De hoofdbehuizing is een 360°-rotatie van een schetsprofiel. Het ontwerp is relatief eenvoudig, maar de grootste uitdaging was het correct krijgen van de afmetingen. Ik heb gekozen voor ringen van 15 mm, waarbij de onderste en bovenste ringen 15% groter zijn om plaats te bieden aan de uitlopende basis en de afgeronde bovenrand. De diameter van de basisring, exclusief de uitlopende voet, is 49,5 mm. De naden tussen elke ring lopen 0,6 mm omhoog en naar binnen. De wanden zijn 2 mm dik. De bovenkant van de kegel heeft een schuinte van 45° om printen zonder supports mogelijk te maken.
Het handvat is een symmetrische extrusie van 1,5 mm van een schetsprofiel, gevolgd door een spiegeloperatie. De gaten in het handvat zijn uitgelijnd met de gaten in het waarschuwingslicht. De uiteinden van het handvat gaan niet helemaal tot aan de rand van de kegel om te voorkomen dat ze over de rand worden geëxtrudeerd.
Ik heb een geprojecteerd schetsprofiel gebruikt om het midden van het waarschuwingslicht te bepalen en een gat van 5 mm door de bovenkant van de kegel te plaatsen voor de bedrading.
Ik heb de kegel geprint in basis oranje PLA van Bambu Lab met lagen van 0,20 mm en zonder supports. Als ik dit opnieuw zou ontwerpen, zou ik het handvat iets korter maken om problemen met de grote overbruggingsafstand (bridging) te voorkomen.
De Verzwaarde Basis
De verzwaarde basis is eveneens een 360°-rotatie. Het profiel is met 0,2 mm verschoven ten opzichte van de hoofdbehuizing van de kegel. Ik heb een afronding (fillet) toegepast op de bovenste buitenrand om deze wat zachter te maken. Deze is geprint in basis zwart PLA van Bambu Lab met lagen van 0,16 mm en met supports.
Het Waarschuwingslicht
Het waarschuwingslicht, en met name het uithollen ervan om een T1 3 mm ronde LED te accommoderen, was het moeilijkste deel van het project. Ik begon met een lens van 25 mm diameter, maar dit was te groot. Ik heb de diameter verlaagd naar 20 mm, wat veel beter paste.
Ontwerpproces
- De lens maken: Eerst heb ik de lens getekend met een 360°-revolutie van een schetsprofiel rond de z-as. Dit creëerde de helft van de lens.
- De hals maken: Vervolgens heb ik de hals getekend met een symmetrische revolutie van 90 graden rond de y-as.
- Spiegelen: Door het gecombineerde object te spiegelen, ontstond de volledige lens en hals.
- De batterijbox: Daarna heb ik de basis getekend en geëxtrudeerd naar een nieuw object. In de Bambu-slicer kun je verschillende kleuren toewijzen aan elk object. De lens krijgt een doorschijnend filament en de basis een ondoorzichtig geel filament.
- Afwerking: Ik heb een gat toegevoegd om de lens op de kegel te bevestigen en de randen van de basis afgerond.
- Uithollen: Met een combinatie van de 'hole', 'shell', 'sketch' en 'extrude' tools heb ik de lens en hals uitgehold, zodat de T-1 3 mm LED er precies in past (friction fit).
Printen en Materialen
Ik heb de componenten als één unit geprint met een laaghoogte van 0,16 mm. Ik heb vier kleurcombinaties getest:
- Zonnegeel basis met rode doorschijnende lens (Bambu basic PLA en translucent PLA).
- Zonnegeel basis met oranje doorschijnende lens (Bambu basic PLA en translucent PLA).
- Gele basis met heldere lens (Bambu basic PETG en translucent PETG).
- Gele basis met oranje lens (Bambu basic PETG en translucent PETG).
De PLA-combinaties waren mijn voorkeur, hoewel de PETG-varianten het meest leken op echte waarschuwingslichten.
Voor de elektronica heb ik generieke T-1 3mm LEDs gebruikt. Ik heb hier siliconen draden van 150 mm aan gesoldeerd en de verbindingen beschermd met krimpkous. Ik heb geen stroombegrenzende weerstand bij de LED geplaatst, omdat ik deze op de printplaat zet die de LED's aanstuurt.
De LED wordt in de hals geplaatst en gedraaid, zodat de draden aan weerszijden van de M2-schroef uitkomen die het licht aan de kegel bevestigt.
Vinyl Strepen
Vervolgens heb ik reflecterende vinylstickers gesneden. De volgorde van de strepen van boven naar beneden is: oranje, wit, oranje en wit (zonder streep op de onderste ring). Dit volgt een officiële standaard.
Ik heb de diameter van elke ring in Fusion gemeten en dit vermenigvuldigd met Pi om de omtrek te berekenen. Hieraan heb ik 1 mm toegevoegd voor de uiteindelijke lengte. Alle stickers zijn 11 mm hoog.
De afmetingen van de stickers zijn:
- Oranje: 11 x 141,43 mm
- Wit: 11 x 145,20 mm
- Oranje: 11 x 148,97 mm
- Wit: 11 x 152,74 mm
Ik heb deze ontworpen in Silhouette Studio en uit Oracal Oralite reflecterend vinyl gesneden.
Montage en Testen
De montage gebeurde als volgt:
- De draden werden door het gat aan de bovenkant van de kegel geregen.
- Het waarschuwingslicht werd bevestigd met een M2 x 16 mm schroef, ring en moer.
- De reflecterende vinylstickers werden van achteren naar voren om de kegel gewikkeld, waarbij luchtbellen werden verwijderd.
Om de LED te testen, gebruikte ik een laboratoriumvoeding in constant-stroommodus op 10 mA. De LED werkte correct, met een forward voltage van 2,04 V, wat gebruikelijk is voor een oranje LED.
Update: Ik heb later een versie geprint met een smaller handvat, wat resulteerde in een veel betere printkwaliteit wat betreft de bridging.
De Elektronica: Het Laatje-licht
Om de LED te laten knipperen, gebruik ik een 8-pins PIC12F1612 microcontroller, gevoed door een kleine single-cell LiPo-batterij. De PIC12F1612 is ideaal omdat hij werkt tussen 2,3 V en 5,5 V, wat precies overeenkomt met het voltage van een LiPo-batterij.
Bij een kloksnelheid van 31 kHz verbruikt de PIC12 niet meer dan ongeveer 25 $\mu\text{A}$. Dit is verwaarloosbaar vergeleken met de stroom van de LED. Een microcontroller biedt meer flexibiliteit en een lager stroomverbruik dan een 555-timer.
Hardware Versie 1 (Ontwikkelbord)
De eerste versie is een robuuste printplaat voor ontwikkeling, inclusief headers voor debuggen en programmeren.
Schema en Layout Het schema bevat van links naar rechts: een JST PH-connector voor de batterij, een bulkcondensator, een ontkoppelcondensator, een pull-up weerstand en filter voor de /MCLR-ingang, de PIC12, een stroombegrenzende weerstand voor de LED, een connector voor de LED en de programmeerconnector.
Bill of Materials (BOM) - Versie 1
| Designator | Beschrijving |
|---|---|
| C1 | 1 $\mu\text{F}$ 0603 (niet gebruikt) |
| C2 | 0,1 $\mu\text{F}$ 0603 |
| C3 | 0,1 $\mu\text{F}$ 0603 (niet gebruikt) |
| R1 | 10k 0603 (niet gebruikt) |
| R2 | 330 0603 |
| R3 | 220 0805 |
| U1 | Microchip PIC12F1612-I/SN |
| X1 | 0,1″ 0,025″ square post six position header (niet gebruikt) |
| Batterijconnector | S2B-PH-SM4-TB (JST PH 2 mm, 2 positie) |
| Batterij | Sparkfun PRT-13853 110 mAh Li-Ion Battery |
| LED Connector | Phoenix Contact 1725656 |
Opmerkingen: Alle condensatoren zijn X5R of X7R (min. 10 V). Alle weerstanden zijn min. 1/10 W.
Software
De software initialiseert de PIC12, selecteert de 31 kHz oscillator en zet ongebruikte pinnen in een stand die het stroomverbruik minimaliseert. De LED knippert vervolgens met 65 flitsen per minuut en een duty cycle van 10%.
#include <xc.h>
// CONFIG1
#pragma config FOSC = INTOSC
#pragma config PWRTE = ON
#pragma config MCLRE = OFF
#pragma config CP = OFF
#pragma config BOREN = ON
#pragma config CLKOUTEN = OFF
// CONFIG2
#pragma config WRT = OFF
#pragma config ZCD = OFF
#pragma config PLLEN = OFF
#pragma config STVREN = ON
#pragma config BORV = LO
#pragma config LPBOR = ON
#pragma config LVP = ON
// CONFIG2
#pragma config WDTE = OFF
#define _XTAL_FREQ 31000
void main (void)
{
OSCCONbits.IRCF = 0b0000;
OSCCONbits.SCS = 0b10;
ANSELA = 0x00;
OPTION_REGbits.nWPUEN = 0;
WPUAbits.WPUA3 = 1;
TRISAbits.TRISA0 = 0;
TRISAbits.TRISA1 = 0;
TRISAbits.TRISA2 = 0;
TRISAbits.TRISA4 = 0;
TRISAbits.TRISA5 = 0;
LATAbits.LATA0 = 0;
LATAbits.LATA1 = 0;
LATAbits.LATA2 = 0;
LATAbits.LATA4 = 0;
LATAbits.LATA5 = 0;
while (1) {
LATAbits.LATA2 = 0;
__delay_ms (92);
LATAbits.LATA2 = 1;
__delay_ms (831);
}
return;
}
Batterijduur en Energieverbruik
Om de levensduur te berekenen, kijken we naar het gemiddelde stroomverbruik.
Berekening:
- Nominaal voltage LiPo: 3,7 V
- Beschikbare capaciteit: 110 mAh * 85% = 93,5 mAh
- Forward voltage rode LED: 2,0 V
- Weerstand: 220 $\Omega$
- Duty cycle: 10%
- Stroomverbruik microcontroller: 18 $\mu\text{A}$
Stroomverbruik LED: $(3,7\text{V} - 2,0\text{V}) / 220\ \Omega \times 10\% = 773\ \mu\text{A}$
Totaal gemiddeld verbruik: $773\ \mu\text{A} + 18\ \mu\text{A} = 791\ \mu\text{A}$
Verwachte looptijd: $93,5\text{ mAh} / 791\ \mu\text{A} \approx 118\text{ uur}$ (bijna vijf dagen).
Metingen met Nordic Power Profiler II
Ik heb het verbruik gemeten bij verschillende voltages:
- Bij 4,2 V (volledig geladen): Gemiddeld verbruik $931,22\ \mu\text{A}$. Levensduur $\approx 100$ uur.
- Bij 3,7 V (nominaal): Gemiddeld verbruik $738,54\ \mu\text{A}$. Levensduur $\approx 127$ uur.
Tussen de flitsen door verbruikte de microcontroller ongeveer $24\ \mu\text{A}$. Ter vergelijking: een CMOS 555-timer (zoals de LMC555) verbruikt ongeveer $150\ \mu\text{A}$. Het gebruik van een 555-timer zou de batterijduur met ongeveer 15% verminderen, zonder de voordelen van programmeerbaarheid.
In de praktijk heb ik één lamp op mijn aanrecht laten knipperen; na 108 uur was dit nog steeds actief, wat de schattingen bevestigt.
Vereenvoudiging van de Elektronica
Voor de tweede serie borden heb ik de programmeer-header verwijderd en ongebruikte componenten weggelaten.
Hardware Versie 2
Deze versie bevat alleen de connectoren, de PIC12 en drie passieve componenten (waarvan er slechts twee zijn geplaatst: de 0,1 $\mu\text{F}$ ontkoppelcondensator en de stroombegrenzende weerstand).
BOM - Versie 2
| Designator | Beschrijving |
|---|---|
| C2 | 0,1 $\mu\text{F}$ 0603 |
| R3 | 220 0805 |
| U1 | Microchip PIC12F1612-I/SN |
| Batterijconnector | S2B-PH-SM4-TB (JST PH 2 mm, 2 positie) |
| Batterij | Sparkfun PRT-13853 110 mAh Li-Ion Battery |
| LED Connector | Phoenix Contact 1725656 |
Programmeerclip Adapter
Omdat er geen header op de PCB zit, gebruik ik een SOIC-8 testclip om de PIC12 te programmeren. Ik heb een kleine adapterplaat gebouwd om deze clip te verbinden met mijn PICkit 5 programmer.
BOM - Adapterplaat
| Designator | Beschrijving |
|---|---|
| X1 | Samtec TSW-106-08-G-S-RA 6 positie, 0,1″ right angle header |
| U1 | Würth Elektronik 61200821621 polarized shrouded header |
Conclusie
Het mooie van de ingebouwde 31 kHz oscillator van de PIC12 is dat deze niet heel nauwkeurig is. Hierdoor lopen de kegels langzaam uit fase, waardoor ze op een gegeven moment niet meer synchroon knipperen. Dit bootst precies na hoe het er in een echte wegwerkzone aan toe gaat.
Groetjes,