Изучаем 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, то для генерации звуков подойдет встроенный цифроаналоговый преобразователь (ЦАП).