Daftar Isi:

Garden Train - Arduino Wireless NMRA DCC: 4 Langkah (dengan Gambar)
Garden Train - Arduino Wireless NMRA DCC: 4 Langkah (dengan Gambar)

Video: Garden Train - Arduino Wireless NMRA DCC: 4 Langkah (dengan Gambar)

Video: Garden Train - Arduino Wireless NMRA DCC: 4 Langkah (dengan Gambar)
Video: Давайте учиться вместе - резюме для DCC Decoder! (Модель железной дороги DCC с Arduino 4) 2024, November
Anonim
Image
Image
Desain Sistem
Desain Sistem

Lebih jauh dari instruksi sebelumnya dengan DCC pada sistem rel mati, saya telah mengembangkan ide lebih lanjut dengan Stasiun Komando DCC genggam dengan keypad dan layar LCD. Stasiun Komando berisi semua pengkodean yang diperlukan untuk instruksi NMRA DCC, namun alih-alih terhubung ke rel, data ditransfer oleh modul radio RF24L01+ ke penerima yang dipasang di truk atau di bawah loco - di mana pun ruangan memungkinkan.

Tentu saja, loco Anda harus dilengkapi dengan dekoder dengan kemampuan beban yang sesuai dengan motor mesin.

Langkah 1: Desain Sistem

Desain Sistem
Desain Sistem

Arduino Pro Mini adalah inti dari desain. Menggunakan Fritzing untuk mengembangkan sirkuit dan menghasilkan PCB.

Saya dapat menggunakan PCB yang sama untuk pemancar dan penerima sehingga menghemat beberapa biaya.

Pemancar memiliki koneksi untuk keypad dan LCD sedangkan penerima tidak memerlukan ini dan menggunakan jembatan-H untuk memasok output DCC untuk loco.

Pengembangan lebih lanjut mencakup koneksi untuk jembatan-H yang lebih besar jika diperlukan untuk lokasi yang lebih kuat.

PCF8574 dapat dihapus jika Anda menggunakan layar LCD yang disertakan dengan ransel yang memungkinkan koneksi SCA / SCL pada Arduino untuk memberi makan layar hanya dengan menggunakan 2 kabel. Daftar bagian: Total = sekitar £60 untuk Stasiun Komando DCC + 1 penerima Biaya penerima tambahan = £10.00 kira-kira masing-masing. + baterai

Arduino Pro Mini. x 2 = £4.00

Papan tombol membran 4x3 = £3,00

Layar LCD 20 x 4 = £7,00

PCF5874 = £1,80

NRF24L01+. modul radio x 2 = £5,80

Pembuatan PCB dengan diskon 10 (atau papan Vero dapat digunakan) = £24 atau £4,80 untuk diskon 2

3,3 v Regulator = £0,17 (paket 25 dari RS Comp)

5v Regulator LM7805 = £0,30

H-jembatan SN754410ne = £3.00

Baterai AA 2700 mAh Lloytron yang dapat diisi ulang x 12 = £22.00. (baterai dengan nilai maH lebih rendah lebih murah)

Kapasitor, pot, pin, konektor, dll = kira-kira £2,00

Kandang 190x110x60 mm = £8.00

Pemancar - pengisi daya telepon / baterai = £2,00

Langkah 2: Pemancar

Pemancar
Pemancar

Diagram rangkaian ditunjukkan di mana pin D2 hingga D8 pada Arduino Pro Mini terhubung ke keypad. Potensiometer 100k ohm terhubung ke pin Analog A0 untuk penyesuaian kecepatan. Pin SDA dan SCL dari chip PCF8574 terhubung ke pin A4 dan A5 pada Arduino Pro Mini dengan cara menyolder kabel ke pin pada lapisan atas Pro Mini.

Sketsa Arduino terlampir untuk diunduh.

Saya telah menggunakan layar LCD 20 x 4 yang memungkinkan 4 baris informasi dengan 20 karakter per baris. Papan tombol menyediakan menu berikut:

1 hingga 9 = alamat loco * = arah 0 = lampu # = Menu fungsi untuk tombol 1 hingga 8

Deskripsi dasar sketsa Arduino Pro Mini: Baris kode ini mengatur pesan DCC dalam format HEX. struct Pesan pesan[MAXMSG] = {

{ { 0xFF, 0, 0xFF, 0, 0, 0, 0}, 3}, // pesan menganggur

{ { locoAdr, 0, 0, 0, 0, 0, 0}, 3} // 3 byte alamat

};

Untuk menyimpan pengaturan untuk setiap loco, serangkaian array diatur sebagai berikut:

int la[20];// array untuk menyimpan nomor loco

int sa[20];// array untuk menyimpan nilai kecepatan

int fda[20];// array untuk menampung direktori

int fla[20];// array untuk menahan lampu

int f1a[20];// array untuk menahan kesenangan1…..

int f8a[20];// array untuk menahan kesenangan8

Untuk mengaktifkan instruksi DCC yang akan diubah saat kita pergi:

Untuk petunjuk kecepatan: void amend_speed (struct Message & x) {

x.data[0] = locoAdr;

x.data[1] = 0x40; // locoMsg dengan 28 langkah kecepatan }

Untuk instruksi Fungsi:

void amend_group1 (Pesan struct & x) {

x.data[0] = locoAdr;

x.data[1] = 0x80; // locoMsg dengan instruksi grup satu 0x80 }

Lingkaran utama sketsa:

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

kirim_data_1(); // kirim data dengan nirkabel

penundaan (10);

kirim_data_3(); // menampilkan data pada layar LCD

kirim_data_4(); // menampilkan data pada monitor serial }

jika (baca_fungsi()) {

assemble_dcc_msg_group1();

kirim_data_1();

penundaan (10);

kirim_data_3(); } }

Perbarui data saat kecepatan berubah:

boolean read_locoSpeed()Ini mendeteksi alamat loco baru, pengaturan kecepatan atau arah dan mengubah 'data' HEX yang sesuai. Di sini saya telah menetapkan 28 langkah kecepatan dan untuk memenuhi standar NMRA S 9.2, data kecepatan harus ditemukan dari tabel pencarian di 'speed_step()'

void speed_step(){ switch (locoSpeed){

kasus 1: data |= 0x02; merusak;

kasus 2: data |= 0x12; merusak;

kasus 3: data |= 0x03; merusak;

………

kasus 28: data |= 0x1F; merusak; }}

Perbarui data saat fungsi berubah:

boolean read_function()

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

} //lampu kepala mati

if (fla[locoAdr] == 1) {

data = 0x90;

} //lampu kepala menyala

Untuk setiap Fungsi:

if (f2a[locoAdr] == 0) { data |= 0; }. // Fungsi 2 mati

if (f2a[locoAdr] == 1) {

data |= 0x02; // Fungsi 2 pada }'data' dibangun dengan menggabungkan ['|=' compound bitwise atau] kode HEX untuk setiap Fungsi.

Langkah 3: Penerima

Penerima
Penerima

Diagram rangkaian ditunjukkan di mana pin 5 dan 6 dari Arduino Pro Mini digunakan untuk menyediakan sinyal DCC yang dipasok ke H-bridge. Pasangan H-jembatan dihubungkan secara paralel untuk meningkatkan kapasitas arus. Tergantung pada arus yang ditarik oleh loco, heatsink mungkin diperlukan untuk dipasang ke perangkat DIP 16 pin, atau jembatan-H tugas berat dapat dihubungkan secara eksternal.

Sketsa Arduino terlampir untuk diunduh. Sinyal DCC dibuat dari jam yang berjalan pada 2MHZ

void SetupTimer2() melakukan pekerjaan ini.

Jam termasuk 'pulsa pendek' (58us) untuk '1' dalam data DCC dan 'pulsa panjang' (116us) untuk '0' dalam data DCC.

Loop void, mendapatkan data dari radio dan jika string yang valid ditemukan, data diubah menjadi data DCC.

void loop(void){ if (radio.available()){ bool done = false; selesai = radio.read(inmsg, 1); // membaca data yang diterima

char rc = inmsg[0]; // masukkan karakter yang dibaca ke dalam array ini

jika (rc != 0){. // jika karakter tidak sama dengan nol

inString.concat(rc); // buat pesan }

if (rc == '\0') { // jika karakter adalah '/0' akhir pesan

Serial.println(inString); // cetak pesan yang sudah dirakit

rangkaian(); // de-konstruksi pesan string untuk mendapatkan instruksi DCC

} } }

Langkah 4: Jalankan Locos

Jalankan Locos
Jalankan Locos

Untuk menghindari gangguan data dari menjalankan beberapa kereta di trek yang sama, Anda harus memutuskan kontak antara roda dan trek untuk setiap loko dan truk yang digunakan.

Nikmati kereta berjalan gratis apa pun kondisi lintasannya - sungguh bedanya! Tidak ada kerumitan, tidak ada start-stop dan tidak perlu pembersihan.

Baterai yang saya gunakan adalah LLoytron AA x 12 yang dapat diisi ulang. Saya telah membuat pengisi daya khusus untuk mereka yang mengisi daya 6 sekaligus. (lihat dapat diinstruksikan)

Direkomendasikan: