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 Ом;