Përmbajtje:

Treni i Kopshtit - Arduino Wireless NMRA DCC: 4 hapa (me fotografi)
Treni i Kopshtit - Arduino Wireless NMRA DCC: 4 hapa (me fotografi)

Video: Treni i Kopshtit - Arduino Wireless NMRA DCC: 4 hapa (me fotografi)

Video: Treni i Kopshtit - Arduino Wireless NMRA DCC: 4 hapa (me fotografi)
Video: #4.c - Adding Wi-Fi to DCC-EX 2024, Nëntor
Anonim
Image
Image
Dizajni i Sistemit
Dizajni i Sistemit

Përveç udhëzimeve të mëparshme me DCC në sistemin hekurudhor të vdekur, unë e kam zhvilluar idenë më tej me një Stacion Komandues DCC të mbajtur me dorë me tastierë dhe ekran LCD. Stacioni i Komandës përmban të gjithë kodimin e kërkuar për udhëzimet e NMRA DCC, megjithatë në vend që të lidheni me binarët, të dhënat transferohen me modulin e radios RF24L01+ në një marrës të montuar në një kamion ose nën loko - kudo që e lejon dhoma.

Sigurisht, lokot tuaja duhet të jenë të pajisura me një dekodues të aftësisë së ngarkesës të përshtatshme për motorët e motorit.

Hapi 1: Dizajnimi i Sistemit

Dizajni i Sistemit
Dizajni i Sistemit

Arduino Pro Mini është në zemër të dizajnit. Përdorimi i Fritzing për të zhvilluar qarkun dhe për të prodhuar PCB.

Unë kam qenë në gjendje të përdor të njëjtën PCB si për transmetuesin ashtu edhe për marrësin duke kursyer kështu disa kosto.

Transmetuesi ka lidhje për tastierën dhe LCD ndërsa marrësi nuk i kërkon këto dhe përdor urën H për të furnizuar daljen DCC për lokon.

Një zhvillim i mëtejshëm përfshin lidhjet për një urë më të madhe H nëse kërkohet për lokacione më të fuqishme.

PCF8574 mund të fshihet nëse përdorni një ekran LCD që vjen me çantën e shpinës duke lejuar lidhjet SCA / SCL në Arduino të ushqejnë ekranin duke përdorur vetëm 2 tela. Lista e pjesëve: Gjithsej = përafërsisht £ 60 për DCC Station Station + 1 marrës Kosto shtesë e marrësve = 10,00 përafërsisht secila. + bateri

Arduino Pro Mini. x 2 = 4.00

Tastiera e membranës 4x3 = 3.00

20 x 4 ekran LCD = 00 7.00

PCF5874 = 1.80 £

NRF24L01+. modulet e radios x 2 = 80 5.80

Prodhimi i PCB për 10 zbritje (ose bordi Vero mund të përdoret) = 24 or ose 4.80 for për 2 off

3.3 v Rregullatori = 0.17 ((pako prej 25 nga RS Comp)

5v Rregullatori LM7805 = 0.30

H-urë SN754410ne = 3.00

Lloytron i rimbushur 2700 maH bateri AA x 12 = 22,00. (bateritë e ulëta të vlerësuara me maH janë më të lira)

Kondensatorë, tenxhere, kunja, lidhje, etj = 2.00 appro përafërsisht

Rrethimi 190x110x60 mm = £ 8.00

Transmetues - karikues / bateri telefoni = 2.00 £

Hapi 2: Transmetues

Transmetues
Transmetues

Diagrami i qarkut tregohet ku kunjat D2 në D8 në Arduino Pro Mini janë të lidhur me tastierën. Një potenciometër 100khm është lidhur me kunjin Analog A0 për rregullimin e shpejtësisë. Kunjat SDA dhe SCL që formojnë çipin PCF8574 janë të lidhur me kunjat A4 dhe A5 në Arduino Pro Mini me anë të telave të ngjitur në kunjat në shtresën e sipërme të Pro Mini.

Skica Arduino është bashkangjitur për shkarkim.

Unë kam përdorur një ekran LCD 20 x 4 që lejon 4 rreshta informacioni me 20 karaktere për rresht. Tastiera siguron menunë e mëposhtme:

1 deri në 9 = adresa e vendndodhjes * = drejtimi 0 = dritat # = Menyja e funksionit për çelësat 1 deri në 8

Përshkrimi bazë i skicës Arduino Pro Mini: Kjo linjë e kodit rregullon mesazhin DCC në formatin HEX. strukturë Mesazhi i mesazhit [MAXMSG] = {

{{0xFF, 0, 0xFF, 0, 0, 0, 0}, 3}, // mesazh boshe

Adresa {{locoAdr, 0, 0, 0, 0, 0, 0}, 3} // 3 bajt

};

Për të ruajtur cilësimet për secilën loco, një seri grupesh vendosen si më poshtë:

int la [20]; // grup për të mbajtur numrat loco

int sa [20]; // grup për të mbajtur vlerat e shpejtësisë

int fda [20]; // grup për të mbajtur dir

int fla [20]; // grup për të mbajtur dritat

int f1a [20]; // grup për të mbajtur argëtim1…..

int f8a [20]; // grup për të mbajtur argëtim8

Për të mundësuar që udhëzimet e DCC të ndryshohen ndërsa ne vazhdojmë:

Për udhëzimet e shpejtësisë: void amend_speed (struct Message & x) {

x.data [0] = locoAdr;

x.data [1] = 0x40; // locoMsg me 28 hapa shpejtësie}

Për udhëzimet e funksionit:

void amend_group1 (struct Mesazhi & x) {

x.data [0] = locoAdr;

x.data [1] = 0x80; // locoMsg me udhëzimin e grupit një 0x80}

Rrethi kryesor i skicës:

lak void (void) {if (read_locoSpeed ()) {assemble_dcc_msg_speed ();

send_data_1 (); // dërgoni të dhëna me valë

vonesa (10);

send_data_3 (); // shfaq të dhënat në ekranin LCD

send_data_4 (); // shfaq të dhënat në monitorin serik}

nëse (funksioni i leximit ()) {

assemble_dcc_msg_group1 ();

send_data_1 ();

vonesa (10);

send_data_3 (); }}

Përditësoni të dhënat kur ndryshon shpejtësia:

boolean read_locoSpeed () Kjo zbulon një adresë të re loco, shpejtësi ose vendosje drejtimi dhe ndryshon "të dhënat" e HEX në përputhje me rrethanat. Këtu kam specifikuar 28 hapa shpejtësie dhe për të përmbushur standardin NMRA S 9.2, të dhënat e shpejtësisë duhet të gjenden nga një tabelë kërkimi në 'speed_step ()'

void speed_step () {switch (locoSpeed) {

rasti 1: të dhëna | = 0x02; pushim;

rasti 2: të dhëna | = 0x12; pushim;

rasti 3: të dhëna | = 0x03; pushim;

………

rasti 28: të dhëna | = 0x1F; pushim; }}

Përditësoni të dhënat kur funksionet ndryshojnë:

funksioni i leximit boolean ()

nëse (fla [locoAdr] == 0) {të dhëna = 0x80;

} // dritat e kokës fiken

nëse (fla [locoAdr] == 1) {

të dhëna = 0x90;

} // dritat e kokës të ndezura

Për secilin funksion:

nëse (f2a [locoAdr] == 0) {të dhëna | = 0; }. // Funksioni 2 i fikur

nëse (f2a [locoAdr] == 1) {

të dhëna | = 0x02; // Funksioni 2 në} 'të dhëna' ndërtohet duke kombinuar ['| =' kompleks bitwise ose] kodet HEX për secilin funksion.

Hapi 3: Marrësi

Marrësi
Marrësi

Diagrami i qarkut tregohet ku kunjat 5 dhe 6 të Arduino Pro Mini përdoren për të siguruar sinjalin DCC të furnizuar në urën H. Çiftet e urës H janë të lidhura paralelisht për të rritur kapacitetin aktual. Në varësi të rrymës së tërhequr nga lokoja, mund të kërkohet që një ngrohës të lidhet me pajisjen DIP me 16 kunja, ose një urë H e rëndë mund të lidhet nga jashtë.

Skica Arduino është bashkangjitur për shkarkim. Sinjali DCC përbëhet nga një orë që funksionon në 2MHZ

void SetupTimer2 () e bën këtë punë.

Ora përfshin 'impulse të shkurtra' (58us) për '1' në të dhënat DCC dhe 'impulse të gjata' (116us) për '0' në të dhënat DCC.

Laku zbrazët, merr të dhëna nga radio dhe nëse gjendet një varg i vlefshëm, të dhënat konvertohen në të dhëna DCC.

lak void (i pavlefshëm) {if (radio.disponueshëm ()) {bool done = false; bërë = radio.lexim (inmsg, 1); // lexoni të dhënat e marra

char rc = inmsg [0]; // vendosni karakterin e lexuar në këtë grup

nëse (rc! = 0) {. // nëse karakteri nuk është i barabartë me zero

inString.concat (rc); // ndërtoni mesazhin}

if (rc == '\ 0') {// nëse karakteri është '/0' fundi i mesazhit

Serial.println (inString); // printoni mesazhin e mbledhur

varg (); // de-konstruktoni mesazhin e vargut për të marrë udhëzimet DCC

} } }

Hapi 4: Drejtoni Locos

Drejtoni Locos
Drejtoni Locos

Për të shmangur ndërprerjen e të dhënave nga drejtimi i trenave të shumtë në të njëjtën shinë, duhet të shkëputni kontaktet midis rrotave dhe shiritit për secilën loko dhe kamion të punësuar.

Shijoni trenat pa lëvizje pavarësisht nga kushtet e binarëve - çfarë ndryshimi! Asnjë sherr, asnjë start-stop dhe asnjë pastrim i kërkuar.

Bateritë që kam përdorur janë të rimbushshme LLoytron AA x 12. Kam ndërtuar një karikues veçanërisht për to që ngarkon 6 në të njëjtën kohë. (shih udhëzues)

Recommended: