Мазмуну:

Garden Train - Arduino Wireless NMRA DCC: 4 кадам (Сүрөттөр менен)
Garden Train - Arduino Wireless NMRA DCC: 4 кадам (Сүрөттөр менен)

Video: Garden Train - Arduino Wireless NMRA DCC: 4 кадам (Сүрөттөр менен)

Video: Garden Train - Arduino Wireless NMRA DCC: 4 кадам (Сүрөттөр менен)
Video: Cheap and Amazing! DCC-EX 2 Years Later 2024, Июнь
Anonim
Image
Image
Системанын дизайны
Системанын дизайны

Өлгөн темир жол системасы боюнча DCC менен мурунку көрсөтмөлөргө ылайык, мен идеяны кол менен өткөрүлгөн DCC Command Station менен баскычтоп жана ЖК дисплейи менен иштеп чыктым. Командалык станция NMRA DCC көрсөтмөлөрү үчүн талап кылынган бардык коддорду камтыйт, бирок рельстерге туташуунун ордуна, маалыматтар RF24L01+ радио модулу аркылуу жүк ташуучу унаага же локонун астына орнотулган кабыл алгычка - бөлмө уруксат берген жерде берилет.

Албетте, сиздин локосторуңузга мотордун кыймылдаткычтарына ылайыктуу жүк жөндөмүнүн декодери орнотулушу керек.

1 -кадам: системанын дизайны

Системанын дизайны
Системанын дизайны

Arduino Pro Mini дизайндын өзөгүн түзөт. Фритзингди схеманы өнүктүрүү жана ПХБ чыгаруу үчүн колдонуу.

Мен ошол эле ПКБны өткөргүчкө да, кабыл алуучуга да колдоно алдым, ошону менен кээ бир чыгымдарды үнөмдөп калдык.

Бергич баскычтоп жана ЖК үчүн туташууларга ээ, ал эми кабыл алуучу буларды талап кылбайт жана локо үчүн DCC чыгарууну камсыз кылуу үчүн H-көпүрөсүн колдонот.

Дагы бир өнүгүү, чоңураак H көпүрөсү үчүн байланыштарды камтыйт, эгерде күчтүү локостор үчүн керек болсо.

Эгерде сиз рюкзак менен келген LCD дисплейди колдонсоңуз, PCF8574 жок кылынышы мүмкүн, ал Arduinoдогу SCA / SCL туташууларын дисплейди 2 зым менен гана камсыздайт. = £ 10.00 болжол менен ар бири. + батареялар

Arduino Pro Mini. x 2 = £ 4.00

4х3 мембраналык баскычтоп = 3,00 фунт

20 х 4 ЖК дисплей = 7,00 фунт

PCF5874 = £ 1.80

NRF24L01+. радио модулдары x 2 = £ 5.80

10 өчүрүү үчүн PCB өндүрүшү (же Vero тактасы колдонулушу мүмкүн) = 2 фунт үчүн 24 фунт же 4,80 фунт

3.3 v Регулятор = £ 0.17 (RS пакетинен 25 пакети)

5v Regulator LM7805 = £ 0.30

H-көпүрө SN754410ne = 3,00 фунт

Lloytron кайра заряддалуучу 2700 maH AA батареялары x 12 = £ 22.00. (төмөнкү maH бааланган батареялар арзаныраак)

Конденсаторлор, казандар, казыктар, туташтыргычтар ж.б. = £ 2.00 болжол менен

Корпус 190x110x60 мм = £ 8.00

Бергич - телефон заряддагыч / батарея = 2,00 фунт

2 -кадам: өткөргүч

Бергич
Бергич

Электр схемасы D2ден D8ге чейинки Arduino Pro Mini'дин клавиатурага туташтырылгандыгын көрсөтөт. 100k ohm потенциометр ылдамдыкты жөнгө салуу үчүн Analog pin A0 менен туташкан. A5 Arduino Pro Miniде Pro Miniдин үстүңкү катмарындагы казыктарга туташтырылган зымдар аркылуу.

Arduino эскизи жүктөө үчүн тиркелген.

Мен 20 х 4 ЖК дисплейин колдонуп, сапта 20 белгиден турган 4 сап маалыматка ээ болчумун. Баскычтобу төмөнкү менюну камсыз кылат:

1ден 9га чейин = локо дареги * = багыты 0 = жарыктар # = 1ден 8ге чейинки баскычтар үчүн функция менюсу

Arduino Pro Mini эскизинин негизги сүрөттөлүшү: Коддун бул сабы DCEX билдирүүсүн HEX форматында уюштурат. структура Билдирүү msg [MAXMSG] = {

{{0xFF, 0, 0xFF, 0, 0, 0, 0}, 3}, // бош турган билдирүү

{{locoAdr, 0, 0, 0, 0, 0, 0}, 3} // 3 байт дареги

};

Ар бир локонун орнотууларын сактоо үчүн бир катар массивдер төмөнкүдөй орнотулат:

int la [20]; // локо номерлерди кармоо үчүн массив

int sa [20]; // массив ылдамдык маанилерин кармоо үчүн

int fda [20]; // dir кармоо үчүн массив

int fla [20]; // жарыктарды кармоо үчүн массив

int f1a [20]; // көңүл ачуу үчүн массив1 …..

int f8a [20]; // fun8 өткөрүү үчүн массив

Биз бара жатканда DCC көрсөтмөлөрүн өзгөртүү үчүн иштетүү үчүн:

Ылдамдык көрсөтмөлөрү үчүн: void o'zgarishlar_speed (struct Message & x) {

x.data [0] = locoAdr;

x.data [1] = 0x40; // 28 ылдамдык менен locoMsg}

Функция боюнча көрсөтмөлөр үчүн:

void түзөтүү_группасы1 (структуралык билдирүү & x) {

x.data [0] = locoAdr;

x.data [1] = 0x80; // locoMsg 0x80 тобунун көрсөтмөсү менен

Эскиздин негизги цикли:

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

send_data_1 (); // маалыматты зымсыз жөнөтүү

кечигүү (10);

send_data_3 (); // маалыматтарды дисплейде көрсөтүү

send_data_4 (); // сериялык монитордо маалыматтарды көрсөтүү}

if (read_function ()) {

assemble_dcc_msg_group1 ();

send_data_1 ();

кечигүү (10);

send_data_3 (); }}

Ылдамдык өзгөргөндө маалыматты жаңыртыңыз:

boolean read_locoSpeed () Бул жаңы локо дарегин, ылдамдыкты же багытты аныктоону аныктайт жана ошого жараша HEX "маалыматын" түзөтөт. Бул жерде мен 28 ылдамдык кадамын белгилеп, NMRA S 9.2 стандартына жооп берүү үчүн ылдамдык маалыматы таблицадан табылышы керек 'speed_step ()' ичинде

void speed_step () {switch (locoSpeed) {

case 1: data | = 0x02; тыныгуу;

case 2: data | = 0x12; тыныгуу;

3 -жагдай: маалыматтар | = 0x03; тыныгуу;

………

case 28: data | = 0x1F; тыныгуу; }}

Функциялар өзгөргөндө маалыматтарды жаңыртуу:

логикалык read_function ()

if (fla [locoAdr] == 0) {data = 0x80;

} // баштын жарыгы өчөт

if (fla [locoAdr] == 1) {

маалыматтар = 0x90;

} // фаралар күйгүзүлгөн

Ар бир функция үчүн:

if (f2a [locoAdr] == 0) {data | = 0; }. // Функция 2 өчүк

эгер (f2a [locoAdr] == 1) {

маалыматтар | = 0x02; // "маалыматтар" боюнча 2 -функция ар бир Функция үчүн ['| =' татаал же] HEX коддорун бириктирүү менен курулат.

3 -кадам: Алуучу

Алуучу
Алуучу

Электр схемасы H-көпүрөсүнө жеткирилген DCC сигналын камсыз кылуу үчүн Arduino Pro Mini 5 жана 6-пиндери колдонулат. H-көпүрө жуптары учурдагы кубаттуулукту жогорулатуу үчүн параллель туташкан. Локо тарткан токко жараша, жылыткычты 16 пин DIP түзмөгүнө тиркөө талап кылынышы мүмкүн же оор H-көпүрөсү сырттан туташтырылышы мүмкүн.

Arduino эскизи жүктөө үчүн тиркелген. DCC сигналы 2MHZ чуркаган сааттан турат

void SetupTimer2 () бул ишти аткарат.

Саатка DCC маалыматында '1' үчүн 'кыска импульстар' (58us) жана DCC маалыматында '0' үчүн 'узак импульстар' (116us) кирет.

Цикл жараксыз, радиодон маалыматтарды алат жана эгерде жарактуу сап табылса, маалыматтар DCC маалыматтарына айландырылат.

void loop (void) {if (radio.available ()) {bool done = false; жасалган = radio.read (inmsg, 1); // алынган маалыматтарды окуу

char rc = inmsg [0]; // коюлган белгини бул массивге коюңуз

if (rc! = 0) {. // эгер символ нөлгө барабар болбосо

inString.concat (rc); // билдирүүнү түзүү}

if (rc == '\ 0') {// if тамга '/0' билдирүүнүн аягы болсо

Serial.println (inString); // чогулган кабарды басып чыгаруу

сап (); // DCC көрсөтмөлөрүн алуу үчүн сап билдирүүсүн куруңуз

} } }

4 -кадам: Локосторду иштетүү

Локосторду иштетүү
Локосторду иштетүү

Бир эле жолдо бир нече поездди иштетүүдөн маалымат үзгүлтүккө учурабашы үчүн, дөңгөлөктөр менен тректин ортосундагы байланыштарды ар бир локо жана жүк ташуучу унаа үчүн ажыратышыңыз керек.

Жолдун шартына карабастан бекер жүргөн поезддерден ырахат алыңыз - бул кандай айырмачылык! Эч кандай кыйынчылык, баштоо-токтотуу жана тазалоо талап кылынбайт.

Мен колдонгон батареялар кайра заряддалуучу LLoytron AA x 12. Мен өзгөчө бир убакта 6 заряддоочу заряддагыч кургам. (көрсөтмөлөрдү караңыз)

Сунушталууда: