Decodor de accesorii cu Arduino

  • In perioada urmatoare o sa vi se solicite modificarea parolei. Pana la modificarea parolei, userul poate figura ca si blocat, odata modificata parola, userul este reactivat automat.
    Pentru orice problema va rog folositi butonul "Contact"

SSL

Active Member
10 Iulie 2015
119
117
Bucuresti
LOCATION
Bucuresti
Vreau sa va prezint in cele ce urmeaza un decodor de acesorii pe care-l folosesc pe diorama mea pt controlul iluminatului, in ideea ca poate fi util si altor colegi.

La baza stau lucrarile Dr. Geoff Bunza (link). Aveti in acest link toate informatiile proiectului de baza.

Pentru a creste un pic realismul iluminarii de cladiri, in special in cazurile cand puneti ca subsemnatul cate un bec (sau LED) in fiecare camera a unei cladiri, am adaugat o facilitate prin care luminile, odata pornite via DCC, sa se inchida si deschida din nou singure in mod aleator, dupa intervale de timp aleatoare. Pot coexista iesiri care functioneaza in modul on/off permanent si in modul acesta nou adaugat. De exemplu, pentru stalpii de iluminat se folosesc cele permanente on/off, iar cele random on/off pt cladiri.

Acelasi efect de oprire/pornire aletorie se poate obtine desigur daca folositi comanda prin PC cu Rocrail sau echivalent, folosind un script care opreste/porneste luminile prin comenzi de F-uri explicite. Daca rulati stand-alone doar cu centrala si un Multimaus, genul asta de actionare explicita nu este practic. Plus ca traficul creat pe magistrala DCC creste semnificativ daca optati sa comandati explicit fiecare iesire cu cate o functie DCC.
Tot pentru a minimiza traficul DCC am adaugat posibilitatea de a porni/opri toate luminile (fie ca sunt on/off, random on/off, pulsate etc) cu o singura functie, F16 in cazul de fata. Se poate modifica codul ca sa puneti orice functie in loc de F16. Functionalitatea asta are sens daca folositi iesirile decodorului doar pentru lumini (ar fi un pic bizar pt servo-uri, sa sara toate simultan).

CV-urile decodorului sunt:
CV1: adresa short
CV17, CV18: adresa long
CV25: =1: folosirea F16 ca functie globala de on/off pt toate iesirile
=0: fiecare functie de la F0 la F15 activeaza cate o singura iesire
CV29: configurarea adresarii long/short, configurarea pasilor de viteza 14/28-128 (pozitia bitilor e conform standardului NMRA).
CV30: iesirea 1, modul de functionare: 0= on/off, 1 = blink, 2 = servo, 3 = pereche blink cu urmatoarea iesire (folositor la treceri la nivel), 4 = pwm/pulsat, 5 = fade in/out, 6 = random on/off
CV31: iesirea 1, rata de PWM, adica: rata de blink pt modul 1, rata PWM pentru modul 4, sau rata PWM pt modul 2 (servo)
CV32: iesirea 1, pozitia de start (cand functia aferenta e off, folosita doar in modul 2, servo)
CV33: iesirea 1, pozitia de final (cand functia aferenta e on, folosita doar in modul 2, servo)
CV34: pozitia curenta (folosita doar in modul 2, servo)

Iesirea 2 are alocat grupul de CV-uri 35-39 (in aceeasi ordine ca CV30-34 de mai sus), iesirea 3 are CV-urile 40-44 etc. Ultimul set de CV-uri folosit este CV115-119, aferent iesirii nr 16.

Functiile DCC mapate sunt: F0 pt iesirea 1, F1 pt iesirea 2 etc pana la F15 pt iesirea 16. F16 poate fi folosita pe post de comanda globala a tuturor iesirilor, daca CV25=1.

In ce priveste hardware-ul, decodorul foloseste un Arduino Pro Mini (Atmega 328P la 16MHz/5V), care se gaseste cam peste tot (de exemplu aici). Restul componentelor sunt nepretentioase, se gasesc prin locurile uzuale (Conex Electronic, Ecas etc). Mediul de programare Arduino este gratuit (www.arduino.cc) iar biblioteca DCC este disponibila si ea gratuit. Autorul design-ului original (v primul link) ofera detalii despre instalarea bibliotecii, mediului etc. Nu le mai reiau aici ca sa scurtez un pic prezentarea.
Schema electrica a decodorului este mai jos. Din nou, majoritatea design-ului, ideea, copyright-ul etc ii apartin Dr. Geoff Bunza.
schema.png

Am adaugat la schema initiala functionalitatea de ACK, potentiometrele si darlingtonii ULN2803A. Daca folositi doar LED-uri pt iluminat si nu folositi iesirile si pt servo, puteti omite driverele de putere si sa alimentati LED-ul direct din iesirea pinului Arduino, eventual cu un rezistor reglabil in serie pt "old school dimming" si pt a limita curentul daca e necesar. In cazul asta puteti si opta pt montaje de iluminat in regim catod comun sau anod comun, dupa cum va e convenabil, conectand pinii de jos ai JP7 la Gnd, renuntand la ULN-uri si JP1 etc.
Eu folosesc rezistoarele reglabile pt a uniformiza intensitatea iluminatului in camere. Efectuarea reglajului e un pic de chinezarie, dar din fericire se face o singura data pt fiecare iesire :)
Dimmingul software nu este posibil cu montajul asta pt ca Atmega329P nu are PWM pe toate iesirile.
In schema de mai sus, semnalizarea ACK (grupul R19-T1-R21) se leaga la pinul A5 al Arduino (nu e figurat explicit).

Daca doriti sa alimentati decodorul direct din busul DCC atunci puteti conecta JP2 in scurt cu JP4 si JP3 in scurt cu JP5, apoi fiecare din acestea doua la cate un fir din busul DCC. Daca optati pentru alimentarea separata a partii de putere pt a evita consumul mare pe busul DCC, puteti lega doar perechea JP4-JP5 la busul DCC, iar perechea JP3-JP2 o puteti conecta la orice alta sursa de DC avand o tensiune > 7.5V.
De asemenea, daca doriti ca iesirile sa functioneze la o tensiune mai mare de 5V (util de exemplu pt inserierea mai multor LED-uri pe iesiri), puteti configura asta din JP1, care permite iesirilor sa lucreze la tensiunea de 5V de dupa regulatorul 7805, sau la tensiunea mai mare de dinainte de regulator. In cazul din urma trebuie sa folositi ULN-urile.
Pentru folosirea cu servo-uri trebuie sa trageti si o conexiune de la GND-ul placii catre fiecare servo, pt ca in schema de mai sus aveti la fiecare iesire doar pinul de comanda si V+, dar nu si Gnd. Eu nu am inclus Gnd-uri in conectorul JP7 pt ca nu folosesc iesirile ca servo.

Proiectul Arduino si schema electrica in format Eagle sunt in atasament.

Intervalul de timp la care se pornesc/opresc luminile in modul 6 se poate creste setand valoarea RAND_REFRESH_WAIT la ceva > 900. Eu am lasat-o intentionat mai mica, sa se observe efectul mai pregnant.
Adresa long a decodorului se poate modifica din #define-ul This_Decoder_Address.
La prima incarcare a codului e indicat sa comentati primul #define ca sa scrieti valorile implicite ale CV-urilor. La urmatoarele incarcari ale codului e bine sa decomentati acest define, ca sa pastrati valorile CV-urilor nemodificate (e util daca schimbati doar codul dupa ce ati configurat CV-urile).

Mai jos o poza cu implementarea hardware:
Untitled.png
[ scuzati mormanul de fire – in ciuda aparentelor, exista o oarecare logica in wiring-ul ala, inca nu ma pierd in propriile fire :cool: ]

Am pe macheta 4 astfel de decodoare, urmand sa mai adaug cate sune necesare, in functie de ce proiecte imobiliare mai apar in viitor.
In final, un filmulet cu functionarea iesirilor in modul random on/off (modul 6).



Enjoy! :)
 

Ata?amente

  • Dec_16LED_6Ftn_v4_ACK.ino
    25,7 KB · Vizualiz?ri: 1
  • SMA_DCCFunc16_Mk2.sch
    855,7 KB · Vizualiz?ri: 1