Вопросы для проверки себя
Какие действия нужно предпринять, чтобы читать на компьютере данные с Arduino?
О каких ограничениях не следует забывать при работе с последовательным портом?
Как избежать ошибки в передаче данных, содержащих обратный слэш (\)?
Задания для самостоятельного решения
Перед таблицей данных о температуре добавьте заголовок (например, "Meteostation").
Добавьте столбец, содержащий количество секунд, прошедших с момента запуска микроконтроллера. Можно уменьшить интервал передачи данных.
Эксперимент 17. Пантограф
← Метеостанция | Оглавление | Тестер батареек →
В этом эксперименте мы вращаем сервопривод на угол, задаваемый потенциометром.
Прочтите перед выполнением
Список деталей для эксперимента
1 плата Arduino Uno
1 беспаечная макетная плата
1 сервопривод
1 конденсатор емкостью 220 мкФ
1 потенциометр
11 проводов «папа-папа»
Принципиальная схема
Схема на макетке
Обратите внимание
Конденсатор в данной схеме нам нужен для того, чтобы при включении сервопривода избежать просадки питания платы.
Не забывайте про то, что нужно соблюдать полярность элетролитического конденсатора. Короткая ножка (со стороны белой полосы на корпусе) — «минус».
Вы можете соединить провод сервопривода с макетной платой проводами «папа-папа»: коричневый это земля, красный — питание, оранжевый — сигнал.
В данном эксперименте мы подключаем питние сервопривода к 5V-выходу Arduino. С одним сервоприводом плата справится, но если в каком-либо проекте вам нужно больше серв, используйте специальные платы-драйвера с отдельным источником питания для серв.
Скетч
p170_servo.ino
// управлять сервоприводами (англ. servo motor) самостоятельно
// не так то просто, но в стандартной библиотеке уже всё
// заготовлено, что делает задачу тривиальной
#include
#define POT_MAX_ANGLE 270.0 // макс. угол поворота потенциометра
// объявляем объект типа Servo с именем myServo. Ранее мы
// использовали int, boolean, float, а теперь точно также
// используем тип Servo, предоставляемый библиотекой. В случае
// Serial мы использовали объект сразу же: он уже был создан
// для нас, но в случае с Servo, мы должны сделать это явно.
// Ведь в нашем проекте могут быть одновременно несколько
// приводов, и нам понадобится различать их по именам
Servo myServo;
void setup()
{
// прикрепляем (англ. attach) нашу серву к 9-му пину. Явный
// вызов pinMode не нужен: функция attach сделает всё за нас
myServo.attach(9);
}
void loop()
{
int val = analogRead(A0);
// на основе сигнала понимаем реальный угол поворота движка.
// Используем вещественные числа в расчётах, но полученный
// результат округляем обратно до целого числа
int angle = int(val / 1024.0 * POT_MAX_ANGLE);
// обычная серва не сможет повторить угол потенциометра на
// всём диапазоне углов. Она умеет вставать в углы от 0° до
// 180°. Ограничиваем угол соответствующе
angle = constrain(angle, 0, 180);
// и, наконец, подаём серве команду встать в указанный угол
myServo.write(angle);
}
Достарыңызбен бөлісу: |