Управление DC-мотором при помощи Arduino и потенциометра
Данный пример демонстрирует как управлять двигателем постоянного тока с помощью Arduino и потенциометром. Код примера демонстрирует управление скоростью вращения двигателя постоянного тока с помощью потенциометра. В зависимости от положения ручки потенциометра, двигатель будет "разгонятся", либо замедляться.
Дополнительный источник питания(например крона 9В)
Цепь
При сборке схемы обратите внимание на распиновку транзистора - эмитор соединяется с минусом, база через резистор на 1кОм соединяется с 9 выходом Arduino, а коллектор
с одним из выводов двигателя, другой вывод двигателя соединяется с плюсом источника питания на 9В. Параллельно двигателю подключаетсякерамический конденсатор(для фильтрации помех от работы двигателя) и диод(для защиты блока питания от обратного напряжения при выключении двигателя). Крайний левый контакт потенциометра соединяется с 5В шиной Arduino, крайний правый с GNDArduino, средний контакт идет на 0-ой аналоговый вход Arduino. Не забудьте объединить минус источника питания и GNDArduino.
Двигатели постоянного тока, потребляют ток больше чем может выдать Arduino. Также они создают опасные выбросы напряжения. Для этого необходимо изолировать двигатель постоянного тока от платы Arduino и запитывать его через отдельный источник питания. Использование транзистора позволит безопасно управлять двигателем используя ШИМ. Транзистор работает как простой электрически управляемый переключатель. Каждый биполярный транзистор имеет три контакта: эмиттер, база, коллектор. Между коллектором и эмиттером течет большой ток, при малом токе базы. Изменяя ток базы, мы будем регулировать ток через коллектор-эмиттер и менять скорость вращения двигателя. Т.к. двигатель обладает инерцией, быстрое переключения транзистора с помощью ШИМ приведет к регулировке скорости вращения.
Код
#define MOTOR 9 //используем 9 вывод для управления DC-мотором#define POT 0 //потенциометр подключен к 0-му аналоговому входуintval=0;//переменная для хранения считываемого значения voidsetup(){pinMode(MOTOR,OUTPUT);//конфигурируем 9 вход как выход}voidloop(){val=analogRead(POT);//считываем значение с 0-го входа, к которому подключен потенциометрval=map(val,0,1023,0,255);//пропорционально преобразуем измеряемый диапазон значений в выдаваемый диапазон значенийanalogWrite(MOTOR,val);//выдаем на 9 выход преобразованное значение}
Calibration - Определение максимума и минимума для данных от аналогового датчика.
Fading - Использование выходного аналогового контакта (ШИМ) для затухания/загорания светодиода.
Smoothing - Сглаживание серии данных, считанных с входного аналогового контакта.
Связь
ReadASCIIString - Анализ строки, состоящей из разделенных запятыми int-значений, и их последующее использование для управления RGB-светодиодом.
ASCII Table - Демонстрирует продвинутые способы вывода данных на Serial Monitor.
Dimmer - Изменение яркости светодиода при помощи движения мышкой.
Graph - Отправка данных на компьютер и их графическое отображение в скетче Processing.
Physical Pixel - Включение/выключение светодиода путем отправки данных со скетча Processing (или Max/MSP) на Arduino.
Virtual Color Mixer - Отправка с Arduino на компьютер сразу нескольких значений, а затем их считывание при помощи скетча для Processing или Max/MSP.
Serial Call Response - Многобайтная передача данных при помощи метода вызова и ответа (метода «рукопожатия»).
Serial Call Response ASCII - Многобайтная передача данных при помощи метода вызова и ответа (метода «рукопожатия»). До передачи данные зашифровываются в ASCII.
SerialEvent - Демонстрирует использование SerialEvent().
MIDI - Передача через последовательный порт сообщений с MIDI-нотами.
MultiSerialMega - Использование двух последовательных портов на Arduino Mega.
Управляющие структуры
If Statement - Как использовать оператор «if» для создания условий, опирающихся на входные аналоговые данные, при которых светодиод будет либо включаться, либо оставаться выключенным.
For Loop - Управление несколькими светодиодами, чтобы они мигали, как LED-полоска у автомобиля Китт из сериала «Рыцарь дорог».
Array - Вариация примера «For Loop», но с использованием массива.
While Loop - Использование цикла while() для калибровки датчика. Калибровка включается при нажатии на кнопку.
Switch Case - Как совершать какие-либо действия в зависимости от значений, полученных от датчика. Эквивалент примера «If Statement», но если бы условий было не два, а четыре. Этот пример демонстрирует, как дробить диапазон данных от датчика на четыре «суб-диапазона», а затем в зависимости от полученных результатов совершать одно из четырех действий.
Switch Case 2 - Второй пример, демонстрирующий использование оператора switch. Показывает, как совершать различные действия в зависимости от определенных символов, полученных через последовательный порт.
Датчики
ADXL3xx - Считывание данных с акселерометра ADXL3xx.
Knock - Определение стука при помощи пьезоэлемента.
Memsic2125 - Считывание данных с 2-осевого акселерометра Memsic2125.
Ping - Определение объектов при помощи ультразвукового дальномера.