İçindekiler:

Bahçe Treni - Arduino Kablosuz NMRA DCC: 4 Adım (Resimlerle)
Bahçe Treni - Arduino Kablosuz NMRA DCC: 4 Adım (Resimlerle)

Video: Bahçe Treni - Arduino Kablosuz NMRA DCC: 4 Adım (Resimlerle)

Video: Bahçe Treni - Arduino Kablosuz NMRA DCC: 4 Adım (Resimlerle)
Video: Arduino RFID Otomatik Kapı (RC522 RFID Kullanımı) 2024, Kasım
Anonim
Image
Image
Sistem Tasarımı
Sistem Tasarımı

Ölü ray sistemi üzerinde DCC ile daha önce verilen talimatlara ek olarak, bu fikri tuş takımı ve LCD ekranlı elde tutulan bir DCC Komuta İstasyonu ile daha da geliştirdim. Komuta İstasyonu, NMRA DCC talimatları için gereken tüm kodlamayı içerir, ancak, raylara bağlanmak yerine, veriler, RF24L01+ radyo modülü tarafından, odanın izin verdiği her yerde, bir kamyona veya loco'nun altına monte edilmiş bir alıcıya aktarılır.

Tabii ki, lokomotifleriniz, motor motorlarına uygun yük kapasitesine sahip bir kod çözücü ile donatılmalıdır.

Adım 1: Sistem Tasarımı

Sistem Tasarımı
Sistem Tasarımı

Arduino Pro Mini, tasarımın kalbinde yer almaktadır. Devreyi geliştirmek ve PCB üretmek için Fritzing kullanmak.

Hem verici hem de alıcı için aynı PCB'yi kullanabildim, böylece bazı maliyetlerden tasarruf ettim.

Vericinin tuş takımı ve LCD için bağlantıları vardır ve alıcı bunlara ihtiyaç duymaz ve lokomotif için DCC çıkışını sağlamak için H köprüsünü kullanır.

Daha güçlü bir lokomotif için gerekirse daha büyük bir H-köprü için bağlantılar içeren başka bir geliştirme.

PCF8574, sırt çantasıyla birlikte gelen ve Arduino'daki SCA / SCL bağlantılarının ekranı yalnızca 2 kablo kullanarak beslemesine izin veren bir LCD ekran kullanırsanız silinebilir. Parça listesi: Toplam = DCC Komuta İstasyonu + 1 alıcı için yaklaşık 60 £Ek alıcı maliyeti = her biri yaklaşık 10,00 £. + piller

Arduino Pro Mini. x 2 = 4,00 £

4x3 membran tuş takımı = 3,00 £

20 x 4 LCD ekran = 7,00 £

PCF5874 = 1,80 £

NRF24L01+. radyo modülleri x 2 = 5,80 £

10 kapalı devre için PCB üretimi (veya Vero kartı kullanılabilir) = 2 kapalı için 24 £ veya 4,80 £

3,3 v Regülatör = 0,17 £ (RS Comp'tan 25'li paket)

5v Regülatör LM7805 = £0,30

H-köprü SN754410ne = 3,00 £

Lloytron yeniden şarj edilebilir 2700 maH AA pil x 12 = 22,00 £. (düşük maH dereceli piller daha ucuzdur)

Kondansatörler, kaplar, pimler, konektörler vb. = yaklaşık 2,00 £

Muhafaza 190x110x60 mm = 8,00 £

Verici - telefon şarj cihazı / pil = 2,00 £

2. Adım: Verici

verici
verici

Arduino Pro Mini üzerindeki D2 - D8 pinlerinin tuş takımına bağlı olduğu devre şeması gösterilmektedir. Hız ayarı için Analog pin A0'a 100k ohm'luk bir potansiyometre bağlanır. PCF8574 çipini oluşturan SDA ve SCL pinleri A4 pinlerine bağlanır ve Arduino Pro Mini üzerindeki A5, Pro Mini'nin üst katmanındaki pimlere lehimli teller vasıtasıyla.

Arduino taslağı indirilmek üzere eklenmiştir.

Her satırda 20 karakter olmak üzere 4 satır bilgi sağlayan 20 x 4 LCD ekran kullandım. Tuş takımı aşağıdaki menüyü sağlar:

1 ila 9 = lokomotif adresi * = yön 0 = ışıklar # = 1 ila 8 tuşlar için fonksiyon menüsü

Arduino Pro Mini taslağının temel açıklaması: Kodun bu satırı, DCC mesajını HEX formatında düzenler. struct Mesaj msg[MAXMSG] = {

{ { 0xFF, 0, 0xFF, 0, 0, 0, 0}, 3}, // boş mesaj

{ { locoAdr, 0, 0, 0, 0, 0, 0}, 3} // 3 bayt adres

};

Her lokomotifin ayarlarını saklamak için aşağıdaki gibi bir dizi dizi ayarlanır:

int la[20];// konum numaralarını tutacak dizi

int sa[20];// hız değerlerini tutacak dizi

int fda[20];// dizini tutacak dizi

int fla[20];// ışıkları tutacak dizi

int f1a[20];// fun1'i tutacak dizi…..

int f8a[20];// fun8'i tutacak dizi

DCC talimatlarının ilerledikçe değiştirilmesini sağlamak için:

Hız talimatları için: void amend_speed (struct Message & x) {

x.data[0] = locoAdr;

x.data[1] = 0x40; // 28 hızlı adımlı locoMsg }

İşlev talimatları için:

void amend_group1 (struct Message & x) {

x.data[0] = locoAdr;

x.data[1] = 0x80; // locoMsg ile grup 1 komutu 0x80 }

Çizimin ana döngüsü:

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

send_data_1(); // verileri kablosuz olarak gönder

gecikme(10);

send_data_3(); // verileri LCD ekranda göster

send_data_4(); // verileri seri monitörde göster }

if (read_function()) {

assemble_dcc_msg_group1();

send_data_1();

gecikme(10);

send_data_3(); } }

Hız değiştiğinde verileri güncelleyin:

boolean read_locoSpeed()Bu, yeni bir lokomotif adresi, hız veya yön ayarını algılar ve HEX 'verilerini' buna göre değiştirir. Burada 28 hız adımı belirledim ve NMRA standardı S 9.2'yi karşılamak için hız verileri bir arama tablosundan bulunmalıdır. 'speed_step()' içinde

void speed_step(){ anahtarı (locoSpeed){

durum 1: veri |= 0x02; kırmak;

durum 2: veri |= 0x12; kırmak;

durum 3: veri |= 0x03; kırmak;

………

durum 28: veri |= 0x1F; kırmak; }}

İşlevler değiştiğinde verileri güncelleyin:

boolean okuma işlevi()

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

} // farlar kapalı

if (fla[locoAdr] == 1) {

veri = 0x90;

} // farlar açık

Her İşlev için:

if (f2a[locoAdr] == 0) { veri |= 0; }. // Fonksiyon 2 kapalı

if (f2a[locoAdr] == 1) {

veri |= 0x02; // }'veri' üzerindeki 2. İşlev, ['|=' bileşiği bit düzeyinde veya] her bir İşlev için HEX kodlarını birleştirerek oluşturulur.

Adım 3: Alıcı

Alıcı
Alıcı

Devre şeması, Arduino Pro Mini'nin 5 ve 6 numaralı pinlerinin H köprüsüne sağlanan DCC sinyalini sağlamak için kullanıldığı yerde gösterilmiştir. H-köprü çiftleri, akım kapasitesini artırmak için paralel olarak bağlanır. Loco tarafından çekilen akıma bağlı olarak, 16 pinli DIP cihazına bir soğutucu takılması gerekebilir veya harici olarak ağır hizmet tipi bir H köprüsü bağlanabilir.

Arduino taslağı indirilmek üzere eklenmiştir. DCC sinyali 2MHZ'de çalışan bir saatten oluşur.

void SetupTimer2() bu işi yapar.

Saat, DCC verilerinde '1' için 'kısa darbeler' (58us) ve DCC verilerinde '0' için 'uzun darbeler' (116us) içerir.

Döngü void, radyodan veri alır ve geçerli bir dize bulunursa, veriler DCC verilerine dönüştürülür.

void loop(void){ if (radio.available()){ bool done = false; yapıldı = radyo.oku(inmsg, 1); // alınan verileri oku

karakter rc = inmsg[0]; // okunan karakteri bu diziye koy

if (rc != 0){. // karakter sıfıra eşit değilse

inString.concat(rc); // mesajı oluştur }

if (rc == '\0') { // eğer karakter '/0' ise mesajın sonu

Serial.println(inString); // birleştirilmiş mesajı yazdır

sicim(); // DCC talimatlarını almak için dize mesajını kaldır

} } }

4. Adım: Locos'u çalıştırın

Locos'u çalıştırın
Locos'u çalıştırın

Aynı hat üzerinde birden fazla trenin çalıştırılmasından kaynaklanan verilerin kesintiye uğramasını önlemek için, kullanılan her bir lokomotif ve kamyon için tekerlekler ve hat arasındaki temasları kesmeniz gerekir.

Pist koşullarından bağımsız olarak serbest çalışan trenlerin keyfini çıkarın - ne fark eder! Zorluk yok, start-stop yok ve temizlik gerekli değil.

Kullandığım piller yeniden şarj edilebilir LLoytron AA x 12'dir. Özellikle onlar için 6 adet şarj eden bir şarj cihazı yaptım. (bkz: talimat)

Önerilen: