В этом примере для начинающих мы рассмотрим работу с пьезоизлучателем для генерирования звуков. Для этого возьмем пьезодатчик позволяющий генерировать звуковые волны в диапазоне частот 20 Гц - 20 кГц.
Используем встроенный ШИМ-генератор Arduino для генерирования звука на пьезоизлучателе с помощью стандартной функции tone() по нескольким причинам. Во первых эта команда может быть задействована только на одной ноге Arduino в один промежуток времени, а во-вторых применение tone() мешает использовать ШИМ на пинах 3 и 11;
Использовать эту команду можно, когда нам необходима какая-либо частота и совсем не нужен ШИМ на 3 и 11 пинах контроллера Arduino. ШИМ запускается на частоте 500 Гц.
Для работы схемы подключим пьезодатчик к девятому пину и 0V Arduino. Кроме того, сделали альтернативную функцию beep(), посылающую ШИМ-сигнал на пьезо, далее происходит небольшая задержка, затем сигнал с пьезо снимается и опять пауза. В результате издается непродолжительный звук. Переменная delayms необходима для задания времени звучания в миллисекундах. Продолжительность ШИМ не очень важна. Скетч , при запуске кода издает три непродолжительных, а потом один продолжительный звуковой сигнал.
Код:
/*
Пьезо
Данный практический пример демонстрируетт управление Пьезо на девятой ножке Arduino,
используя команду analogWrite()
*/
void setup() {
pinMode(9, OUTPUT); // устанавливаем 9 ногу как выход
beep(50);
beep(50);
beep(50);
delay(1000);
}
void loop() {
beep(200);
}
void beep(unsigned char delayms){
analogWrite(9, 20); // значение должно лежать в диапазоне от 0 до 255
// поиграйтесь для получения разных тонов
delay(delayms); // пауза delayms мс
analogWrite(9, 0); // 0 - выключаем пьезо
delay(delayms); // пауза delayms мс
Автоматический ночник на Arduino
Для нашего следующего урока на Arduino мы задействуем фоторезистор. Его сопротивление зависит от света, попадающего на поверхность. Используя фотоэлемент в связке с обычным сопротивлением 4.7 кОм, мы получаем классический делитель напряжения, в котором напряжение идущее через фотосопротивление, изменяется, в зависимости от уровня освещенности.
Напряжение с делителя, следует на вход АЦП Arduino. Затем мы осуществляем сравнение полученного значения с установленным порогом и включаем или отключаем светильник. Когда уровень естественной освещенности возрастает, сопротивление фоторезистора снижается и на выходе делителя напряжение увеличивается. С снижением уровня освещенность все наоборот падает.
Напряжения 0В и 5В берутся с Arduino. Пин А0 задействуем как вход АЦП. В данном примере мы просто будем включать и выключать светодиод, который встроен в Arduino. Более яркий LED, мы можем подсоединить к выводу 13 (через сопротивление 220 Ом). Для подключения более мощной нагрузки ее необходимо подключать через реле или тиристор.
Код:
/*
** Ночник на светодиодах
**
*/
int sensorPin = A0;// устанавливаем входной пин АЦП
unsigned int sensorValue = 0; // цифровое значение фоторезистора
void setup()
{
pinMode(13, OUTPUT);
Serial.begin(9600); // старт последовательного вывода данных (для тестирования)
}
// Для отладки необходимо раскомментировать строки
//Serial.print(sensorValue, DEC); // вывод данных с фоторезистора (0-1024)
//Serial.println(""); // возврат каретки
//delay(500);
}
Если необходимо управлять более мощной нагрузкой, например лампой накаливания, электродвигателем и т.п, то Arduino не может обеспечить питание. Одним из способов выхода из данной ситуации, является использование MOSFET-транзисторов. Применим для этого транзистор фирмы ST microelectronics типа 95N2LH5.
На схеме выше показано подключение электромотора к Arduino через MOSFET. Если использовать ШИМ-выход контроллера, мы легко управляем мощностью, а значит и скоростью вращения двигателя.