İçindekiler:

Çalışan RC Araba Hız Göstergesi: 4 Adım (Resimlerle)
Çalışan RC Araba Hız Göstergesi: 4 Adım (Resimlerle)

Video: Çalışan RC Araba Hız Göstergesi: 4 Adım (Resimlerle)

Video: Çalışan RC Araba Hız Göstergesi: 4 Adım (Resimlerle)
Video: BÖYLE ŞANS OLAMAZ!!! 2024, Eylül
Anonim
Çalışan RC Araba Hız Göstergesi
Çalışan RC Araba Hız Göstergesi

Bu, Lightweight Land Rover'ın daha büyük bir RC yapısının parçası olarak oluşturduğum kısa bir projedir. Gösterge panelinde çalışan bir hız göstergesi olmasını hayal ettiğime karar verdim, ancak bir servonun onu kesmeyeceğini biliyordum. Tek bir mantıklı seçenek vardı: arduino'yu dağıtın!

Başlamak için biraz arka plan… Ben bir kodlama veya elektronik insanı değilim. Elektriği hala su akışı olarak düşünüyorum ve dirençler beni biraz şaşırtıyor. Bununla birlikte, ben bile bu işi yapabildiysem, o zaman siz de yapabilmelisiniz!

PARÇA LİSTESİ:

Mikrodenetleyici: Her biri yaklaşık 1 sterline mal olan bir ATTiny85 yongası kullandım.

Mikrodenetleyici Programcısı: Kodu çipe almak için onu programlamanın bir yoluna ihtiyacınız var. Normal arduino ile bu sadece bir USB kablosudur, ancak ATTiny çipi için ekstra bir şeye ihtiyacınız vardır. Bunu yapmak için başka bir arduino kullanabilir veya benim gibi Sparkfun'dan bir Tiny AVR programcısı kullanabilirsiniz.

learn.sparkfun.com/tutorials/tiny-avr-prog…

Bunları çeşitli yöntemlerle programlamayı denediğim için bunu tavsiye ederim ve bu en kolayı. Pano biraz pahalıdır, ancak çok sayıda ATTiny projesi yaparsanız iyi bir yatırımdır.

8 Pinli Chip Soket: Chip'i direk lehimlemek yerine sokete takarsanız montajda bazı hataları göze alabilirsiniz. Tecrübeyle konuşuldu - kimse onları yeniden programlamak için çipleri sökmek istemez.

Kondansatör: 100nF (kod 104)'lik bir dekuplaj kondansatörü kullanılır. Nedenini tam olarak anlamıyorum, ancak internette ayrıştırıcı kapasitörlerin önemli olduğunu okudum, bu yüzden doğru olmalı…

Direnç: Hattı arduinoya çekmek için 10kΩ'luk bir direnç kullanılır. Yine, elektroniğin bir başka gizemi.

Perfboard/Stripboard: Devrenizi monte edebileceğiniz bazı süpürgelikler.

Sargı Teli: Normal kılıflı tel motora lehimlenemeyecek kadar kalın. İnce emaye tel kullanmak, motor terminallerindeki stresi azaltacak ve hayatınızı çok kolaylaştıracaktır.

Servo Teli: 3 pimli JR dişi fişte sonlanan üç telli bir şerit. Benimkini 'değiştirdiğim' yanmış bir servodan aldım.

Step Motor: 6mm bipolar Nidec step motor kullandım. Step doğrudan Arduino'dan sürüldüğünden, küçük olmasına rağmen herhangi bir küçük step çalışmalıdır.

Başlık Pinleri: Gerekli değil, ancak step cihazınızı 4 başlık pinine bağlarsanız ve devrenize bir soket koyarsanız, kurulum kolaylığı için panonuzun fişini kolayca çekebilirsiniz.

Bilgisayar: Tahtanızı programlamak için bir bilgisayara ihtiyacınız olacak. Muhtemelen Arduino IDE ile. Ve belki bir USB kablosu. Ayrıca bir güç kablosu varsa, o zaman daha da iyi.

Adım 1: Sistem

Oluşturduğum sistemin temel taslağı, RC alıcısından gelen Darbe Genişlik Modülasyonu (PWM) sinyalinin bir ATTiny 85 mikrodenetleyici (uC) aracılığıyla bir step motor taramasına dönüştürüldüğü bir yöntemdi.

İşte PWM sinyalleri ve RC hakkında bir kaynak, ancak bunu çoğaltmak için kesinlikle anlamanıza gerek yok.

en.wikipedia.org/wiki/Servo_control

ATTiny, Arduino'nun en sevdiğim çeşididir çünkü temel şeyleri yapmak için hala yeterli G/Ç pinine sahip küçüktür, bu nedenle küçük modellere ve RC projelerine mükemmel şekilde uyar. ATTiny'nin ana dezavantajı, birini programlamak için biraz daha fazla kurulum gerektirmesidir, ancak bir kez kurduktan sonra o kadar ucuzlar ki, her türlü proje için yığınlar satın alabilirsiniz.

Hız göstergesi kadranının boyutu, geri beslemeli bir dişli motora sahip olmak için çok küçüktür, bu nedenle orantılı bir yanıt elde etmek için bir step motor kullanılması gerekiyordu. Bir step motor, ayrı miktarlarda (veya adımlarla…!) hareket eden bir motordur ve bu, onu bunun gibi geri beslemesiz bir sistem için ideal kılar. Tek uyarı, 'adımların' ortaya çıkan hareketin pürüzsüz yerine sarsıntılı olmasına neden olacağıdır. Dönme başına yeterli adıma sahip bir adım alırsanız, bu fark edilmez, ancak bu projede kullandığım adımın tam dönüşte yalnızca 20 veya daha fazla adımı olduğu için, açı atlama oldukça kötüdür.

Sistem, açılışta, iğneyi sıfırlamak için stepper'ı iki devir için geriye doğru çalıştıracaktır. Hızölçer, sıfır işaretinin olmasını istediğiniz yerde bir dinlenme pimine ihtiyaç duyar, yoksa sonsuza kadar döner. Ardından ileri ve geri PWM sinyallerini motorun belirli sayıda adımına eşler. Kolay değil mi…?

2. Adım: Yazılım

Yasal Uyarı: Ben bir programcı değilim. Bu proje için Dr. Frankenstein'ın dijital eşdeğeriyim, bulunan çeşitli kod parçalarından bir şeyler bir araya getiriyorum.

Bu nedenle, RC sinyallerini yorumlama kodunu yapan Duane B'ye en içten teşekkürlerimi sunarım:

rcarduino.blogspot.com/

Ve bir stepper çalıştırma kodunu analog bir gösterge olarak yapan Ardunaut'a:

arduining.com/2012/04/22/arduino-driving-a…

Ve her ikisinden de, kodunuza yaptıklarım için en içten özürlerimi sunarım.

Şimdi bu yoldan çıktı, işte ATTiny'ye yüklenecekler:

#define THROTTLE_SIGNAL_IN 0 // KESİNTİ 0 = DİJİTAL PIN 2 - ekteki kesme numarasını kullanınKesme#tanım THROTTLE_SIGNAL_IN_PIN 2 // KESİNTİ 0 = DİJİTAL PIN 2 - digitalRead'de PIN numarasını kullanın #define NEUTRAL_THROTTLE 1500 // bu mikrosaniye cinsinden süre bir elektrikli RC Car'da nötr gaz kelebeği #define UPPER_THROTTLE 2000 // bu, bir elektrikli RC Car'da maksimum gazın mikrosaniye cinsinden süresidir #define LOWER_THROTTLE 1000 // elektrikli bir RC Car'da nminimum gaz kelebeğinin mikrosaniye cinsinden süresidir #define DEADZONE 50 // bu gaz kelebeği ölü bölgesidir. Toplam ölü bölge bunun iki katı. #include #define ADIMLAR 21 // devir başına adım (315° ile sınırlıdır) Hız göstergesinin maksimum hareketini ayarlamak için bunu değiştirin. #define COIL1 3 // Bobin Pimleri. ATTiny, step için 0, 1, 3, 4 pinlerini kullanır. Pin 2, kesintileri işleyebilen tek pindir, bu nedenle giriş olması gerekir. #define COIL2 4 // Step motor düzgün çalışmıyorsa bunları değiştirmeyi deneyin. #define COIL3 0 #define COIL4 1 // step sınıfının bir örneğini oluşturun: Stepper stepper(STEPS, COIL1, COIL2, COIL3, COIL4); int konum = 0; //Adımlarda konum (0-630)= (0°-315°) int SPEED = 0; float ThrottleInAvg = 0; int MeasurementsToAverage = 60; şamandıra Sıfırlama sayacı = 10; // rölantideyken sıfırlama zamanı int Resetval = 0; volatile int ThrottleIn = LOWER_THROTTLE; uçucu işaretsiz uzun StartPeriod = 0; // kesmede ayarlayın // ayrı bir değişken yerine döngüde nThrottleIn = 0 kullanabilirdik, ancak yeni bir sinyale sahip olduğumuzu belirtmek için bNewThrottleSignal kullanmak // bu ilk örnek için daha açıktır void setup() { // Arduino'ya söyle INT0 (dijital pin 2) HIGH'dan LOW'a veya LOW'dan HIGH'a her değiştiğinde calcInput işlevinin çağrılmasını istiyoruz // bu değişiklikleri yakalamak, giriş darbesinin ne kadar süreceğini hesaplamamıza izin verecek ekInterrupt(THROTTLE_SIGNAL_IN, calcInput, CHANGE); stepper.setSpeed(50); // motor hızını 30 RPM'ye ayarlayın (yaklaşık 360 PPS). stepper.step(ADIMLAR * 2); //Pozisyonu Sıfırla(X adım saat yönünün tersine). } void loop() { Resetval = millis; for (int i = 0; i (NEUTRAL_THROTTLE + DEADZONE) && ThrottleInAvg < UPPER_THROTTLE) { SPEED = map(ThrottleInAvg, (NEUTRAL_THROTTLE + DEADZONE), UPPER_THROTTLE, 0, 255); Sıfırlama = 0; } // Eşlemeyi ters çevir if (ThrottleInAvg LOWER_THROTTLE) { SPEED = map(ThrottleInAvg, LOWER_THROTTLE, (NEUTRAL_THROTTLE - DEADZONE), 255, 0); Sıfırlama = 0; } // Aralık dışı üst else if (ThrottleInAvg > UPPER_THROTTLE) { SPEED = 255; Sıfırlama = 0; } // Aralık dışı düşük else if (ThrottleInAvg Resetcounter) { stepper.step(4); // RC sinyali uzun süre ölü bölgede kalırsa stepper'a kendini yeniden sıfırlamasını söylemeye çalışıyorum. Kodun bu bölümünün gerçekten çalışıp çalışmadığından emin değilim. } } int değer = HIZ; //potansiyometre değerini al (0-1023 aralığı) val = map(val, 0, 255, 0, ADIMLAR * 0.75); // pot aralığını step aralığında eşle. if (abs(val - pos) > 2) { //eğer fark 2 adımdan büyükse. if ((val - konum) > 0) { stepper.step(-1); // bir adım sola git. konum++; } if ((val - konum) < 0) { stepper.step(1); // bir adım sağa git. poz--; } } // gecikme(10); } void calcInput() { // pin yüksekse, bu bir kesme başlangıcıdır if (digitalRead(THROTTLE_SIGNAL_IN_PIN) == HIGH) { // micros kullanarak zamanı alın - kodumuz gerçekten meşgul olduğunda bu yanlış olur, ancak mevcut uygulama için // anlaşılması kolay ve çok iyi çalışıyor StartPeriod = micros(); } else { // eğer pin düşükse, darbenin düşen kenarıdır, bu yüzden şimdi darbe süresini // start time ulStartPeriod'u micros() tarafından döndürülen geçerli zamandan çıkararak hesaplayabiliriz if (StartPeriod) { ThrottleIn = (int)(micros() - StartPeriod); BaşlangıçPeriyodu = 0; } } }

Bir ATTiny85 programlama hakkında daha fazla bilgi için buna bakın:

learn.sparkfun.com/tutorials/tiny-avr-prog…

Adım 3: Donanım

Donanım
Donanım
Donanım
Donanım
Donanım
Donanım

Devreyi oluşturmak için devre şemasına bakın. Nasıl monte edeceğiniz size kalmış, ancak devre kartı prototiplemesi için kullanılan bir parça şerit/perfboard kullanmanızı ve çipi bir sokete monte etmenizi öneririm.

C1 = 100nF

R1 = 10kΩ

Kondansatör, en etkili olması için çipe mümkün olduğunca yakın monte edilmelidir.

Emaye telleri motora lehimlerken son derece dikkatli olun, çünkü motorların üzerindeki terminaller koparak motora giden bobin telini koparmayı sever. Bunu düzeltmek için iyi bir çözüm, telleri lehimlemek ve daha sonra bağlantının üzerine büyük bir 2 parçalı epoksi bloğu koymak, sertleşmesini sağlamak ve sonra telleri birlikte bükmektir. Bu, bireysel terminal bağlantılarındaki stresi azaltır ve kopmalarını durdurmalıdır. Bunu yapmazsanız, garantili olarak en uygun zamanda koparlar.

Başlık pin konektörünü yaparsanız ve pinleri şu şekilde kurarsanız: [Ca1, Cb1, Ca2, Cb2] Ca1'in Bobin A, tel 1 vb. anlamına gelmesiyle. Bu, fişi değiştirerek göstergenin dönüş yönünü değiştirmenize olanak sağlar. etrafında.

Göstergenin sıfır konumunu kalibre etmek için bir uç durdurmaya ihtiyacı olacaktır. Mümkünse iğneyi metalden yapmanızı tavsiye ederim. Bu, bitiş noktasına çarptığında esnemesini durdurur. İğneyi iyi bir konuma getirmenin bir yolu, iğneyi aksa geçici olarak yapıştırmak, modülü çalıştırmak, dinlenmeye bırakmak ve ardından iğneyi dingil üzerine dayayacak şekilde iğneyi çıkarıp dingil üzerine yeniden yapıştırmaktır. Son durak. Bu, iğneyi motorun manyetik dişlisi ile hizalar ve iğnenizin her zaman uç tahdide dayanmasını sağlar.

4. Adım: Son Söz

Umarım bu kısa talimatı beğenmişsinizdir ve faydalı bulmuşsunuzdur. Bunlardan birini inşa ederseniz, bana bildirin!

İyi şanlar!

Önerilen: