Код программы целиком:
int buttonPin = 2;
int analogPin = 3;
int ledPin = 13;
void setup() {
// Вывод настроен как “выход”
pinMode(ledPin, OUTPUT);
// Вывод настроен как “вход”
pinMode(buttonPin, INPUT);
}
void loop() {
// Читаем положение потенциометра (0..1023)
int pos = analogRead(analogPin);
unsigned long time_sec = pos*600/1024;
// Ждем пока кнопка будет нажата
while (digitalRead(buttonPin) == HIGH) delay(100);
// Зажигаем светодиод
digitalWrite(ledPin, HIGH);
delay(time_sec*1000);
// Гасим светодиод
digitalWrite(ledPin, LOW);
}
В следующей главе мы подключим к Arduino динамик, что позволит создать уже полноценное и законченное устройство: кухонный таймер.
Самостоятельная работа #1: сделать шкалу для переменного резистора, как показано на рисунке. Оценить точность работы таймера, например с помощью программы для смартфона.
Разумеется, есть множество других разнообразных устройств, напряжение от которых можно считывать с помощью analogRead.
Термистор - это резистор, сопротивление которого зависит от температуры. Его подключение аналогично переменному резистору.
Подключив его в схему как показано на рисунке, можно измерять, например, температуру воздуха на улице.
Фоторезистор - как понятно из названия, изменяет свое сопротивление в зависимости от освещенности.
Датчик атмосферного давления: напряжение на его выходе пропорционально давлению.
В продаже также есть датчики влажности воздуха или почвы. Все это позволяет создать несложные системы автоматизации, например для освещения или обогрева теплицы. Разумеется, Arduino не может напрямую управлять мощной нагрузкой, для этого в продаже есть специальные реле, вроде таких:
Множество современных датчиков имеют цифровые интерфейсы, но за счет своей простоты и дешевизны, аналоговые датчики тоже весьма широко используются.
Самостоятельная работа #2: подключить к Arduino термистор, вывести значения принимаемые от analogRead в последовательный порт, что позволит просматривать их на компьютере. Погружая термистор в лед или кипяток, построить график зависимости значений от температуры. В следующих главах мы рассмотрим подключение ЖК-экрана, что позволит нам на этом принципе сделать термометр.
2.6 Вывод звука
Мы уже подключали светодиод к Arduino. Практически тем же способом можно подключить к Arduino пьезодинамик, что позволит нам создавать несложные звуки.
Пьезодинамик подключается к выводу Arduino примерно также, как и светодиод, через ограничительный резистор сопротивлением 100-200 Ом.
Для вывода звука используется функция tone, которая имеет два параметра - номер вывода и частоту звука. Для отключения звука есть функция со схожим названием noTone.
Простейший код, в котором Arduino будет издавать (весьма противные) звуки каждую секунду, выглядит так:
const int buzzer = 8; // arduino pin 8
void setup(){
pinMode(buzzer, OUTPUT);
}
void loop() {
tone(buzzer, 1000); // 1000Гц = 1КГц
delay(1000); // 1с
noTone(buzzer); // стоп
delay(1000); // пауза 1с
}
Кстати, в продаже бывают и так называемые “активные пьезодинамики” (active buzzer). Они имеют 3 входа, один из которых +5В, а второй управляющий.
Использование такого динамика проще - частоту можно не задавать, достаточно просто установить в “1” соответствующий вывод. Для этого достаточно заменить функцию tone(buzzer, 1000); на digitalWrite(buzzer, HIGH); и функцию noTone(buzzer); на digitalWrite(buzzer, LOW). Такой динамик обычно громче, но отсутствие возможности смены частоты звука может быть недостатком.
Самостоятельная работа #1: С помощью пьезодинамика воспроизвести гамму или несложную мелодию, воспользовавшись таблицей частот нот в герцах.
До
262
Соль
392
Ре
294
Ля
440
Ми
330
Си
494
Фа
349
До
523
Самостоятельная работа #2: Дополнить таймер из предыдущей главы возможностью вывода звука при окончании интервала. Для этого заменить функцию delay функцией воспроизведения соответствующего тона.