Съдържание:

Работен RC автомобилен скоростомер: 4 стъпки (със снимки)
Работен RC автомобилен скоростомер: 4 стъпки (със снимки)

Видео: Работен RC автомобилен скоростомер: 4 стъпки (със снимки)

Видео: Работен RC автомобилен скоростомер: 4 стъпки (със снимки)
Видео: Part 1 - Tom Swift in the Land of Wonders Audiobook by Victor Appleton (Chs 1-13) 2024, Септември
Anonim
Работещ RC автомобилен скоростомер
Работещ RC автомобилен скоростомер

Това е кратък проект, който създадох като част от по -голяма RC конструкция на олекотен Land Rover. Реших, че си представям, че имам работещ скоростомер в арматурното табло, но знаех, че серво няма да го отреже. Имаше само един разумен вариант: разгърнете arduino!

Малко предистория за начало … Аз не съм кодиращ или електроник. Все още мисля за електричеството по отношение на водния поток и съм донякъде озадачен от резисторите. Това каза, ако дори аз бях в състояние да накарам това да работи, тогава и вие трябва да можете!

СПИСЪК С ЧАСТИ:

Микроконтролер: Използвах чип ATTiny85, който струваше около £ 1 всеки.

Програмист на микроконтролер: За да получите кода върху чипа, имате нужда от начин да го програмирате. С обикновения arduino това е просто USB кабел, но за чипа ATTiny имате нужда от нещо допълнително. Можете да използвате друг arduino, за да направите това или, подобно на мен, можете да използвате програмист Tiny AVR от Sparkfun.

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

Бих препоръчал това, тъй като се опитах да ги програмирам с различни методи и този е най -лесният. Дъската е малко скъпа, но добра инвестиция, ако правите много проекти на ATTiny.

8 Pin Chip Socket: Ако поставите чипа в гнездо, вместо да го запоявате директно, можете да си позволите някои грешки при сглобяването. Говорено от опит - никой не иска да разтопи чипове, за да ги препрограмира.

Кондензатор: Използва се отделящ кондензатор от 100nF (код 104). Не разбирам защо, но прочетох, че отделянето на кондензатори е важно в интернет, така че трябва да е вярно …

Резистор: 10kΩ резистор се използва за изтегляне на линията в arduino. Отново, още една мистерия на електрониката.

Perfboard/Stripboard: Някаква дъска, върху която да сглобите веригата си.

Намотващ проводник: Обикновената обвита тел е твърде дебела, за да се запоява върху двигателя. Използването на фин емайлиран проводник ще намали напрежението върху клемите на двигателя и ще направи живота ви много по -лесен.

Серво проводник: Трижилна лента, завършваща в 3-пинов JR женски щепсел. Получих моето от изгоряло серво, което „модифицирах“.

Стъпков двигател: Използвах 6 мм биполярен стъпков двигател Nidec. Всеки малък степер трябва да работи, макар и да ги държи малки, тъй като степерът се задвижва директно от Arduino.

Щифтове за заглавки: Не е от съществено значение, но ако свържете вашия степер към 4 заглавни щифта и поставите гнездо на веригата си, можете лесно да изключите таблото за управление за по -лесен монтаж.

Компютър: За да програмирате дъската, ще ви е необходим компютър. Евентуално с Arduino IDE. И може би USB кабел. Ако има и захранващ кабел, тогава още по -добре.

Стъпка 1: Системата

Основният план на системата, която създадох, беше метод, при който сигналът на Pulme Width Modulation (PWM), идващ от RC приемника, се преобразува в размах на стъпков двигател чрез микроконтролер ATTiny 85 (uC).

Ето един ресурс за PWM сигнали и RC, но за да го копирате, не е нужно стриктно да го разбирате.

en.wikipedia.org/wiki/Servo_control

ATTiny е любимият ми аромат на Arduino, защото е малък с все още достатъчно входно -изходни щифтове за извършване на основни неща, така че се вписва перфектно в малки модели и RC проекти. Основният недостатък на ATTiny е, че изисква малко повече настройка, за да го програмирате, но след като го настроите, те са толкова евтини, че можете да купувате стекове от тях за всякакви проекти.

Размерът на циферблата на скоростомера е твърде малък, за да има редуктор с обратна връзка, така че за да има пропорционална реакция, трябваше да се използва стъпков двигател. Стъпковият двигател е двигател, който се движи в дискретни количества (или стъпки …!), Което го прави идеален за система без обратна връзка като тази. Единственото предупреждение е, че „стъпките“ще причинят полученото движение да бъде рязко, а не гладко. Ако получите стъпало с достатъчно стъпки за завъртане, това не се забелязва, но с това, че стъпката, която използвах в този проект, има само 20 или повече стъпки в пълно завъртане, скокът на ъгъла е доста лош.

Системата при включване ще пусне стъпката назад за две обороти, така че да нулира иглата. Скоростомерът се нуждае от щифт за почивка, където искате да е нулевата маркировка, иначе просто ще се върти завинаги. След това съпоставя PWM сигналите напред и назад към определен брой стъпки на двигателя. Лесно, нали …?

Стъпка 2: Софтуерът

Отказ от отговорност: Аз не съм програмист. За този проект аз съм цифровият еквивалент на д -р Франкенщайн, сглобявайки нещо, работещо от различни намерени битове код.

И така, моите най -сърдечни благодарности отиват на Дуейн Б, който направи кода за интерпретиране на 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 - използвайте PIN кода в цифровата информация на неутрална дроселна клапа на електрическа RC кола #дефинирайте UPPER_THROTTLE 2000 // това е продължителността в микросекунди на максималната дроселна клапа на електрическа RC кола #дефинирайте LOWER_THROTTLE 1000 // това е продължителността в микросекунди на минималната дроселова клапа на електрическа RC кола #дефинирайте 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 (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; летливи int ThrottleIn = LOWER_THROTTLE; променлив неподписан дълъг StartPeriod = 0; // зададени в прекъсване // можем да използваме nThrottleIn = 0 в цикъл вместо отделна променлива, но използвайки bNewThrottleSignal, за да покажем, че имаме нов сигнал // е по -ясно за този първи пример void setup () {// кажете на Arduino искаме функцията calcInput да се извиква винаги, когато INT0 (цифров извод 2) се промени от HIGH на LOW или LOW на HIGH // улавянето на тези промени ще ни позволи да изчислим колко дълго входният импулс е attachInterrupt (THROTTLE_SIGNAL_IN, calcInput, CHANGE); stepper.setSpeed (50); // настройте скоростта на двигателя на 30 RPM (приблизително 360 PPS). stepper.step (СТЪПКИ * 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; } // Обратно картографиране else if (ThrottleInAvg LOWER_THROTTLE) {SPEED = map (ThrottleInAvg, LOWER_THROTTLE, (NEUTRAL_THROTTLE - DEADZONE), 255, 0); Resetval = 0; } // Извън диапазона горен else if (ThrottleInAvg> UPPER_THROTTLE) {SPEED = 255; Resetval = 0; } // Извън обхвата по -ниско else if (ThrottleInAvg Resetcounter) {stepper.step (4); // Опитвам се да кажа на степера да се рестартира, ако RC сигналът е в мъртвата зона за дълго време. Не съм сигурен дали тази част от кода наистина работи. }} int val = SPEED; // получаваме стойността на потенциометъра (диапазон 0-1023) val = map (val, 0, 255, 0, STEPS * 0.75); // картографиране на обхвата на пота в диапазона на стъпките. 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); Начален период = 0; }}}

Вижте това за повече информация относно програмирането на ATTiny85:

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

Стъпка 3: Хардуерът

Хардуерът
Хардуерът
Хардуерът
Хардуерът
Хардуерът
Хардуерът

Вижте електрическата схема за изграждане на веригата. Как ще го сглобите, зависи от вас, но бих предложил да използвате малко лента/перфорирана плоча, използвана за прототипиране на платки, и монтиране на чипа в гнездо.

C1 = 100nF

R1 = 10 kΩ

Кондензаторът трябва да бъде монтиран възможно най -близо до чипа, за да бъде най -ефективен.

Когато запоявате емайлираните проводници към двигателя, бъдете изключително внимателни, тъй като клемите на двигателите обичат да се откъсват и да прекъсват проводника на бобината към двигателя. За да поправите това, добро решение е да запоите проводниците и след това да поставите голямо петно от 2-частна епоксидна смола върху съединението, да го оставите да се втвърди, след това да завъртите проводниците заедно. Това намалява стреса върху отделните терминални стави и трябва да спре тяхното отлепване. Ако не направите това, те ще се откъснат в най -удобното време, гарантирано.

Ако направите конектора на щифта на заглавката и настроите щифтовете така: [Ca1, Cb1, Ca2, Cb2] с Ca1, стоящ за бобина A, проводник 1 и т.н. Това ви позволява да промените посоката на въртене на манометъра, като смените щепсела наоколо.

Манометърът ще се нуждае от краен ограничител, за да калибрира нулевата позиция спрямо. Бих препоръчал да направите иглата от метал, ако е възможно. Това спира да се огъва, когато удари крайния край. Начин за поставяне на иглата в добра позиция е временно да залепите иглата към оста, да включите модула, да го оставите да почине и след това да извадите и залепите иглата върху оста, като иглата е опряна в крайно спиране. Това подравнява иглата с магнитното зъбно колело на двигателя и гарантира, че иглата ви винаги трябва да се опира до крайния ограничител.

Стъпка 4: Епилог

Надяваме се, че сте харесали тази кратка инструкция и сте я намерили полезна. Ако изградите един от тях, уведомете ме!

Късмет!

Препоръчано: