Изучаем Arduino: инструметы и методы технического волшебства - [25]
Монтаж компонентов выполняйте согласно рис. 4.13. Я использовал синие светодиоды, но вы можете выбрать светодиоды любого другого цвета. ИК-датчик расстояния присоедините к сервоприводу, как показано на рис. 4.13.
Последний шаг - программирование датчика. Алгоритм работы системы следующий:
1. Поворот вала сервопривода в одну из четырех позиций.
2. Измерение расстояния.
3. Преобразование его в значение, которое подходит для управления светодиодом.
4. Изменение яркости соответствующего светодиода.
- 105 -
Рис. 4.14. Схема подключения датчика расстояния
5. Выбор следующей позиции вала сервопривода.
6. Возврат к шагу 1.
Код программы приведен в листинге 4.7. Создайте в Arduino IDE новый проект, скопируйте этот код и загрузите его в плату Arduino.
Листинг 4.7. Программа ИК-датчика расстояния
// ИК-датчик расстояния
#include
const int SERV0=9; // Вывод 9 для подключения сигнального провода сервопривода
const int IR=0;// Подключение ИК-датчика расстояния к аналоговому входу A0
const int LED1=3; // Вывод светодиода 1
const int LED2=5; // Вывод светодиода 2
const int LED3=6; // Вывод светодиода 3
const int LED4=11; // Вывод светодиода 4
// Создание объекта Servo
Servo myServo;
- 106 -
int dist1 = 0;//Расстояние в первой области
int dist2 = 0;//Расстояние во второй области
int dist3 = 0;//Расстояние в третьей области
int dist4 = 0;//Расстояние в четвертой области
void setup()
{
myServo.attach(SERV0);
pinMode(LED1, OUTPUT);//Сконфигурировать
pinMode(LED2, OUTPUT);//контакты подключения
pinMode(LED3, OUTPUT);//четырех светодиодов
pinMode(LED4, OUTPUT);// как выходы
}
void loop()
{
// Поворот вала сервопривода по четырем позициям
dist1 = readDistance(15);
analogWrite(LED1, dist1);
delay(300);
dist2 = readDistance(65);
analogWrite(LED2, dist2);
delay(300);
dist3 = readDistance(115);
analogWrite(LED3, dist3);
delay(300);
dist4 = readDistance(165);
analogWrite(LED4, dist4);
delay(300);
}
int readDistance (int pos)
{
myServo.write(pos);
delay(600);
int dist = analogRead(IR);//Чтение данных с датчика расстояния
dist = map(dist, 50, 500, 0, 255); //Преобразование к нужному диапазону
dist = constrain(dist, 0, 255);
return dist;//Выдача значения, соответствующего расстоянию
}
В программе есть функция readDistance(), которая поворачивает вал сервопривода на определенный угол, измеряет расстояние, масштабирует его, а затем возвращает полученное значение в цикл loop(). Какой диапазон значений выбрать для свето
- 107 -
диодов, зависит от конкретной ситуации. У меня для самого дальнего объекта датчик выдавал значение 50, до ближайших - 500.
После загрузки кода и запуска программы система должна функционировать, как на демонстрационных видеоклипах, перечисленных в начале главы.
Резюме
• Как работают двигатели постоянного тока.
• Что двигатели являются индуктивными нагрузками, которые следует снабдить надлежащей защитой и схемой питания, чтобы безопасно взаимодействовать с платой Arduino.
• Как управлять скоростью и направлением вращения двигателя с помощью ШИМ и H-моста.
• Что серводвигатели точно позиционируются и управляются с помощью Arduino библиотеки Servo.
• Как создать вторичный источник питания 5 В от батареи 9 В с помощью стабилизатора напряжения.
• Что ИК-датчики получают инфракрасный сигнал, отраженный от объекта, и возвращают аналоговые значения, соответствующие расстоянию до данного объекта.
• Что комментарии важны для отладки и совместного использования программ.
Глава 5. Работаем со звуком
Работаем
Для повторения примеров главы вам понадобятся следующие детали:
• плата Arduino Uno;
• USB-кабель;
• 4 кнопки;
• 5 резисторов номиналом 10 кОм;
• 1 резистор номиналом 150 Ом;
• перемычки;
• провода;
• макетная плата;
• потенциометр 10 кОм;
• динамик 8 Ом.
На странице http://www.exploringarduino.com/content/ch5 можно загрузить программный код, видеоуроки и другие материалы для данной главы. Кроме того, листинги примеров можно скачать со страницы www.wiley.com/go/exploringarduino в разделе Downloads.
Как известно, у человека пять органов чувств. Мы не будем задействовать вкус при общении с электронными компонентами, ведь никому не придет в голову облизывать Arduino! Запах нам тоже не пригодится, если вы почувствуете запах от платы, то скорее всего схема сгорела. Остаются осязание, зрение и слух. При работе с потенциометром и кнопками требуется осязание, а при включении светодиодов зрение. Без употребления остался только слух. Эта глава посвящена созданию звука с помощью Arduino, так что теперь ваши устройства обретут собственный "голос".
- 109 -
Генерировать звук с помощью Arduino можно несколькими способами. Самый простой способ - использование функции tone(), которую мы рассмотрим в данной главе. Существуют также различные дополнительные платы, подключаемые к основной плате Arduino с помощью штыревых разъемов и расширяющие музыкальные возможности Arduino. Некоторые из плат расширения мы рассмотрим в последующих главах. Если у вас плата Arduino Due, то для генерации звуков подойдет встроенный цифроаналоговый преобразователь (ЦАП).