Эксперименты с arduino. Подключение разных датчиков. Применение в практике данных схем.
суббота, 8 ноября 2014 г.
Опыт 3: фоторезистор и сервопривод
Немного теории (не от меня)
Двигатели постоянного тока (ДПТ) с постоянными магнитами Lenze начинают работать сразу, как только к якорной обмотке будет приложено постоянное напряжение. Переключение направления тока через обмотки ротора осуществляется механическим коммутатором — коллектором. Постоянные магниты при этом расположены на статоре.
Шаговые электродвигатели (Шаговый Двигатель ) может быть рассмотрен как ДПТ без коллекторного узла. Обмотки ШД являются частью статора. На роторе расположен постоянный магнит или, для случаев с переменным магнитным сопротивлением, зубчатый блок из магнитомягкого материала. Все коммутации производятся внешними схемами. Обычно система мотор — контроллер разрабатывается так, чтобы была возможность вывода ротора в любую, фиксированную позицию, то есть система управляется по положению. Цикличность позиционирования ротора зависит от его геометрии.
В кратце от себя: шаговый двигатель - двигатель, который крутится не постоянно, а поворачивается на заданный угол.
Опыты
Сервопривод и Ethernet
Для начала воспользуемся нашем предыдущим скетчом для работы с сетью. Немного модернизируем его, для полуения данных по протоколe UDP.
Теперь поэксперементируем с фоторезистором.
Будем использовать его для получения данных об освещенности в помещении.
Напишем простой пример, в котором будем получать данные с фоторезистора и по результатам зажигать светодиод.
Скетч (показать/скрыть)
int sensorPin = A0; // устанавливаем входную ногу для фоторезистора
unsigned int sensorValue = 0; // цифровое значение фоторезистора
int gradServo = 0;
void setup()
{
//Serial.begin(9600); // старт последовательного вывода данных (для тестирования)
}
void loop()
{
sensorValue = analogRead(sensorPin); // считываем значение с фоторезистора
if(sensorValue<550) digitalWrite(9, HIGH); // включаем
else digitalWrite(9, LOW); // выключаем
// Для отладки раскомментируйте нижеследующие строки
/*Serial.println(sensorValue, DEC); // вывод данных с фоторезистора (0-1024)
Serial.println(""); // возврат каретки
delay(500); */
}
Фоторезистор подключаем к аналоговому входу.
В скетче закомментирован код для отладки пределов значений освещённости.
В каждом конкретном случае можете подобрать минимальную освещенность для себя.
Фоторезистор и сервопривод
Теперь совместим оба эксперимента в один.
Будем управлять сервоприводом по данным с фоторезистора.
Логику я решил сделать такой: выбрал минимальную и максимальную освещенность (выводил данные в консоль),
по этим данным будем задавать минимальный максимальный угол поворота. Разница между этими значениями - разница угла поворота.
Отсюда считаем шаг соответствия уровня освещенности и угла поворота серво привода:
if (sensorValue<400){
gradServo = 0;
} else if (sensorValue<760){
gradServo = (sensorValue-400)/2;
} else {
gradServo = 180;
}
Итого
Практическое применение этого может быть, например в открытием/закрытием жалюзей, в зависимости от освещенности.
По-крайней мере так хочу сделать я =)
Скетч (показать/скрыть)
#include "Servo.h"
int sensorPin = A0; // устанавливаем входную ногу для АЦП
unsigned int sensorValue = 0; // цифровое значение фоторезистора
int gradServo = 0;
Servo servo;
void setup()
{
servo.attach(4);
pinMode(4, OUTPUT);
}
void loop()
{
sensorValue = analogRead(sensorPin); // считываем значение с фоторезистора
if (sensorValue<400){
gradServo = 0;
} else if (sensorValue<740){
gradServo = (sensorValue-400)/2+5;
} else {
gradServo = 175;
}
servo.write(gradServo);
}
Комментариев нет:
Отправить комментарий