Реобас на Ардуино (часть 1)
реклама
Arduino - программно-аппаратный комплекс с открытым исходным кодом. Причём "открытость" распространяется не только на программную часть, но и на аппаратную. В основе аппаратной части лежит плата с программируемым микроконтроллером AVR компании Atmel - 8-ми битным RISC-контроллером (всё по взрослому!). Однако пугаться не стоит, т.к. программная составляющая, основанная на проекте Wiring, избавляет от кошмара низкоуровнего программирования.
По сути, Arduino - это радиоконструктор. Основная плата - ядро радиоконструктора помимо микроконтроллера содержит стабилизатор питания, позволяющий запитывать плату от различных источников питания, и USB интерфейс, позволяющий подключить плату (и запитать) непосредственно к компьютеру для загрузки кода без использования кучи разнообразнейших программаторов и для двухстороннего обмена информацией.
Вообще, отцам основателям проекта стоит поставить памятник при ещё жизни, настолько простой и привлекательной стала робототехника благодаря их усилиям и усилиям многих энтузиастов по всему миру. Уже выпускаются десятки клонов этой платформы (вот что open-source животворящий делает!). Seeeduino, Iteaduino, Freaduino, DFRduino... "тысячи их". Одни полностью копируют исходный Arduino, другие содержат приятные "плюшки" в виде модулей беспроводной связи, дополнительных выводов, USB hub, SD-card слоты и т.д.
Помимо самих плат предлагается обилие всевозможных плат расширения, датчиков, и исполнительных механизмов. Причём конструкция продумывается таким образом, чтобы по максимуму избавить конструктора от необходимости общения с паяльником. Но ведь паяльник - лучший друг настоящего оверклокера? Значит, сам Бог велел нам повнимательней посмотреть на эту заморскую диковину. И вот почему...
Я обратил внимание на платформу Arduino после того как пытался выбрать себе реобас в новую систему. Так как планировалось, что система будет работать с некоторым разгоном, охлаждение должно было быть достаточно эффективным, но рёв взлетающего самолёта посреди ночи явно разбудит домочадцев. Можно было бы найти какой-то компромис, но все карты спутали производители процессоров внедрившие динамическое управление тактовой частотой (читай - тепловыделением). Достичь компромиса шум-надёжность с помощью классического пассивного реобаса в новых условиях было уже невозможно. Всевозможные активные реобасы либо обладали весьма скромным функционалом, либо стоили как самолёт и/или их приобретение было весьма затруднительно по причине отсутствия таковых на отечественном рынке. Но даже у систем за большие деньги функционал на мой перфекционистский взгляд недостаточно гибок. Последние надежды на интеллектуальное управление режимом системой охлаждения разбились о Asus Fan Xpert. Количество каналов управления по температуре на Asus Rampage IV Formula оказалось равно всего 2-м, а управление каналом (температура-обороты) всего по 2-м точкам (линейно) - не самое элегантное решение.
Updated. У платы Asus Rampage IV Extreme так же всего два канала, но управляются они уже по трём точкам - прямо таки неслыханная щедрость со стороны Asus!
Таким образом, мысль получить за относительно скромные деньги стопроцентно настраиваемую легкомасштабируемую модульную систему, показалась весьма заманчивой. В этой серии статей я постараюсь провести читателя от первых шагов знакомства с Arduino до построения собственного убер-реобаса [с блэкджеком и шлюхами].
Итак, приступим. Для начала определимся что нам потребуется по минимуму для опытов и построения реобаса.
Самый минимум - собственно плата Arduino, USB кабель и немного провода (в изоляции, естественно).
Arduino Nano (цена около 800р.)
Arduino Uno (цена 800-900р.)
Arduino Mega 128/256 (цена 1100-1500р.)
Есть ещё чипы (вообще без платы) с прошитым Arduino-загрузчиком, но они более подходят только для реализации уже отлаженных решений, т.к. для работы с ней помимо макетной "беспаечной" платы (bredboard) потребуется плата адаптер или горсть резисторов конденсаторы и разъёмы. Не очень-то подходит для начального уровня.
Arduino Nano для удобства тоже требует breadboard, но всё необходимое для подключения по USB на ней уже распаяно. Так что дешевизна этого и одночипового вариантов мнимая.
По большому счёту эти платы отличаются только количеством выводов и программа написанная для младшей модели запустится и на старшей. Наоборот тоже, при условии, что используете то же самое количество выводов платы. В большинстве случаев вполне достаточно Arduino Uno (или её клона). Но если вы задумаете построить убер-реобас, то лечше сразу взять Arduino Mega, т.к. только подключение символьного ЖК дисплея отнимет у вас сразу шесть цифровых выходов. Останется всего 7, из них надо будет хотя бы один отдать под кнопочное управление, ещё 4 займёт плата расширения с SD-карточкой (для логирования и хранения калибровок датчиков). Таким образом с Uno либо придётся искать компромисы, отказавшись от ЖК индикатора и выводя информацию только на монитор через USB-подключение, либо расширять функционал объединяя несколько плат Ардуино или же за счёт применения всевозможных регистров-контроллеров шины (что хоть и приемлемо для проффи но всё равно муторно). Плата Arduino Mega содержит 32 дополнительных цифровых ввода-вывода, что сильно упростит подключение всевозможной переферии.
Теперь о самих выводах.
В первом приближении их можно условно разделить на три группы:
- аналоговые входы (A0, A1, A3...)
- цифровые вход/выходы (D0, D1, D2...)
- цифровые вход/выходы с возможностью ШИМ (PWM) вывода. (PWM D3, PWM D5...)
Дабы не утомлять читателя, назначение и особенности работы выводов буду давать по мере необходимости. Нетерпеливые могут найти информацию в Сети самостоятельно. Мы же перейдём непосредственно к первому эксперименту.
Все начинающие работать с Arduino первым делом начинают подключать светодиоды и баловаться с их включением-выключением. Но мы же не какие-то там моддеры! Хотя и для управления подсветкой Ардуино тоже более чем подойдёт, но начнём мы с подключения PWM (4-х контактного вентилятора). Это даже ещё проще чем светодиод.
Вот принципиальная схема:
Здесь и далее обозначения выводов Arduino полностью совпадает с нанесёнными на плату, см. увеличенные фотографии выше, или wiki страницы приобретённых Вами плат Arduino. (У меня, например такая)
После сборки схемы в програмную оболочку Arduino загрузим код:
// начало
// глобальные переменные
int fanCtrlPin = 3; // выходы на драйвер вентилятора D3
void setup() {
// установка частоты PWM на 32кГц (примерно)
//для нужного типа платы убрать "//" в начале строки
// это для плат типа Arduino Nano и Uno:
// TCCR2B = (TCCR2B & 0xF8) | 0x01; // timer 2 (pins 11,3)
// это для плат типа Arduino Mega:
// TCCR3B = (TCCR3B & 0xF8) | 0x01; // timer 3 (pins 2,3,5)
pinMode(fanCtrlPin, OUTPUT); // назначаем контакт D3 как выход
}
void loop() {
analogWrite(fanCtrlPin, 255); // полные обороты
delay(2000); // задержка 2 секунды (2000 миллисекунд)
analogWrite(fanCtrlPin, 40); // обороты до минимальных
delay(2000); // задержка 2 секунды
analogWrite(fanCtrlPin, 200); // меняем обороты
delay(2000); // задержка
analogWrite(fanCtrlPin, 80); // опять изменение оборотов
delay(2000); // задержка
}
// конец
Пару слов об оболочке Arduino. Скачать архив можно с официального сайта здесь. Программная оболочка не требует инсталяции, но надо будет в меню выбрать тип Вашей платы и номер порта к которому подключена ардуина. Возможно потребуется установка драйвера. Подробнее можно прочитать здесь. пусть название Freeduino вас не смущает, это ещё один полность совместимый клон. Помимо этого можно посмотреть познавательные уроки на youtube задав в поиск "Ардуино Джереми Блум". В первом же уроке видеоинструкция по настройке. Если что-то непонятно, спрашивайте в комментариях.
А вот что должно получится у нас в итоге.
Частота вращения вентилятора меняется циклически. Для теста специально взял старый и шумный кулер. На глаз оценить частоту вращения трудно, а до замера частоты вращения мы доберёмся чуть попозже.
Теперь немного пояснений по коду и что же в итоге у нас получилось.
Для начала про структуру кода для Arduino.
Код обязательно должен содержать две процедуры:
void setup() { ..... } - процедура установки, выполняется только один раз, после включения питания или сброса.
void loop() { ..... } - процедура управление которой передаётся после выполнения setup(). Написанный в ней код будет выполнятся циклически, как только (если) будет исполнена последняя команда начнёт выполняться первая.
Перед процедурой setup() принято объявлять глобальные переменные (переменные, которые будут доступны во всех процедурах). В нашем примере это целочисленная ( int) переменная fanCtrlPin. Можно было бы обойтись и без неё, но с ней получается наглядней (видно где обозначение вывода, а где - величина которую меняем). Помимо этого, если вздумается переключить вентилятор на другой вывод, исправить надо будет всего лишь одну строчку.
Помимо указанных процедур можно писать собственные и обращатся к ним (об этом позже), но эти две должны быть обязательно.
Ещё пару слов про установку частоты. Двойным слэшем "//" обозначаются комментарии, соответсвенно, чтобы задействовать нужную строчку надо будет убрать комментирование перед ней. Установка частоты необходима, т.к. по умолчанию может стоять совсем другая частота PWM (на моей плате по умолчани стояло что-то около 4кГц), а PWM вентиляторы требуют частоты выше 20кГц. Какие значения может принимать частота PWM мы так же рассмотрим чуть позже.
Теперь о командах (операторах).
pinMode(pin, mode) - устанавливает вывод с номером pin в режим ввода (вместо mode пишем INPUT) или вывода ( OUTPUT)
delay(time) - задержка выполнения кода, time - время в миллисекундах.
analogWrite(pin, pwm_duty) - устанавливает на выводе pin значение цикла pwm_duty.
pwm_duty может принимать значения от 0 до 255. 0 соответвует полностью выключенному состоянию (однако вентиляторы PWM даже при выключенном сигнале контроля оборотов будут крутится на некоей минимальной частоте), 255 - полностью включенному. Меняя pwm_duty можно менять чатоту оборотов вентилятора. Суть ШИМ (широтно-импульсной модуляции, она же PWM) в изменении соотношения времени включенного и выключенного состояния для прямоугольного сигнала (он же меандр). Непонятно? Что ж ШИМ мы рассмотри немного позже, когда дойдём до регулировки оборотов обычного 3-х контактного вентилятора. А пока, для затравки, дам несколько картинок немного проясняющих абракадабру написанную выше.
Следующий шаг - подключить термодатчик и заставить вентилятор менять обороты от температуры на датчике.
Продолжение следует...
Обсуждение, предложение по темам, вопросы и т.п. можно обсудить на форуме.
реклама
Лента материалов
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.
Сейчас обсуждают