- •Курс «Основы робототехники». Занятие 6 Аналоговый ввод
- •Применение аналогового ввода:
- •Практическое занятие 1. Опрос переменного резистора
- •Практическое занятие 2. Управление яркостью светодиода, чтение в Монитор порта
- •Практическое занятие 3. Опрос аналогового датчика освещенности
- •Практическое занятие 4. Опрос аналогового датчика температуры
- •Практическое занятие 5. Опрос кнопок шилда с жк индикатором
- •Практическое занятие 6. Робот-светофил или следующий по линии, на фоторезисторах
- •Домашнее задание
Практическое занятие 6. Робот-светофил или следующий по линии, на фоторезисторах
Реализация простейшего зрения для робота, позволяющего ехать на источник света или двигаться по линии на полу
Нужные компоненты:
два фоторезистора
два постоянных резистора на 10 кОм
провода со штырьками на обоих концах: два красных (+5 В), четыре произвольного цвета (но не красного, синего или черного)
соберите схему опроса двух фоторезисторов:
загрузите в контроллер следующую программу:
int photoPin1 = A0; // первый фоторезистор подключен к аналоговому входу A0
int photoPin2 = A1; // второй фоторезистор подключен к аналоговому входу A1
int ledPin1 = 9; // первый светодиод подключается к digital pin 9
int ledPin2 = 7; // первый светодиод подключается к digital pin 7
int val1 = 0; // значение с фоторезистора 1
int val2 = 0; // значение с фоторезистора 2
void setup()
{
Serial.begin(9600);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
}
void loop() {
val1 = analogRead(photoPin1); // считываем значение с фоторезистора 1
val2 = analogRead(photoPin2); // считываем значение с фоторезистора 2
Serial.print("values: "); // выводим значения в COM-порт
Serial.print(val1);
Serial.print("\t");
Serial.println(val2);
if(val1==val2) // если значения равны - зажигаем оба светодиода
{
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, HIGH);
Serial.println("forward"); // едем вперед
}
if(val1 > val2) // если освещённость первого больше – зажигаем
{ // первый светодиод, а второй гасим
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, LOW);
Serial.println("left"); // едем влево
}
else // если освещённость второго больше – зажигаем
{ // второй светодиод, а первый гасим
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin1, LOW);
Serial.println("right"); // едем вправо
}
delay(200);
}
убедитесь, что поведение светодиодов и выдаваемые в Монитор порта команды соответствуют нужным – при подключении моторов вместо светодиодов (через драйвер двигателя) робот ехал бы на свет
Домашнее задание
Примечание: если Вы уже имеете собственный контроллер, но еще не имеете дополнительных компонентов к нему, для возможности опробовать написанную программу дома, обратитесь к преподавателю для получения компонентов для выполнения, которые нужно вернуть на следующем занятии.
Задача. Аналоговый датчик + светодиоды
№ |
Задание |
№ |
Задание |
1 |
Переменный резистор и 2 светодиода, мигающие по очереди с частотой, зависящей от угла поворота резистора |
10 |
Терморезистор, два светодиода. Вывод температуры в Монитор порта, три уровня температуры: холодно – горят оба светодиода, средне – один, тепло – ни одного (модель нагревателя)
|
2 |
Переменный резистор, выдающий в Монитор порта угол поворота: 0, если резистор в 0 положении, 180, если повернут на 180 и т.д. |
11 |
Три фоторезистора. Темно на среднем и светло на крайних – в Монитор порта команда «Forward». Темно на левом – команда «Right». . Темно на правом – команда «Left» (модель робота на линии)
|
3 |
Терморезистор, один светодиод. Светодиод загорается, когда температура на терморезисторе ниже определенного уровня
|
12 |
Фоторезистор. В зависимости от уровня освещенности контроллер выводит в Монитор порта сообщение «Temno» «Sredne» или «Svetlo» |
4 |
Фоторезистор, один светодиод. Светодиод загорается, когда яркость на фоторезисторе ниже определенного уровня (прикрыт рукой)
|
13 |
Терморезистор, два светодиода. Если температура ниже определенного уровня – горит один светодиод, если выше – горит другой светодиод |
5 |
Фоторезистор, два светодиода. Фоторезистор имитирует компас: крайние положения – 0 и 360 – юг, среднее положение 180 – север. Вывести в Монитор порта пересчитанный угол поворота резистора и команды: если <175 – команда «Left», горит З, > 185– команда «Right», горит К, от 175 до 185 – команда «Forward», горят оба светодиода (модель робота с компасом) |
14 |
Светодиод, фоторезистор. Вывести полученные с фоторезистора значения в Монитор порта. При освещенности ниже определенного уровня (фоторезистор закрыт рукой) светодиод горит, а при большей освещенности (фоторезистор открыт) светодиод не горит |
6 |
Терморезистор и 5 светодиодов. Количество горящих светодиодов зависит от температуры терморезистора (от 22 до 36 градусов) |
15 |
5 светодиодов, переменный резистор. Вывести значения с него в формате напряжения (от 0 до 5 Вольт) на Монитор порта. Формат строчки сообщения: «Voltage = X». Если напряжение на резисторе: меньше 0,5 В – светодиоды не горят 0,5…1,5 В – горит один светодиод 1,5…2,5 В – горит два светодиода 2,5…3,5 В – горят три светодиода 3,5…4,5 В – горят четыре светодиода больше 4,5 В – горят пять светодиодов |
7 |
Переменный резистор и 5 светодиодов. Количество горящих светодиодов зависит от угла поворота резистора |
16 |
Терморезистор. В зависимости от уровня температуры контроллер выводит в Монитор порта сообщение «Holodno» «Sredne» или «Teplo» |
8 |
Фоторезистор, два светодиода. Если освещенность ниже определенного уровня – горит один светодиод, если выше – горит другой светодиод |
17 |
Два терморезистора. Вывод в Монитор порта температуру обоих и разницу между показаниями в градусах Цельсия |
9 |
Светодиод, терморезистор. Сделать зависимость яркости мигания от температуры, измеренной датчиком. |
18 |
Переменный резистор, 2 светодиода – красный и зеленый. В Монитор порта вывести угол поворота: 0, если резистор в 0 положении, 180, если повернут на 180 и т.д. Горит красный светодиод, когда угол меньше 90, зеленый – когда больше |