Агуулгын хүснэгт:

Цэцэрлэгийн галт тэрэг - Arduino утасгүй NMRA DCC: 4 алхам (зурагтай)
Цэцэрлэгийн галт тэрэг - Arduino утасгүй NMRA DCC: 4 алхам (зурагтай)

Видео: Цэцэрлэгийн галт тэрэг - Arduino утасгүй NMRA DCC: 4 алхам (зурагтай)

Видео: Цэцэрлэгийн галт тэрэг - Arduino утасгүй NMRA DCC: 4 алхам (зурагтай)
Видео: This is how you would train in the US 💀#electronics #arduino #engineering 2024, Оны зургадугаар сарын
Anonim
Image
Image
Системийн дизайн
Системийн дизайн

Өмнө нь үхсэн төмөр замын системийн талаар DCC -ийн зааварчилгааны дагуу би товчлуур, LCD дэлгэц бүхий гар ажиллагаатай DCC командын станцын тусламжтайгаар энэ санааг боловсруулсан. Командын станц нь NMRA DCC зааварт шаардлагатай бүх кодчилолыг агуулдаг боловч төмөр замд холбохын оронд өгөгдлийг RF24L01+ радио модулийн тусламжтайгаар ачааны машинд эсвэл түгжээний доор байрлуулсан хүлээн авагч руу дамжуулдаг.

Мэдээжийн хэрэг, таны локонд хөдөлгүүрийн моторт тохирсон ачааллын код тайлагч байх ёстой.

Алхам 1: Системийн дизайн

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

Arduino Pro Mini нь дизайны гол цөм юм. Fritzing ашиглан хэлхээг хөгжүүлж, ПХБ үйлдвэрлэх.

Би ижил ПХБ -ийг дамжуулагч болон хүлээн авагчийн аль алинд нь ашиглаж чадсан тул зарим зардлыг хэмнэв.

Дамжуулагч нь товчлуур болон LCD-ийн холболттой байдаг бол хүлээн авагч нь үүнийг шаарддаггүй бөгөөд H гүүрийг ашиглан DCC гаралтыг локод нийлүүлдэг.

Цаашдын хөгжилд илүү хүчирхэг локост шаардлагатай бол илүү том H гүүрний холболт орно.

Хэрэв та Arduino дээрх SCA / SCL холболтыг зөвхөн 2 утас ашиглан тэжээлээр хангах үүргэвчтэй дагалдах LCD дэлгэц ашигладаг бол PCF8574 -ийг устгах боломжтой. Хэсгийн жагсаалт: Нийт = DCC Command Station + 1 хүлээн авагчийн хувьд ойролцоогоор 60 фунт стерлинг + Нэмэлт хүлээн авагчийн зардал = Тус бүр ойролцоогоор 10.00 фунт. + батерей

Arduino Pro Mini. x 2 = 4.00 фунт

4x3 мембран товчлуур = 3.00 фунт

20 x 4 LCD дэлгэц = 7.00 фунт

PCF5874 = 1.80 фунт

NRF24L01+. радио модуль x 2 = 5.80 фунт

ПХБ -ийн үйлдвэрлэл 10 хямдралтай (эсвэл Веро хавтанг ашиглаж болно) = 2 фунт стерлинг бол 24 фунт эсвэл 4.80 фунт стерлинг

3.3 v Зохицуулагч = 0.17 фунт (RS Comp -ээс 25 багц)

5v зохицуулагч LM7805 = 0.30 фунт

H-гүүр SN754410ne = 3.00 фунт

Lloytron дахин цэнэглэдэг 2700 maH AA батерей 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 хэмжээтэй LCD дэлгэц ашиглаж, нэг мөрөнд 20 тэмдэгт бүхий 4 мөр мэдээлэл оруулах боломжтой.

1 -ээс 9 = локо хаяг * = чиглэл 0 = гэрэл # = 1-8 товчлууруудын функциональ цэс

Arduino Pro Mini тойм зургийн үндсэн тайлбар: Энэ кодын мөр нь DCC мессежийг 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]; // хөгжилтэй байх массив8

Бид явж байхдаа DCC зааврыг өөрчлөхийг идэвхжүүлэхийн тулд:

Хурдны зааварчилгаа авахын тулд: void o'zgarishlar_speed (struct Message & x) {

x.data [0] = locoAdr;

x.data [1] = 0x40; // 28 алхамтай locoMsg}

Функцийн зааврын хувьд:

хүчин төгөлдөр бус өөрчлөлт_бүлэг1 (бүтэц Message & 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 (); // өгөгдлийг LCD дэлгэц дээр харуулах

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 () {шилжүүлэгч (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 дохиог 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]; // тэмдэгтийг энэ массивт оруулна уу

хэрэв (rc! = 0) {. // хэрэв тэмдэгт тэгтэй тэнцүү биш бол

inString.concat (rc); // зурвас үүсгэх}

if (rc == '\ 0') {// хэрэв тэмдэгт нь '/0' зурвасын төгсгөл бол

Serial.println (inString); // угсарсан мессежийг хэвлэх

мөр (); // DCC зааврыг авахын тулд мөрийн зурвасыг бүтээх

} } }

Алхам 4: Locos ажиллуулна уу

Локо ажиллуулна уу
Локо ажиллуулна уу

Нэг галт тэрэг дээр олон галт тэрэг ажиллуулахад мэдээлэл тасалдахаас сэргийлэхийн тулд та ажиллаж буй ачааны машин, ачааны машин бүрийн дугуй ба замын хоорондох контактуудыг салгах ёстой.

Замын нөхцөл байдлаас үл хамааран үнэгүй галт тэргээр аялаарай - ямар ялгаа байна! Санаа зоволтгүй, эхлэх цэг, цэвэрлэгээ шаардлагагүй.

Миний ашигласан батерейг дахин цэнэглэдэг LLoytron AA x 12. Би ялангуяа нэг удаад 6 цэнэглэдэг цэнэглэгч бүтээсэн. (зааврыг үзнэ үү)

Зөвлөмж болгож буй: