Мазмуну:

Жумушчу RC Car Speedometer: 4 кадам (Сүрөттөр менен)
Жумушчу RC Car Speedometer: 4 кадам (Сүрөттөр менен)

Video: Жумушчу RC Car Speedometer: 4 кадам (Сүрөттөр менен)

Video: Жумушчу RC Car Speedometer: 4 кадам (Сүрөттөр менен)
Video: Обзор MAN TGS 28.400 рефрижератор на 40 европаллет двухъярусная погрузка на допельштоки 2024, Сентябрь
Anonim
RC Car Speedometer иштеп жатат
RC Car Speedometer иштеп жатат

Бул мен Lightweight Land Roverдин чоңураак RC түзүмүнүн бир бөлүгү катары түзгөн кыска долбоор. Мен тактада иштеп жаткан спидометрдин болушун кыялданчумун, бирок мен сервонун аны кеспей турганын билчүмүн. Бир гана акылга сыярлык вариант бар болчу: arduino орнотуу!

Баштоо үчүн бир аз маалымат … Мен коддоочу же электроника адамы эмесмин. Мен дагы эле электр энергиясын суунун агымы боюнча ойлоном жана резисторлор бир аз мистикаланат. Айтор, эгер мен бул ишти жасай алсам, анда сен да ошондой кыла аласың!

БӨЛҮКТӨР ТИЗМЕСИ:

Микроконтроллер: Мен ATTiny85 чипин колдондум, анын баасы ар бири 1 фунт.

Микроконтроллер программисти: Чипке кодду алуу үчүн аны программалоонун жолу керек. Кадимки ардуино менен бул жөн гана USB кабели, бирок ATTiny чипи үчүн сизге кошумча нерсе керек. Муну аткаруу үчүн башка ардуинону колдонсоңуз болот же мага окшоп Sparkfunдун кичинекей AVR программистин колдонсоңуз болот.

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

Мен муну сунуштайт элем, анткени мен аларды ар кандай ыкмалар менен программалоого аракет кылдым жана бул эң оңой. Такта бир аз кымбат, бирок эгер сиз ATTiny долбоорлорун көп жасасаңыз жакшы инвестиция.

8 Pin Chip Socket: Эгерде сиз микросхеманы түздөн -түз туташтыруунун ордуна, розеткага салып койсоңуз, анда монтаждоодо ката кетире аласыз. Тажрыйбадан алынган - эч ким аларды кайра программалоо үчүн чиптерди тазалоону каалабайт.

Конденсатор: 100nF ажыратуучу конденсатор колдонулат (код 104). Эмнеге экенин такыр түшүнбөйм, бирок интернетте ажыратуучу конденсаторлор маанилүү экенин окудум, ошондуктан бул чындык болушу керек …

Резистор: 10kΩ резистор линияны ардуиного түшүрүү үчүн колдонулат. Дагы, электрониканын дагы бир сыры.

Perfboard/Stripboard: Сиздин схемаңызды чогулта турган кээ бир такта.

Орозо зымы: Кадимки капталган зым моторго ширетүү үчүн өтө коюу. Жакшы эмальданган зымды колдонуу мотор терминалдарындагы стрессти азайтып, жашооңузду бир топ жеңилдетет.

Servo Wire: 3 зымдуу JR аялдын сайгычында бүткөн үч зым лента. Мен өзүмдү "өзгөртүп" жаткан күйүп кеткен серводон алдым.

Stepper мотору: Мен 6мм биполярдуу Nidec тепкич моторун колдондум. Ар бир кичинекей тепкич кичине болсо да иштеши керек, анткени тепкич түз Ардуинодон айдалып жатат.

Header Pins: Маанилүү эмес, бирок эгер сиз степпериңизди 4 баш казыкка туташтырсаңыз жана схемаңызга розетка койсоңуз, орнотуу оңой болушу үчүн панелиңизди оңой эле сууруп салсаңыз болот.

Компьютер: Тактаңызды программалоо үчүн сизге компьютер керек. Балким, Arduino IDE менен. Жана, балким, USB кабели. Эгерде анын электр кабели болсо, анда андан да жакшы.

1 -кадам: Система

Мен түзгөн системанын негизги схемасы RC кабылдагычтан келген Pulse Width Modulation (PWM) сигналы ATTiny 85 микроконтроллери (uC) аркылуу тепкичтүү моторго айландырылган ыкма болгон.

Бул жерде PWM сигналдары жана RC боюнча ресурс бар, бирок муну кайталоо үчүн аны такыр түшүнүүнүн кажети жок.

en.wikipedia.org/wiki/Servo_control

ATTiny - бул менин кичинекей моделдерге жана RC долбоорлоруна эң сонун шайкеш келген кичинекей I/O төөнөгүчтөрү менен кичинекей болгондуктан, Arduino менин эң жакшы көргөн даамым. ATTinyдин негизги кемчилиги, аны программалоо үчүн бир аз көбүрөөк орнотууну талап кылат, бирок аны орноткондон кийин алар ушунчалык арзан болгондуктан, сиз аларды ар кандай долбоорлор үчүн сатып ала аласыз.

Спидометр тергичтин өлчөмү өтө кичине, ал эми кайтарымдуу мотору бар, ошондуктан пропорционалдуу жооп алуу үчүн тепкичтүү моторду колдонуу керек болчу. Stepper мотору-бул дискреттик өлчөмдө (же кадамдар менен …!) Жылдырылган мотор, бул аны эч кандай кайтарым байланыш системасы үчүн идеалдуу кылат. Бир гана эскертүү: "кадамдар" натыйжада кыймылдын жылмакай болушуна карама -каршы келет. Эгер сиз бир айлануу үчүн жетиштүү кадамдары бар тепкичке ээ болсоңуз, бул байкалбайт, бирок мен бул долбоордо колдонгон 20 кадамды гана толук айлануу менен алсам, бурчтан секирүү абдан начар.

Күйгүзүү системасы, ийнени нөлгө түшүрүү үчүн, эки айлануу үчүн тепкичти артка иштетет. Спидометрге нөл белгиси болушун каалаган эс алуу түйүнү керек, болбосо ал түбөлүккө айланат. Андан кийин ал PWM сигналдарын кыймылдаткычтын белгиленген санына картага түшүрөт. Оңой, туурабы? …

2 -кадам: Программалык камсыздоо

Disclaimer: Мен программист эмесмин. Бул долбоор үчүн мен доктор Франкенштейндин санарип эквивалентимин, ар кандай табылган коддордон иштеп жаткан нерсени чогултуп жатам.

Ошентип, RC сигналдарын чечмелөө кодун түзгөн Дуане Бга чын дилимден ыраазычылык билдирем:

rcarduino.blogspot.com/

Ал эми аналогдук өлчөөчү катары тепкичти иштетүү кодун жасаган Ардунаутка:

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

Жана экөөнө тең, мен сиздин кодуңуз үчүн эмне кылганым үчүн чын дилимден кечирим сурайм.

Эми бул жок, бул жерде ATTinyге жүктөө керек:

#define THROTTLE_SIGNAL_IN 0 // INTERRUPT 0 = DIGITAL PIN 2 - attachInterrupt #аныктоо THROTTLE_SIGNAL_IN_PIN 2деги үзгүлтүксүз номурду колдонуу // INTERRUPT 0 = DIGITAL PIN 2 - digitalReadдеги #PIN кодун колдонуу бул нейтралдык секундда электр RC Машинасындагы нейтралдуу дроссель #define UPPER_THROTTLE 2000 // бул электр RC Машинасындагы максималдуу дроссельдин микросекундунун узактыгы #define LOWER_THROTTLE 1000 // бул микросекундтардагы минималдуу дроссельдин электрдик RC Машинасындагы #define DEADZONE 50 // бул дроссель өлүү аймагы. Жалпы өлүү аймагы мындан эки эсе көп. #include #define STEPS 21 // революциядагы кадамдар (315 ° менен чектелген) Спидометрдин максималдуу саякатын тууралоо үчүн муну өзгөртүңүз. #define COIL1 3 // Катушкалар. ATTiny степпер үчүн 0, 1, 3, 4 төөнөгүчтөрдү колдонот. 2 -пин - бул үзгүлтүктөрдү башкара турган жалгыз пин, андыктан ал кириш болушу керек. #define COIL2 4 // Эгерде тепкич мотору туура иштебесе, буларды алмаштырып көрүңүз. #define COIL3 0 #define COIL4 1 // stepper классынын экземплярын түзүңүз: Stepper stepper (STEPS, COIL1, COIL2, COIL3, COIL4); int pos = 0; // кадамдардагы позиция (0-630) = (0 ° -315 °) int SPEED = 0; float ThrottleInAvg = 0; int MeasurementsToAverage = 60; float Resetcounter = 10; // бош турган дроссельде турганда баштапкы абалга келтирүү убактысы int Resetval = 0; volatile int ThrottleIn = LOWER_THROTTLE; туруксуз белгисиз узак StartPeriod = 0; // үзгүлтүккө коюлган // биз nThrottleIn = 0 циклинде өзүнчө өзгөрмөнүн ордуна колдоно алмакпыз, бирок bNewThrottleSignalди колдонуу менен бизде жаңы сигнал бар экенин көрсөтүп турат // бул биринчи мисал үчүн түшүнүктүү void setup () {// Arduinoго айт биз calcInput функциясын INT0 (санарип пин 2) HIGHдон LOWга LOW чейин төмөн болгондо чакырууну каалайбыз // бул өзгөрүүлөрдү кармоо бизге импульстун тирешинин канчалык узактыгын эсептөөгө мүмкүндүк берет (THROTTLE_SIGNAL_IN, calcInput, CHANGE); stepper.setSpeed (50); // мотор ылдамдыгын 30 RPM (360 PPS болжол менен) коюңуз. step.step (STEPS * 2); // Ордун баштапкы абалга келтирүү (X кадамы саат жебесине каршы). } 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); Resetval = 0; } // Кайтарым карта башка, эгерде (ThrottleInAvg LOWER_THROTTLE) {SPEED = map (ThrottleInAvg, LOWER_THROTTLE, (NEUTRAL_THROTTLE - DEADZONE), 255, 0); Resetval = 0; } // Чек арадан жогору, эгерде (ThrottleInAvg> UPPER_THROTTLE) {SPEED = 255; Resetval = 0; } // Чек арадан төмөн, if if (ThrottleInAvg Resetcounter) {stepper.step (4); // Мен тепкичке RC сигналы узак убакытка созулбаса, өзүн кайра калыбына келтирүүсүн айткым келет. Коддун бул бөлүгү чындыгында иштээри белгисиз. }} int val = SPEED; // потенциометрдин маанисин алуу (0-1023 диапазону) val = map (val, 0, 255, 0, STEPS * 0.75); // stepper диапазонунда казан диапазону. if (abs (val - pos)> 2) {// эгер айырма 2 кадамдан чоң болсо. if ((val - pos)> 0) {stepper.step (-1); // бир кадам солго жылуу. pos ++; } if ((val - pos) <0) {stepper.step (1); // бир кадам оңго жылыңыз. pos--; }} // кечигүү (10); } void calcInput () {// эгер пин жогору болсо, анда ал үзгүлтүктүн башталышы if (digitalRead (THROTTLE_SIGNAL_IN_PIN) == HIGH) {// микролорду колдонуу менен убакытты алат - биздин код чындап бошобогондо бул так эмес болуп калат, бирок учурдагы колдонмо үчүн // түшүнүүгө оңой жана абдан жакшы иштейт StartPeriod = micros (); } else {// эгер пин төмөн болсо, анда анын импульсунун чети түшүп жатат, андыктан биз азыр // баштоо убактысын ulStartPeriod micros () менен кайтарылган учурдан алып салуу аркылуу импульстун узактыгын эсептей алабыз () if (StartPeriod) {ThrottleIn = (int) (micros () - StartPeriod); StartPeriod = 0; }}}

ATTiny85ти программалоо боюнча көбүрөөк маалымат алуу үчүн бул жерге кайрылыңыз:

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

3 -кадам: Аппараттык

Аппараттык
Аппараттык
Аппараттык
Аппараттык
Аппараттык
Аппараттык

Районду куруу үчүн схемага кайрылыңыз. Аны кантип чогултуу өзүңүздүн колуңузда, бирок мен схеманын прототибин түзүү үчүн чипти розеткага орнотуу үчүн колдонулган бир аз стриптиз/перфортонду колдонууну сунуштайм.

C1 = 100nF

R1 = 10kΩ

Конденсатор эң натыйжалуу болушу үчүн чипке мүмкүн болушунча жакын орнотулушу керек.

Эмалданган зымдарды моторго кошуп жатканда, өтө этият болуңуз, анткени моторлордун терминалдары моторго катушка зымын үзүп, үзүп салууну жакшы көрүшөт. Муну оңдоо үчүн, жакшы чечим-бул зымдарды ширетүү, андан кийин муунга 2 бөлүктөн турган чоң эпоксидин коюу, айыктыруу, анан зымдарды бириктирүү. Бул жеке терминалдык муундарга стрессти азайтат жана алардын үзүлүшүн токтотушу керек. Эгерде сиз муну жасабасаңыз, анда алар кепилдикке ылайыктуу убакта жок болуп кетишет.

Эгерде сиз төөнөгүч пин туташтыргычты жасап, төөнөгүчтөрдү мындай орнотсоңуз: [Ca1, Cb1, Ca2, Cb2] Ca1 менен Coil A, зым 1 ж.б.у.с.покусун алмаштыруу аркылуу өлчөгүчтүн айлануу багытын өзгөртүүгө мүмкүндүк берет. тегерегинде.

Нөлдүк позицияны каршы калибрлөө үчүн көрсөткүчкө токтоочу жай керек болот. Мүмкүн болсо ийнени металлдан жасоону сунуштайм. Бул анын аягына чыкканда ийилүүсүн токтотот. Ийнеди жакшы абалга келтирүүнүн бир жолу-бул ийнени убактылуу огуна жабыштыруу, модулду иштетүү, анын эс алуусуна уруксат берүү, андан кийин ийнеге каршы туруп калганда, ийнеге алып салуу жана кайра жабыштыруу. токтотуу. Бул ийнени мотордун магниттик тешүүсүнө тууралайт жана ийнеңиз дайыма токтоочу жерге келип токтошун камсыз кылат.

4 -кадам: Эпилог

Бул кыска нускама сизге жакты деп ишенем жана аны пайдалуу деп таптыңыз. Эгерде сиз булардын бирин курсаңыз, мага кабарлаңыз!

Жакшы ийгилик!

Сунушталууда: