Spisu treści:

Działający prędkościomierz RC Car: 4 kroki (ze zdjęciami)
Działający prędkościomierz RC Car: 4 kroki (ze zdjęciami)

Wideo: Działający prędkościomierz RC Car: 4 kroki (ze zdjęciami)

Wideo: Działający prędkościomierz RC Car: 4 kroki (ze zdjęciami)
Wideo: Złomnik: Fort Probe i Ford Szczęśliwicki 2024, Listopad
Anonim
Działający prędkościomierz samochodu RC
Działający prędkościomierz samochodu RC

Jest to krótki projekt, który stworzyłem jako część większej budowy RC lekkiego Land Rovera. Uznałem, że podoba mi się działający prędkościomierz na desce rozdzielczej, ale wiedziałem, że serwo go nie przetnie. Była tylko jedna rozsądna opcja: wdrożyć arduino!

Na początek trochę tła… Nie jestem specjalistą od kodowania ani elektroniki. Nadal myślę o elektryczności w kategoriach przepływu wody i oporniki nieco mnie zadziwiają. To powiedziawszy, jeśli nawet ja byłem w stanie sprawić, by to zadziałało, to ty też powinieneś być w stanie!

LISTA CZĘŚCI:

Mikrokontroler: Użyłem układu ATTiny85, który kosztował około 1 funta każdy.

Programator mikrokontrolera: Aby uzyskać kod na chipie, potrzebujesz sposobu na jego zaprogramowanie. W przypadku zwykłego arduino jest to tylko kabel USB, ale do układu ATTiny potrzebujesz czegoś ekstra. Możesz użyć do tego innego arduino lub, tak jak ja, możesz użyć programatora Tiny AVR od Sparkfun.

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

Poleciłbym to, ponieważ próbowałem je programować różnymi metodami i ta jest najłatwiejsza. Deska jest trochę droga, ale jest dobrą inwestycją, jeśli robisz wiele projektów ATTiny.

8-pinowe gniazdo chipowe: Jeśli umieścisz chip w gnieździe, zamiast lutować go bezpośrednio, możesz sobie pozwolić na błędy w montażu. Mówiąc z doświadczenia - nikt nie chce wylutować chipów, żeby je przeprogramować.

Kondensator: Zastosowano kondensator odsprzęgający 100nF (kod 104). Nie bardzo rozumiem dlaczego, ale przeczytałem, że kondensatory odsprzęgające są ważne w internecie, więc to musi być prawda…

Rezystor: Rezystor 10kΩ służy do ściągania linii do arduino. Znowu kolejna zagadka elektroniki.

Perfboard/Stripboard: Niektóre listwy przypodłogowe, na których można zmontować obwód.

Drut nawojowy: Zwykły drut w osłonie jest zbyt gruby, aby można go było przylutować do silnika. Użycie cienkiego drutu emaliowanego zmniejszy naprężenia na zaciskach silnika i znacznie ułatwi Ci życie.

Servo Wire: Taśma z trzema przewodami zakończonymi 3-pinową wtyczką żeńską JR. Dostałem mój z wypalonego serwa, które „modyfikowałem”.

Silnik krokowy: Użyłem dwubiegunowego silnika krokowego Nidec o średnicy 6 mm. Każdy mały stepper powinien działać, aczkolwiek powinien być mały, ponieważ stepper jest napędzany bezpośrednio z Arduino.

Kołki nagłówka: Nie jest to konieczne, ale jeśli podłączysz swój stepper do 4 kołków nagłówka i podłączysz gniazdo do obwodu, możesz łatwo odłączyć deskę rozdzielczą, aby ułatwić instalację.

Komputer: Aby zaprogramować swoją tablicę, potrzebujesz komputera. Ewentualnie z Arduino IDE. A może kabel USB. Jeśli ma też kabel zasilający, to jeszcze lepiej.

Krok 1: System

Podstawowym zarysem stworzonego przeze mnie systemu była metoda, w której sygnał z modulacją szerokości impulsu (PWM) pochodzący z odbiornika RC jest przetwarzany na przemiatanie silnika krokowego za pomocą mikrokontrolera ATTiny 85 (uC).

Oto zasób dotyczący sygnałów PWM i RC, ale aby to powtórzyć, nie musisz tego dokładnie rozumieć.

en.wikipedia.org/wiki/Servo_control

ATTiny jest moją ulubioną odmianą Arduino, ponieważ jest mały i ma wystarczająco dużo pinów I/O do wykonywania podstawowych czynności, więc idealnie pasuje do małych modeli i projektów RC. Główną wadą ATTiny jest to, że wymaga nieco więcej konfiguracji, aby ją zaprogramować, ale kiedy już ją ustawisz, są tak tanie, że możesz kupić ich stosy do wszelkiego rodzaju projektów.

Rozmiar tarczy prędkościomierza jest zbyt mały, aby mieć motoreduktor ze sprzężeniem zwrotnym, więc aby uzyskać proporcjonalną odpowiedź, należało zastosować silnik krokowy. Silnik krokowy to silnik, który jest poruszany w dyskretnych ilościach (lub krokach…!), co czyni go idealnym do takiego systemu bez sprzężenia zwrotnego. Jedynym zastrzeżeniem jest to, że „kroki” spowodują, że wynikowy ruch będzie szarpany, a nie płynny. Jeśli masz stepper z wystarczającą liczbą kroków na obrót, nie jest to zauważalne, ale z stepperem, którego użyłem w tym projekcie, mającym tylko 20 lub więcej kroków w pełnym obrocie, skok kąta jest dość zły.

System po włączeniu uruchomi stepper do tyłu na dwa obroty, aby wyzerować igłę. Prędkościomierz potrzebuje szpilki spoczynkowej w miejscu, w którym ma znajdować się znak zerowy, w przeciwnym razie po prostu będzie się kręcić w nieskończoność. Następnie mapuje sygnały PWM do przodu i do tyłu na określoną liczbę kroków silnika. Spokojnie, prawda…?

Krok 2: Oprogramowanie

Zastrzeżenie: nie jestem programistą. W tym projekcie jestem cyfrowym odpowiednikiem dr. Frankensteina, montując coś działającego z różnych znalezionych fragmentów kodu.

Tak więc moje najserdeczniejsze podziękowania kieruję do Duane B, który stworzył kod do interpretacji sygnałów RC:

rcarduino.blogspot.com/

I do Ardunaut, który stworzył kod do uruchamiania steppera jako miernika analogowego:

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

I dla obu moje najszczersze przeprosiny za to, co zrobiłem z twoim kodem.

Teraz to na uboczu, oto co przesłać do ATTiny:

#define THROTTLE_SIGNAL_IN 0 // INTERRUPT 0 = CYFROWY PIN 2 - użyj numeru przerwania w attachInterrupt#define THROTTLE_SIGNAL_IN_PIN 2 // PRZERWANIE 0 = CYFROWY PIN 2 - użyj numeru PIN w digitalRead #define NEUTRAL_THROTTLE 1500 // jest to czas trwania w mikrosekundach neutralnej przepustnicy w elektrycznym samochodzie RC #define UPPER_THROTTLE 2000 // jest to czas w mikrosekundach maksymalnego otwarcia przepustnicy w elektrycznym samochodzie RC #define LOWER_THROTTLE 1000 // jest to czas trwania w mikrosekundach minimalnego otwarcia przepustnicy w elektrycznym samochodzie RC #define DEADZONE 50 // to martwa strefa przepustnicy. Całkowita martwa strefa jest dwukrotnie większa. #include #define STEPS 21 // kroków na obrót (ograniczone do 315°) Zmień to, aby dostosować maksymalny skok prędkościomierza. #define COIL1 3 // Kołki cewki. ATTiny wykorzystuje piny 0, 1, 3, 4 dla steppera. Pin 2 jest jedynym pinem, który może obsługiwać przerwania, więc musi być wejściem. #define COIL2 4 // Spróbuj je zmienić, jeśli silnik krokowy nie działa prawidłowo. #define COIL3 0 #define COIL4 1 // utwórz instancję klasy steppera: Stepper stepper(STEPS, COIL1, COIL2, COIL3, COIL4); int poz = 0; //Pozycja w krokach (0-630)= (0°-315°) int SPEED = 0; float ThrottleInAvg = 0; int Pomiary do średniej = 60; pływak licznik resetowania = 10; // czas do zresetowania na biegu jałowym int Resetval = 0; niestabilny int ThrottleIn = LOWER_THROTTLE; volatile unsigned long StartPeriod = 0; // ustaw w przerwaniu // moglibyśmy użyć nThrottleIn = 0 w pętli zamiast oddzielnej zmiennej, ale użycie bNewThrottleSignal do wskazania, że mamy nowy sygnał // jest jaśniejsze w tym pierwszym przykładzie void setup() { // powiedz Arduino chcemy, aby funkcja calcInput była wywoływana za każdym razem, gdy INT0 (pin cyfrowy 2) zmieni się z HIGH na LOW lub LOW na HIGH // przechwycenie tych zmian pozwoli nam obliczyć, jak długo impuls wejściowy jest attachInterrupt(THROTTLE_SIGNAL_IN, calcInput, CHANGE); stepper.setSpeed(50); // ustaw prędkość silnika na 30 obr./min (ok. 360 PPS). stepper.step(KROKI * 2); //Resetuj pozycję (X kroków w kierunku przeciwnym do ruchu wskazówek zegara). } void loop() { Resetval = milis; for (int i = 0; i (NEUTRAL_THROTTLE + DEADZONE) && ThrottleInAvg < UPPER_THROTTLE) { SPEED = map(ThrottleInAvg, (NEUTRAL_THROTTLE + DEADZONE), UPPER_THROTTLE, 0, 255); Resetowanie = 0; } // Mapowanie wsteczne else if (ThrottleInAvg LOWER_THROTTLE) { SPEED = map(ThrottleInAvg, LOWER_THROTTLE, (NEUTRAL_THROTTLE - DEADZONE), 255, 0); Resetowanie = 0; } // Poza górną granicą zakresu if (ThrottleInAvg > UPPER_THROTTLE) { SPEED = 255; Resetowanie = 0; } // Poza zakresem niższy else if (ThrottleInAvg Resetcounter) { stepper.step(4); // Próbuję powiedzieć stepperowi, aby ponownie się zresetował, jeśli sygnał RC jest w martwej strefie przez długi czas. Nie jestem pewien, czy ta część kodu rzeczywiście działa. } } int val = SZYBKOŚĆ; //pobierz wartość potencjometru (zakres 0-1023) val = map(val, 0, 255, 0, STEPS * 0,75); // mapuj zakres pot w zakresie steppera. if (abs(val - poz) > 2) { //jeśli różnica jest większa niż 2 kroki. if ((val - poz) > 0) { stepper.step(-1); // przesuń się o jeden krok w lewo. poz++; } if ((val - poz) < 0) { stepper.step(1); // przesuń się o jeden krok w prawo. poz--; } } // opóźnienie(10); } void calcInput() { // jeśli pin jest wysoki, jest to początek przerwania if (digitalRead(THROTTLE_SIGNAL_IN_PIN) == HIGH) { // uzyskaj czas używając micros - gdy nasz kod będzie naprawdę zajęty, stanie się to niedokładne, ale dla bieżącej aplikacji jest // łatwy do zrozumienia i działa bardzo dobrze StartPeriod = micros(); } else { // jeśli pin jest niski, jest to opadająca krawędź impulsu, więc teraz możemy obliczyć czas trwania impulsu, // odejmując czas początkowy ulStartPeriod od bieżącego czasu zwracanego przez micros() if (StartPeriod) { ThrottleIn = (int)(mikros() - Okres początkowy); Okres początkowy = 0; } } }

Zapoznaj się z tym, aby uzyskać więcej informacji na temat programowania ATTiny85:

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

Krok 3: Sprzęt

Sprzęt
Sprzęt
Sprzęt
Sprzęt
Sprzęt
Sprzęt

Zapoznaj się ze schematem obwodu, aby zbudować obwód. Jak to zmontujesz, zależy od Ciebie, ale sugerowałbym użycie kawałka stripboardu/płytki perforowanej używanej do prototypowania płytek drukowanych i zamontowanie chipa w gnieździe.

C1 = 100nF

R1 = 10kΩ

Kondensator powinien być zamontowany jak najbliżej chipa, aby był jak najbardziej efektywny.

Podczas lutowania emaliowanych przewodów do silnika należy zachować szczególną ostrożność, ponieważ zaciski na silnikach lubią odrywać się i odcinać przewód cewki do silnika. Aby temu zaradzić, dobrym rozwiązaniem jest przylutowanie przewodów, a następnie nałożenie dużej kropli dwuskładnikowej żywicy epoksydowej na złącze, pozostawienie do utwardzenia, a następnie skręcenie przewodów razem. Zmniejsza to naprężenia na poszczególnych złączach końcowych i powinno zapobiegać ich odrywaniu. Jeśli tego nie zrobisz, oderwą się w najmniej dogodnym momencie, gwarantowane.

Jeśli wykonasz złącze kołków rozgałęźnych i ustawisz piny w ten sposób: [Ca1, Cb1, Ca2, Cb2] z Ca1 oznaczającym cewkę A, przewód 1 itd. Pozwala to na zmianę kierunku obrotu miernika poprzez zamianę wtyczki na około.

Miernik będzie potrzebował ogranicznika, aby skalibrować pozycję zerową. Zalecam wykonanie igły z metalu, jeśli to możliwe. To zapobiega wyginaniu się, gdy uderza w ogranicznik. Sposobem na ustawienie igły w dobrej pozycji jest tymczasowe przyklejenie igły do osi, zasilenie modułu, pozostawienie go w spoczynku, a następnie wyjęcie i ponowne przyklejenie igły na osi, z igłą opartą o ogranicznik. To wyrównuje igłę z magnetycznym uzębieniem silnika i zapewnia, że igła zawsze powinna opierać się o ogranicznik.

Krok 4: Epilog

Mam nadzieję, że spodobał ci się ten krótki instruktaż i okazał się przydatny. Jeśli zbudujesz jeden z nich, daj mi znać!

Powodzenia!

Zalecana: