Мазмұны:

Бақша пойызы - Arduino сымсыз NMRA DCC: 4 қадам (суреттермен)
Бақша пойызы - Arduino сымсыз NMRA DCC: 4 қадам (суреттермен)

Бейне: Бақша пойызы - Arduino сымсыз NMRA DCC: 4 қадам (суреттермен)

Бейне: Бақша пойызы - Arduino сымсыз NMRA DCC: 4 қадам (суреттермен)
Бейне: Жүргізуші | Bilim Kids | Водитель 2024, Қараша
Anonim
Image
Image
Жүйенің дизайны
Жүйенің дизайны

Өлі рельсті жүйе бойынша DCC -мен алдыңғы нұсқаулықтан басқа, мен бұл идеяны пернетақтасы мен СКД дисплейі бар қолмен басқарылатын DCC командалық станциясымен дамыттым. Командалық станция NMRA DCC нұсқаулары үшін қажет барлық кодтауды қамтиды, бірақ рельстерге қосылудың орнына, деректер RF24L01+ радио модулі арқылы жүк машинасына немесе локо астына орнатылған қабылдағышқа беріледі - бөлме рұқсат етілген жерде.

Әрине, сіздің қондырғыларыңыз қозғалтқыш қозғалтқыштарына сәйкес келетін жүктеу қабілетінің декодерімен жабдықталуы керек.

1 -қадам: жүйенің дизайны

Жүйенің дизайны
Жүйенің дизайны

Arduino Pro Mini - бұл дизайнның негізі. Схеманы дамыту және ПХД шығару үшін Фритзингті қолдану.

Мен бірдей ПХД -ні таратқыш пен қабылдағыш үшін қолдана алдым, осылайша кейбір шығындарды үнемдедім.

Таратқышта пернетақта мен СКД қосылымдары бар, ал ресивер оларды қажет етпейді және локоға DCC шығысын беру үшін H көпірін пайдаланады.

Одан әрі дамуға неғұрлым қуатты локостар үшін қажет болса, үлкенірек H көпірінің қосылыстары кіреді.

PCF8574 Arduino -да SCA / SCL қосылымдарына дисплейді тек 2 сыммен жеткізуге мүмкіндік беретін рюкзакпен бірге келетін СКД дисплейін пайдалансаңыз, PCF8574 жойылуы мүмкін. Бөлшектер тізімі: DCC Command Station + 1 қабылдағышы үшін барлығы 60 фунт стерлинг Қосымша қабылдағыштар құны = Әрқайсысына шамамен 10,00 фунт. + батареялар

Arduino Pro Mini. x 2 = 4,00 фунт

4х3 мембраналық пернетақта = 3,00 фунт

20 x 4 СКД дисплейі = 7,00 фунт

PCF5874 = 1,80 фунт стерлинг

NRF24L01+. радио модульдер x 2 = 5,80 фунт

ПХД өндірісі 10 жеңілдікке (немесе Vero тақтасын қолдануға болады) = 2 фунт үшін 24 фунт немесе 4,80 фунт стерлинг

3.3 v Реттеуші = 0,17 фунт (RS Comp -тен 25 пакет)

5V реттегіші LM7805 = 0,30 фунт стерлинг

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

Lloytron қайта зарядталатын 2700 мАА АА батареялары x 12 = 22,00 фунт. (maH төмен батареялар арзанырақ)

Конденсаторлар, кастрюльдер, түйреуіштер, қосқыштар және т.б. = шамамен 2,00 фунт стерлинг

Корпус 190x110x60 мм = 8,00 фунт

Таратқыш - телефонды зарядтағыш / батарея = 2,00 фунт

2 -қадам: таратқыш

Таратқыш
Таратқыш

Диаграмма Arduino Pro Mini -дегі D2 -D8 түйреуіштері пернетақтаға қосылған жерде көрсетілген. 100к Ом потенциометрі аналогты A0 пиніне қосылады, ал SDA мен SCL түйрегіштері PCF8574 чипін құрайды A4 және A5 Arduino Pro Mini -де Pro Mini жоғарғы қабатындағы түйреуіштерге дәнекерленген сымдар арқылы.

Arduino эскизі жүктеуге қосылады.

Мен 20 х 4 СКД дисплейін қолдандым, әр жолда 20 таңбадан тұратын 4 жолды ақпарат алуға мүмкіндік беретін пернетақта келесі мәзірді ұсынады:

1 -ден 9 -ға дейін = локо -адрес * = бағыт 0 = шамдар # = 1 -ден 8 -ге дейінгі пернелердің функция мәзірі

Arduino Pro Mini эскизінің негізгі сипаттамасы: Кодтың бұл жолы DCC хабарламасын HEX форматында реттейді. хабар Хабарлама [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]; // көңілді өткізуге арналған массив8

Біз жүріп жатқанда DCC нұсқауларын өзгертуді қосу үшін:

Жылдамдық нұсқаулары үшін: void түзөтуге_сұраныс (struct Message & x) {

x.data [0] = locoAdr;

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

Функционалды нұсқаулар үшін:

void o'zgarishlar_group1 (құрылым Хабарлама және 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) {

1 жағдай: деректер | = 0x02; үзіліс;

2 -жағдай: мәліметтер | = 0x12; үзіліс;

3 жағдай: деректер | = 0x03; үзіліс;

………

28 жағдай: деректер | = 0x1F; үзіліс; }}

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

логикалық оқу_функциясы ()

if (fla [locoAdr] == 0) {деректер = 0x80;

} // фаралар сөнеді

егер (fla [locoAdr] == 1) {

деректер = 0x90;

} // фаралар қосулы

Әр функция үшін:

if (f2a [locoAdr] == 0) {деректер | = 0; }. // 2 -функция өшірулі

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

деректер | = 0x02; // «Деректер» бойынша 2 -функция әр функция үшін ['| =' қосындысын немесе] HEX кодтарын біріктіру арқылы құрылады.

3 -қадам: қабылдағыш

Қабылдағыш
Қабылдағыш

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

Arduino эскизі жүктеу үшін бекітілген. DCC сигналы 2 МГц жиілігінде жұмыс істейтін сағаттан жасалған.

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]; // осы массивке оқылатын таңбаны қойыңыз

егер (rc! = 0) {. // егер таңба нөлге тең болмаса

inString.concat (rc); // хабарды құру}

if (rc == '\ 0') {// егер таңба '/0' хабардың соңы болса

Serial.println (inString); // жинақталған хабарды басып шығарыңыз

жол (); // DCC нұсқауларын алу үшін жолдық хабарламаны құрудан бас тартыңыз

} } }

4 -қадам: Locos іске қосыңыз

Локостарды іске қосыңыз
Локостарды іске қосыңыз

Бір пойызда бірнеше пойыздың жүруіне байланысты ақпараттың үзілуіне жол бермеу үшін, әр локо мен жүк көлігі үшін доңғалақтар мен жол арасындағы контактілерді ажырату қажет.

Жолдың жағдайына қарамастан ақысыз жүретін пойыздардан ләззат алыңыз - бұл қандай айырмашылық! Ешқандай қиындық, старт-тоқтау және тазалау қажет емес.

Мен қолданған аккумуляторлар қайта зарядталатын LLoytron AA x 12. Мен оларға бір уақытта 6 зарядтайтын зарядтағыш құрдым. (нұсқаулықты қараңыз)

Ұсынылған: