Innehållsförteckning:

Arbetande RC -bilhastighetsmätare: 4 steg (med bilder)
Arbetande RC -bilhastighetsmätare: 4 steg (med bilder)

Video: Arbetande RC -bilhastighetsmätare: 4 steg (med bilder)

Video: Arbetande RC -bilhastighetsmätare: 4 steg (med bilder)
Video: Magdalena Andersson tvärvänder när hon inser missen 2024, November
Anonim
Arbetande RC bilhastighetsmätare
Arbetande RC bilhastighetsmätare

Detta är ett kort projekt som jag skapade som en del av en större RC -konstruktion av en lätt Land Rover. Jag bestämde mig för att jag ville ha en arbetshastighetsmätare i instrumentbrädan, men jag visste att en servo inte skulle klippa av den. Det fanns bara ett rimligt alternativ: distribuera arduino!

Lite bakgrund till att börja med … Jag är ingen kodande eller elektronisk person. Jag tänker fortfarande på elektricitet när det gäller vattenflöde och är lite mystifierad av motstånd. Som sagt, om även jag kunde få det här att fungera, så borde du också kunna det!

DELSLISTA:

Mikrokontroller: Jag använde ett ATTiny85 -chip, som kostade cirka £ 1 styck.

Mikrokontroller programmerare: För att få koden på chipet behöver du ett sätt att programmera den. Med vanlig arduino är detta bara en USB -kabel, men för ATTiny -chipet behöver du något extra. Du kan använda en annan arduino för att göra detta eller, som jag, kan du använda en liten AVR -programmerare från Sparkfun.

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

Jag skulle rekommendera detta, eftersom jag har försökt programmera dem med olika metoder och den här är den enklaste. Styrelsen är lite dyr, men en bra investering om du gör många ATTiny -projekt.

8 Pin Chip Socket: Om du lägger chipet i ett uttag istället för att lödda det direkt, har du råd med dig själv några misstag vid montering. Talat av erfarenhet - ingen vill avlasta chips för att omprogrammera dem.

Kondensator: En avkopplingskondensator på 100nF (kod 104) används. Jag förstår inte riktigt varför, men jag läste att avkopplingskondensatorer är viktiga på internet, så det måste vara sant …

Motstånd: Ett 10kΩ motstånd används för att dra ner linjen i arduino. Återigen, ännu ett mysterium av elektronik.

Perfboard/Stripboard: Någon baseboard för att montera din krets.

Lindningstråd: Vanlig mantlad tråd är för tjock för att lödas på motorn. Att använda fin emaljerad tråd minskar belastningen på motorterminalerna och gör ditt liv mycket enklare.

Servotråd: Ett band med tre trådar som slutar i en 3-polig JR-honkontakt. Jag fick min från en utbränd servo som jag "modifierade".

Stegmotor: Jag använde en 6 mm bipolär Nidec -stegmotor. Varje liten steg ska fungera, även om den hålls liten, eftersom steget körs direkt från Arduino.

Sidhuvudstiften: Inte nödvändigt, men om du kopplar din stegmaskin till 4 huvudstiften och sätter ett uttag på din krets kan du enkelt koppla bort instrumentbrädan för enkel installation.

Dator: För att programmera ditt kort behöver du en dator. Möjligen med Arduino IDE. Och kanske en USB -kabel. Om den har en strömkabel också, då ännu bättre.

Steg 1: Systemet

Grundkonturen för systemet jag skapade var en metod där PWM -signalen (PWM) från RC -mottagaren omvandlas till en stegmotorsvep via en ATTiny 85 mikrokontroller (uC).

Här är en resurs om PWM -signaler och RC, men för att replikera detta behöver du inte riktigt förstå det.

en.wikipedia.org/wiki/Servo_control

ATTiny är min favorit smak av Arduino eftersom den är liten med tillräckligt många I/O -stift för att göra grundläggande saker, så passar perfekt in i små modeller och RC -projekt. Den främsta nackdelen med ATTiny är att den kräver lite mer installation för att programmera en, men när du har konfigurerat den är de så billiga att du kan köpa staplar av dem för alla slags projekt.

Storleken på hastighetsmätarvredet är för liten för att ha en växelmotor med återkoppling, så för att få ett proportionellt svar måste en stegmotor användas. En stegmotor är en motor som flyttas i diskreta mängder (eller steg …!), Vilket gör den idealisk för ett system utan återkoppling som detta. Den enda förbehållet är att "stegen" kommer att få den resulterande rörelsen att bli ryckig i motsats till jämn. Om du får en stegmaskin med tillräckligt många steg per rotation är det inte märkbart, men med steget som jag använde i detta projekt har bara 20 eller så steg i en full rotation, är vinkelhoppet ganska dåligt.

Systemet, vid uppstart, kommer att köra steget bakåt i två varv för att nollställa nålen. Hastighetsmätaren behöver en vilopinne där du vill att nollmärket ska vara, annars snurrar det bara för alltid. Sedan kartlägger den framåt och bakåt PWM -signalerna till ett bestämt antal steg i motorn. Lätt, eller hur?

Steg 2: Programvaran

Friskrivningsklausul: Jag är ingen programmerare. För detta projekt är jag den digitala ekvivalenten till Dr. Frankenstein, som samlar ihop något som fungerar utifrån olika hittade kodbitar.

Så jag vill tacka Duane B, som gjorde koden för att tolka RC -signaler:

rcarduino.blogspot.com/

Och till Ardunaut, som skapade koden för att köra en stepper som en analog mätare:

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

Och till båda, mina mest uppriktiga ursäkt för vad jag gjorde med din kod.

Nu är det ur vägen, här är vad du ska ladda upp till ATTiny:

#define THROTTLE_SIGNAL_IN 0 // INTERRUPT 0 = DIGITAL PIN 2 - använd interrupt -numret i attachInterrupt #definiera THROTTLE_SIGNAL_IN_PIN 2 // INTERRUPT 0 = DIGITAL PIN 2 - använd PIN -numret i digitalRead #define NEUTRAL_THROTTLE 1500 // av neutral gas på en elektrisk RC -bil #define UPPER_THROTTLE 2000 // detta är varaktigheten i mikrosekunder för maximal gas på en elektrisk RC -bil #define LOWER_THROTTLE 1000 // detta är varaktigheten i mikrosekunder av nminimum gas på en elektrisk RC -bil #define DEADZONE 50 // detta är gasreglage. Den totala dödzonen är dubbelt så stor. #include #define STEG 21 // steg per varv (begränsat till 315 °) Ändra detta för att justera hastighetsmätarens maximala rörelse. #define COIL1 3 // Coil Pins. ATTiny använder stiften 0, 1, 3, 4 för steget. Pin 2 är den enda pin som kan hantera avbrott så det måste vara ingången. #define COIL2 4 // Försök ändra dessa om stegmotorn inte fungerar som den ska. #define COIL3 0 #define COIL4 1 // skapa en instans av stegklassen: Stepper stepper (STEPS, COIL1, COIL2, COIL3, COIL4); int pos = 0; // Position i steg (0-630) = (0 ° -315 °) int SPEED = 0; float ThrottleInAvg = 0; int MeasurementsToAverage = 60; float Resetcounter = 10; // tid att återställa när tomgångsreglaget intill Resetval = 0; volatile int ThrottleIn = LOWER_THROTTLE; flyktig osignerad lång StartPeriod = 0; // inställd i avbrottet // vi kan använda nThrottleIn = 0 i loop istället för en separat variabel, men med hjälp av bNewThrottleSignal för att indikera att vi har en ny signal // är tydligare för detta första exempel tomrumsinställning () {// berätta för Arduino vi vill att funktionen calcInput ska anropas när INT0 (digital pin 2) ändras från HIGH till LOW eller LOW till HIGH // fånga dessa ändringar gör att vi kan beräkna hur lång ingångspulsen är attachInterrupt (THROTTLE_SIGNAL_IN, calcInput, CHANGE); stepper.setSpeed (50); // ställ in motorvarvtalet till 30 varv/ min (360 PPS ungefär). steg. steg (STEG * 2); // Återställ position (X steg moturs). } void loop () {Återställning = millis; för (int i = 0; i (NEUTRAL_THROTTLE + DEADZONE) && ThrottleInAvg <UPPER_THROTTLE) {SPEED = map (ThrottleInAvg, (NEUTRAL_THROTTLE + DEADZONE), UPPER_THROTTLE, 0, 255); Återställning = 0; } // Omvänd kartläggning annars om (ThrottleInAvg LOWER_THROTTLE) {SPEED = map (ThrottleInAvg, LOWER_THROTTLE, (NEUTRAL_THROTTLE - DEADZONE), 255, 0); Återställning = 0; } // Out of range upper else if (ThrottleInAvg> UPPER_THROTTLE) {SPEED = 255; Återställning = 0; } // Utanför intervallet lägre annars om (ThrottleInAvg Resetcounter) {stepper.step (4); // Jag försöker be stegern att återställa sig själv om RC-signalen är i dödzonen länge. Vet inte om den här delen av koden verkligen fungerar. }} int val = SPEED; // få potentiometervärdet (intervall 0-1023) val = map (val, 0, 255, 0, STEG * 0,75); // karta grytintervall i stegintervallet. if (abs (val - pos)> 2) {// om skillnaden är större än 2 steg. om ((val - pos)> 0) {stepper.step (-1); // flytta ett steg till vänster. pos ++; } if ((val - pos) <0) {stepper.step (1); // flytta ett steg till höger. pos--; }} // fördröjning (10); } void calcInput () {// om stiftet är högt, det är början på ett avbrott om (digitalRead (THROTTLE_SIGNAL_IN_PIN) == HIGH) {// få tid att använda mikron - när vår kod blir riktigt upptagen blir det felaktigt, men för den aktuella applikationen är den // lätt att förstå och fungerar mycket bra StartPeriod = micros (); } annat {// om stiftet är lågt, det är pulsens fallande kant så nu kan vi beräkna pulslängden genom att subtrahera // starttiden ulStartPeriod från den aktuella tiden som returneras av mikro () om (StartPeriod) {ThrottleIn = (int) (micros () - StartPeriod); StartPeriod = 0; }}}

Se detta för mer information om programmering av en ATTiny85:

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

Steg 3: Hårdvaran

Hårdvaran
Hårdvaran
Hårdvaran
Hårdvaran
Hårdvaran
Hårdvaran

Se kretsschemat för att bygga kretsen. Hur du monterar det är upp till dig, men jag föreslår att du använder lite bandplatta/perfboard som används för kretskortsprototyp och monterar chipet i ett uttag.

C1 = 100nF

R1 = 10kΩ

Kondensatorn bör monteras så nära chipet som möjligt för att vara mest effektiv.

Var mycket försiktig vid lödning av de emaljerade ledningarna till motorn, eftersom terminalerna på motorerna gillar att knäppa av och bryta spoltråden till motorn. För att åtgärda detta är en bra lösning att lödda trådarna och sedan lägga en stor kloss med 2-delad epoxi över fogen, låt den härda och vrid ihop trådarna. Detta minskar belastningen på enskilda terminalfogar och bör hindra dem från att lossna. Om du inte gör detta kommer de att snäppa av vid minst bekväm tidpunkt, garanterat.

Om du gör huvudkontakten och ställer in stiften så här: [Ca1, Cb1, Ca2, Cb2] med Ca1 står för spole A, tråd 1 etc. Detta gör att du kan ändra mätarens rotationsriktning genom att byta ut kontakten runt omkring.

Mätaren behöver ett ändstopp för att kalibrera nolläget mot. Jag skulle rekommendera att göra nålen av metall om möjligt. Detta stoppar böjningen när den träffar ändstoppet. Ett sätt att få nålen i ett bra läge är att tillfälligt limma nålen till axeln, sätta på modulen, låta den vila och sedan ta bort och limma om nålen på axeln, med nålen vilande mot ändstopp. Detta anpassar nålen till motorns magnetiska kuggning och säkerställer att din nål alltid ska vila mot ändstoppet.

Steg 4: Epilog

Förhoppningsvis har du gillat denna korta instruerbara och funnit den användbar. Om du bygger en av dessa, låt mig veta!

Lycka till!

Rekommenderad: