Оглавление:

Рабочий спидометр радиоуправляемого автомобиля: 4 шага (с изображениями)
Рабочий спидометр радиоуправляемого автомобиля: 4 шага (с изображениями)

Видео: Рабочий спидометр радиоуправляемого автомобиля: 4 шага (с изображениями)

Видео: Рабочий спидометр радиоуправляемого автомобиля: 4 шага (с изображениями)
Видео: Только не говори никому.. Как легко можно восстановить жидкокристаллический экран.. 2024, Сентябрь
Anonim
Рабочий спидометр радиоуправляемого автомобиля
Рабочий спидометр радиоуправляемого автомобиля

Это небольшой проект, который я создал как часть более крупной сборки легкого Land Rover на радиоуправлении. Я решил, что мне хотелось бы иметь работающий спидометр на приборной панели, но я знал, что сервопривод не подойдет. Был только один разумный вариант: развернуть ардуино!

Для начала немного предыстории… Я не занимаюсь программированием или электроникой. Я все еще думаю об электричестве с точки зрения потока воды и несколько озадачен резисторами. Тем не менее, если даже я смог выполнить эту работу, значит, вы тоже сможете это сделать!

СПИСОК ДЕТАЛЕЙ:

Микроконтроллер: я использовал чип ATTiny85, который стоит около 1 фунта стерлингов каждый.

Программист микроконтроллера: чтобы записать код на чип, вам нужен способ его запрограммировать. С обычным arduino это просто USB-кабель, но для чипа ATTiny нужно что-то дополнительное. Вы можете использовать другой Arduino для этого или, как я, вы можете использовать программатор Tiny AVR от Sparkfun.

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

Я бы порекомендовал это, так как я пробовал программировать их различными методами, и этот самый простой. Плата немного дороговата, но это хорошее вложение, если вы занимаетесь большим количеством проектов ATTiny.

8-контактное гнездо для микросхемы: если вы вставите микросхему в гнездо, а не припаиваете ее напрямую, вы можете позволить себе некоторые ошибки при сборке. Исходя из опыта, никто не хочет демонтировать микросхемы, чтобы перепрограммировать их.

Конденсатор: используется развязывающий конденсатор емкостью 100 нФ (код 104). Я не совсем понимаю, почему, но я читал, что разделительные конденсаторы важны в Интернете, так что это должно быть правдой …

Резистор: резистор 10 кОм используется для подключения линии к Arduino. Опять еще одна загадка электроники.

Perfboard / Stripboard: Плинтус для сборки вашей схемы.

Обмоточная проволока: Обычная проволока в оболочке слишком толстая, чтобы ее можно было припаять к двигателю. Использование тонкой эмалированной проволоки снизит нагрузку на клеммы двигателя и значительно упростит вашу жизнь.

Сервопривод: трехпроводная лента, оканчивающаяся 3-контактной розеткой JR. Я получил свой от сгоревшего сервопривода, который я «модифицировал».

Шаговый двигатель: я использовал биполярный шаговый двигатель Nidec диаметром 6 мм. Любой маленький шаговый двигатель должен работать, хотя он должен быть маленьким, поскольку шаговый двигатель управляется непосредственно от Arduino.

Контакты заголовка: не обязательны, но если вы подключите шаговый двигатель к 4 контактам заголовка и подключите розетку к своей цепи, вы можете легко отключить приборную панель для простоты установки.

Компьютер: чтобы запрограммировать доску, вам понадобится компьютер. Возможно, с помощью Arduino IDE. И, возможно, USB-кабель. Если есть и шнур питания, то еще лучше.

Шаг 1: Система

В основе созданной мной системы лежал метод, с помощью которого сигнал широтно-импульсной модуляции (ШИМ), поступающий от RC-приемника, преобразуется в развертку шагового двигателя с помощью микроконтроллера ATTiny 85 (uC).

Вот ресурс по сигналам ШИМ и RC, но чтобы воспроизвести это, вам не обязательно понимать это.

en.wikipedia.org/wiki/Servo_control

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

Размер шкалы спидометра слишком мал для использования мотор-редуктора с обратной связью, поэтому для получения пропорционального отклика пришлось использовать шаговый двигатель. Шаговый двигатель - это двигатель, который перемещается дискретно (или шагами…!), Что делает его идеальным для такой системы без обратной связи. Единственное предостережение заключается в том, что «ступеньки» вызовут резкое движение, а не плавное. Если у вас есть степпер с достаточным количеством шагов на оборот, это не заметно, но с шаговым двигателем, который я использовал в этом проекте, имеющим только 20 или около того шагов на полный оборот, угловой скачок будет довольно плохим.

Система при включении запустит шаговый двигатель назад на два оборота, чтобы обнулить стрелку. Спидометру нужен фиксирующий штифт там, где вы хотите, чтобы была нулевая отметка, иначе он просто будет вращаться бесконечно. Затем он отображает прямые и обратные сигналы ШИМ на заданное количество шагов двигателя. Легко, правда…?

Шаг 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 # define THROTTLE_SIGNAL_IN_PIN 2 // INTERRUPT 0 = DIGITAL PIN 2 - используйте номер PIN в digitalRead #define NEUTRAL_THROTTLE в 1500 секунд // это длительность в 1500 секунд. нейтрального газа на электрическом радиоуправляемом автомобиле #define UPPER_THROTTLE 2000 // это продолжительность в микросекундах максимального газа на электрическом радиоуправляемом автомобиле #define LOWER_THROTTLE 1000 // это продолжительность в микросекундах минимального газа на электрическом радиоуправляемом автомобиле #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 (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 на HIGH // улавливание этих изменений позволит нам вычислить, как долго входной импульс будет attachInterrupt (THROTTLE_SIGNAL_IN, calcInput, CHANGE); stepper.setSpeed (50); // установить скорость двигателя на 30 об / мин (приблизительно 360 PPS). stepper.step (ШАГИ * 2); // Сброс позиции (X шагов против часовой стрелки). } void loop () {Resetval = миллисекунды; 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 = СКОРОСТЬ; // получаем значение потенциометра (диапазон 0-1023) val = map (val, 0, 255, 0, STEPS * 0.75); // отображаем диапазон горшка в шаговом диапазоне. if (abs (val - pos)> 2) {// если разница больше 2 шагов. если ((val - pos)> 0) {stepper.step (-1); // перемещаемся на один шаг влево. pos ++; } если ((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 = 100 нФ

R1 = 10 кОм

Конденсатор должен быть установлен как можно ближе к микросхеме, чтобы он был наиболее эффективным.

При пайке эмалированных проводов к двигателю будьте предельно осторожны, так как клеммы на двигателях любят отламываться и перерезать провод катушки, идущий к двигателю. Чтобы исправить это, хорошее решение - припаять провода, а затем нанести на стык большую каплю двухкомпонентной эпоксидной смолы, дать ей застыть, а затем скрутить провода вместе. Это снижает нагрузку на отдельные терминальные суставы и предотвращает их отрыв. Если вы этого не сделаете, они гарантированно отключатся в наименее удобное время.

Если вы сделаете соединительный штифт заголовка и установите контакты следующим образом: [Ca1, Cb1, Ca2, Cb2] с Ca1, обозначающим катушку A, провод 1 и т. Д., Это позволит вам изменить направление вращения датчика, поменяв штекер около.

Для калибровки нулевого положения манометру потребуется упор. По возможности рекомендую сделать иглу из металла. Это останавливает его изгиб, когда он достигает упора. Чтобы поставить иглу в нужное положение, можно временно приклеить иглу к оси, включить модуль, дать ему остановиться, а затем удалить и повторно приклеить иглу к оси, при этом игла должна прилегать к оси. конечная остановка. Это выравнивает иглу с магнитным зубцом двигателя и гарантирует, что ваша игла всегда будет упираться в ограничитель.

Шаг 4: эпилог

Надеюсь, вам понравился этот краткий инструктаж, и вы сочли его полезным. Если вы построите один из них, дайте мне знать!

Удачи!

Рекомендуемые: