Talaan ng mga Nilalaman:

Paggawa ng RC Car Speedometer: 4 na Hakbang (na may Mga Larawan)
Paggawa ng RC Car Speedometer: 4 na Hakbang (na may Mga Larawan)

Video: Paggawa ng RC Car Speedometer: 4 na Hakbang (na may Mga Larawan)

Video: Paggawa ng RC Car Speedometer: 4 na Hakbang (na may Mga Larawan)
Video: Matanglawin: Vehicular toys from recycled materials 2024, Nobyembre
Anonim
Paggawa ng RC Car Speedometer
Paggawa ng RC Car Speedometer

Ito ay isang maikling proyekto na nilikha ko bilang bahagi ng isang mas malaking RC build ng isang Lightweight Land Rover. Napagpasyahan kong guni-guni ko ang pagkakaroon ng gumaganang speedometer sa dashboard, ngunit alam ko na hindi ito puputukan ng isang servo. Mayroon lamang isang makatuwirang pagpipilian: i-deploy ang arduino!

Ang kaunting background upang magsimula sa … Hindi ako isang coding o electronics person. Iniisip ko pa rin ang kuryente sa mga tuntunin ng daloy ng tubig at medyo nasisiksik ng mga resistor. Sinabi iyan, kung kahit na nagawa ko ang gawaing ito, sa gayon dapat mo ring magawa!

LIST NG BAHIN:

Microcontroller: Gumamit ako ng isang chip na ATTiny85, na nagkakahalaga ng halos £ 1 bawat isa.

Programmer ng Microcontroller: Upang makuha ang code sa chip, kailangan mo ng isang paraan upang mai-program ito. Sa regular na arduino ito ay isang USB cable lamang, ngunit para sa ATTiny chip, kailangan mo ng isang bagay na labis. Maaari kang gumamit ng isa pang arduino upang gawin ito o, tulad ng sa akin, maaari kang gumamit ng isang maliit na programer AVR mula sa Sparkfun.

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

Inirerekumenda ko ito, dahil sinubukan kong i-program ang mga ito sa iba't ibang mga pamamaraan at ang isang ito ang pinakamadali. Ang board ay medyo mahal, ngunit isang mahusay na pamumuhunan kung gumawa ka ng maraming mga proyekto ng ATTiny.

8 Pin Chip Socket: Kung inilagay mo ang maliit na tilad sa isang socket kaysa sa direktang paghihinang nito, maaari mong bayaran ang iyong sarili ng ilang mga pagkakamali sa pagpupulong. Sinasalita mula sa karanasan - walang nagnanais na masira ang mga chips upang mai-reprogram ang mga ito.

Capacitor: Ang isang decoupling capacitor na 100nF (code 104) ay ginamit. Hindi ko maintindihan kung bakit, ngunit nabasa ko na ang pag-decoupling ng mga capacitor ay mahalaga sa internet, kaya't dapat totoo ito …

Resistor: Ang isang 10kΩ risistor ay ginagamit upang hilahin pababa ang linya sa arduino. Muli, isa pang misteryo ng electronics.

Perfboard / Stripboard: Ang ilang baseboard kung saan tipunin ang iyong circuit.

Winding Wire: Ang regular na sheathed wire ay masyadong makapal upang maghinang papunta sa motor. Ang paggamit ng fine enamelled wire ay magbabawas ng stress sa mga motor terminal at gagawing mas madali ang iyong buhay.

Servo Wire: Isang tatlong wire ribbon na nagtatapos sa isang 3-pin JR female plug. Nakuha ko ang akin mula sa isang nasunog na servo na 'binabago' ko.

Stepper Motor: Gumamit ako ng isang 6mm bipolar Nidec stepper motor. Anumang maliit na stepper ay dapat na gumana, kahit na panatilihin silang maliit, dahil ang stepper ay hinihimok nang direkta mula sa Arduino.

Mga Header Pins: Hindi mahalaga, ngunit kung i-wire mo ang iyong stepper sa 4 na mga header pin at maglagay ng isang socket sa iyong circuit, maaari mong madaling i-unplug ang iyong dashboard para sa kadalian ng pag-install.

Computer: Upang mai-program ang iyong board, kakailanganin mo ng isang computer. Posibleng sa Arduino IDE. At marahil isang USB cable. Kung mayroon din itong isang cable na kuryente, mas mabuti pa.

Hakbang 1: Ang Sistema

Ang pangunahing balangkas ng sistemang aking nilikha ay isang pamamaraan kung saan ang signal ng Pulse Width Modulation (PWM) na nagmumula sa RC receiver ay ginawang isang stepper motor sweep sa pamamagitan ng isang ATTiny 85 microcontroller (uC).

Narito ang isang mapagkukunan sa mga signal ng PWM at RC, ngunit upang makopya ito hindi mo mahigpit na kailangang maunawaan ito.

en.wikipedia.org/wiki/Servo_control

Ang ATTiny ay ang aking paboritong lasa ng Arduino dahil maliit ito na may sapat pa ring I / O na mga pin upang gumawa ng mga pangunahing bagay, kaya ganap na umaangkop sa maliliit na modelo at mga proyekto sa RC. Ang pangunahing kabiguan ng ATTiny ay nangangailangan ito ng kaunting pag-set up upang mai-program ang isa, ngunit sa sandaling nakuha mo na ang pag-set up nila ay napakamura na maaari kang bumili ng mga stack ng mga ito para sa lahat ng uri ng mga proyekto.

Ang laki ng speedometer dial ay masyadong maliit upang magkaroon ng geared motor na may feedback, kaya upang magkaroon ng proporsyonal na tugon ang isang stepper motor na dapat gamitin. Ang isang stepper motor ay isang motor na inililipat sa mga discrete na halaga (o mga hakbang …!), Na ginagawang perpekto para sa isang sistemang walang feedback tulad nito. Ang nag-iingat lamang ay ang mga 'hakbang' ay magdudulot sa nagresultang kilusan na maging maalab na taliwas sa makinis. Kung nakakakuha ka ng isang stepper na may sapat na mga hakbang sa bawat pag-ikot, hindi ito kapansin-pansin, ngunit sa stepper na ginamit ko sa proyektong ito na mayroon lamang 20 o higit pang mga hakbang sa isang buong pag-ikot, ang anggulo na tumalon ay medyo masama.

Ang system, sa power-up, tatakbo ang stepper paatras para sa dalawang rebolusyon, upang ma-zero ang karayom. Ang speedometer ay nangangailangan ng isang resting pin kung saan mo nais na maging zero mark, o kung hindi man umiikot ito magpakailanman. Pagkatapos ay mapa nito ang pasulong at baligtarin ang mga signal ng PWM sa isang hanay na bilang ng mga hakbang ng motor. Madali, tama…?

Hakbang 2: Ang Software

Pagwawaksi: Hindi ako isang programmer. Para sa proyektong ito, ako ang katumbas na digital ni Dr. Frankenstein, na nagtitipon ng isang bagay na nagtatrabaho sa iba't ibang mga nahanap na piraso ng code.

Kaya, ang aking pinakamasayang pasasalamat ay napupunta sa Duane B, na gumawa ng code para sa pagbibigay kahulugan sa mga RC signal:

rcarduino.blogspot.com/

At kay Ardunaut, na gumawa ng code para sa pagpapatakbo ng isang stepper bilang isang gauge ng analogue:

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

At sa pareho, ang aking taos-puso na humihingi ng paumanhin para sa kung ano ang ginawa ko sa iyong code.

Ngayon wala na sa daan, narito kung ano ang dapat i-upload sa ATTiny:

#define THROTTLE_SIGNAL_IN 0 // INTERRUPT 0 = DIGITAL PIN 2 - gamitin ang makagambala na numero sa attachInterrupt # kahulugan THROTTLE_SIGNAL_IN_PIN 2 // INTERRUPT 0 = DIGITAL PIN 2 - gamitin ang numero ng PIN sa digitalRead #define NEUTRAL_THROTTLE 1500 // ito ay ang tagal ng walang kinikilingan na throttle sa isang de-kuryenteng RC Car #define UPPER_THROTTLE 2000 // ito ang tagal ng microseconds ng maximum na throttle sa isang de-kuryenteng RC Car #define LOWER_THROTTLE 1000 // ito ang tagal sa mga microsecond ng hindi pinakamababang throttle sa isang electric RC Car #define DEADZONE 50 // ito ang throttle deadzone. Ang kabuuang deadzone ay doble ito. #include #define STEPS 21 // mga hakbang sa bawat rebolusyon (limitado sa 315 °) Palitan ito upang ayusin ang maximum na paglalakbay ng speedometer. #define COIL1 3 // Coil Pins. Gumagamit ang ATTiny ng mga pin na 0, 1, 3, 4 para sa stepper. Ang Pin 2 lamang ang pin na maaaring hawakan ang mga nakakagambala kaya kailangan itong maging input. #define COIL2 4 // Subukang baguhin ang mga ito sa paligid kung ang stepper motor ay hindi tumatakbo nang maayos. #define COIL3 0 #define COIL4 1 // lumikha ng isang halimbawa ng stepper class: Stepper stepper (STEPS, COIL1, COIL2, COIL3, COIL4); int pos = 0; // Position in steps (0-630) = (0 ° -315 °) int SPEED = 0; float ThrottleInAvg = 0; int Mga SukatToAverage = 60; float Resetcounter = 10; // time to reset habang nasa idle throttle int Resetval = 0; pabagu-bago int ThrottleIn = LOWER_THROTTLE; pabagu-bago ng unsigned mahabang StartPeriod = 0; // itakda sa makagambala // maaari naming gamitin ang nThrottleIn = 0 sa loop sa halip na isang hiwalay na variable, ngunit ang paggamit ng bNewThrottleSignal upang ipahiwatig na mayroon kaming isang bagong signal // ay mas malinaw para sa unang halimbawang ito na walang bisa na pag-set up () {// sabihin sa Arduino nais naming tawagan ang function na Input0 sa tuwing ang mga pagbabago ng INT0 (digital pin 2) mula sa TAAS hanggang sa LABI o HABANG // ay hahayaan kaming makalkula kung gaano katagal ang pag-input ng pulso ay nakakabit stepper.setSpeed (50); // itakda ang bilis ng motor sa 30 RPM (360 PPS aprox.). stepper.step (STEPS * 2); // Reset Position (X hakbang na counter-clockwise). } void loop () {Resetval = millis; para sa (int i = 0; i (NEUTRAL_THROTTLE + DEADZONE) && ThrottleInAvg <UPPER_THROTTLE) {SPEED = mapa (ThrottleInAvg, (NEUTRAL_THROTTLE + DEADZONE), UPPER_THROTTLE, 0, 255); Resetval = 0; } // Reverse mapping else if (ThrottleInAvg LOWER_THROTTLE) {SPEED = map (ThrottleInAvg, LOWER_THROTTLE, (NEUTRAL_THROTTLE - DEADZONE), 255, 0); Resetval = 0; } // Out of range upper else kung (ThrottleInAvg> UPPER_THROTTLE) {SPEED = 255; Resetval = 0; } // Wala sa saklaw na mas mababa pa kung (ThrottleInAvg Resetcounter) {stepper.step (4); // Sinusubukan kong sabihin sa stepper na muling i-reset ang sarili nito kung ang signal ng RC ay nasa deadzone nang mahabang panahon. Hindi sigurado kung gumagana ang bahaging ito ng code. }} int val = SPEED; // kunin ang halagang potentiometer (saklaw 0-1023) val = mapa (val, 0, 255, 0, STEPS * 0.75); // saklaw ng pot pot sa saklaw ng stepper. kung (abs (val - pos)> 2) {// kung ang pagkakaiba ay mas malaki sa 2 mga hakbang. kung ((val - pos)> 0) {stepper.step (-1); // ilipat ang isang hakbang sa kaliwa. pos ++; } kung ((val - pos) <0) {stepper.step (1); // ilipat ang isang hakbang sa kanan. pos--; }} // pagkaantala (10); } void calcInput () {// kung ang pin ay mataas, ito ang simula ng isang nakakagambala kung (digitalRead (THROTTLE_SIGNAL_IN_PIN) == TAAS) {// makakuha ng oras gamit ang micros - kapag talagang naging abala ang aming code ay magiging tumpak ito, ngunit para sa kasalukuyang aplikasyon nito // madaling maunawaan at gumagana nang mahusay StartPeriod = micros (); } iba pa {// kung ang pin ay mababa, ang bumabagsak na gilid ng pulso kaya maaari naming makalkula ang tagal ng pulso sa pamamagitan ng pagbawas sa // start time ulStartPeriod mula sa kasalukuyang oras na ibinalik ng micros () kung (StartPeriod) {ThrottleIn = (int) (micros () - StartPeriod); StartPeriod = 0; }}}

Sumangguni dito para sa karagdagang impormasyon sa pag-program ng isang ATTiny85:

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

Hakbang 3: Ang Hardware

Ang Hardware
Ang Hardware
Ang Hardware
Ang Hardware
Ang Hardware
Ang Hardware

Sumangguni sa circuit diagram para sa pagbuo ng circuit. Nakasalalay sa iyo kung paano mo tipunin, ngunit iminumungkahi kong gumamit ng kaunting stripboard / perfboard na ginamit para sa circuit board prototyping, at i-mount ang maliit na tilad sa isang socket.

C1 = 100nF

R1 = 10kΩ

Ang capacitor ay dapat na mai-mount nang malapit sa maliit na tilad hangga't maaari upang maging pinaka-epektibo.

Kapag ang paghihinang ng enamel na mga wire sa motor, mag-ingat nang labis, dahil ang mga terminal sa mga motor ay nais na mag-snap at putulin ang coil wire sa motor. Upang malunasan ito, isang mahusay na solusyon ay ang paghihinang ng mga wire, at pagkatapos ay ilagay ang isang malaking bloke ng 2-part epoxy sa magkasanib na, hayaan itong pagalingin, pagkatapos ay i-twist ang mga wire. Binabawasan nito ang stress sa mga indibidwal na magkasanib na terminal at dapat itong ihinto ang kanilang paggalaw. Kung hindi mo ito gagawin, mag-snap sila nang hindi bababa sa maginhawang oras, garantisado.

Kung gagawin mo ang konektor ng header pin, at i-set up ang mga pin nang ganito: [Ca1, Cb1, Ca2, Cb2] na nakatayo ang Ca1 para sa Coil A, wire 1 atbp Pinapayagan kang baguhin ang paikot na direksyon ng gauge sa pamamagitan ng pagpapalit ng plug sa paligid

Ang gauge ay mangangailangan ng isang endstop upang i-calibrate ang zero na posisyon laban. Inirerekumenda kong gawin ang karayom sa metal kung maaari. Ititigil nito ang pagbaluktot kapag naabot nito ang endstop. Ang isang paraan upang makuha ang karayom sa isang mabuting posisyon ay pansamantalang idikit ang karayom sa ehe, palakasin ang module, hayaan itong magpahinga, at pagkatapos ay alisin at idikit muli ang karayom sa ehe, na nakasalalay ang karayom laban sa pagtigil. Iniayos nito ang karayom sa magnetikong cogging ng motor, at tinitiyak na ang iyong karayom ay dapat palaging magpahinga laban sa endstop.

Hakbang 4: Epilog

Inaasahan kong nasiyahan ka sa maikling turo na ito, at nalaman mong kapaki-pakinabang ito. Kung bumuo ka ng isa sa mga ito, ipaalam sa akin!

Good luck!

Inirerekumendang: