Занятие 6 Аналоговый ввод. Курс Основы робототехники. Занятие 6 Аналоговый ввод
Скачать 1.08 Mb.
|
Курс «Основы робототехники». Занятие 6 |
Serial.begin(9600); // установить связь с компьютером со скоростью 9600 Serial.print("sensor = "); // вывести символы в кавычках "" Serial.print(sensorValue); // вывести значение, хранящееся в sensorValue Serial.print("\t"); // табуляция (аналогично нажатию кнопки Tab в Word’е Serial.println(outputValue); // вывести значение, хранящееся в outputValue и перейти на следующую строку |
откройте Монитор порта – кнопка с иконкой лупы справа сверху в среде разработки и убедитесь, что в Мониторе порта показываются числа, меняющиеся в зависимости от угла поворота резистора
Практическое занятие 3. Опрос аналогового датчика освещенности
Нужные компоненты:
фоторезистор
постоянный резистор на 1 кОм
светодиод с токоограничивающим резистором
провода со штырьками на обоих концах: красный (+5 В), синий или черный (Gnd), два произвольного цвета (но не красного, синего или черного)
научимся получать информацию с аналогового датчика, сопротивление которого меняется в зависимости от измеряемой величины (фоторезистор, терморезистор, магниторезистор). Для получения зависимости напряжения от сопротивления датчика нужно соберем делитель напряжения, состоящий из постоянного резистора и фоторезистора (схема справа)
для измерения напряжения на аналоговом входе (зависящем от уровня освещения фоторезистора) используйте программу Файл / Примеры / Analog / AnalogInOutSerial, выдающую данные в Монитор порта и зависимостью яркости светодиода
сделаем модель регулятора уровня освещения в комнате в зависимости от внешнего освещения: измените в программе на map(0, 1023, 0, 0, 255) и загрузите в контроллер. После этого светодиод должен гореть тем ярче, чем ниже освещение фоторезистора
Практическое занятие 4. Опрос аналогового датчика температуры
вместо фоторезистора подключите терморезистор (длинный зеленый резистор, согните ножки так, чтобы они входили в предыдущую схему вместо ножек фоторезистора)
откройте Монитор порта и запишите выдаваемые контроллером значения при комнатной температуре (без нагрева, 22С) и при температуре тела (36С, нагревать терморезистор пальцем и подождать, пока значение установится)
используя функцию map, напишите программу пересчета значений с аналогового датчика в градусы Цельсия и вывод в Монитор порта:
temperature = map(sensorValue, записанное значение при 22С, записанное значение при 36С, 22, 36);
Serial.print("temperature = " );
Serial.println(temperature);
загрузите программу в контроллер и убедитесь, что при изменении температуры терморезистора меняется значение, выдаваемое в Монитор порта
Практическое занятие 5. Опрос кнопок шилда с ЖК индикатором
В плате, устанавливаемой поверх Arduino Uno, содержащей ЖК индикатор и кнопки (LCD Shield) для опроса кнопок используется схема справа. В зависимости от нажатой кнопки меняется сопротивление нижнего резистора, соответственно, меняется напряжение на входе A0. Каждой нажатой кнопке соответствует определенное напряжение.
Эта схема позволяет подключить большое количество кнопок на один вход Arduino.
установите шилд с ЖК индикатором над Arduino Uno
загрузите программу Файл / Примеры / Analog / AnalogInOutSerial в контроллер
нажмите на все кнопки по очереди (кроме Reset) и запишите значения уровней, выдаваемые Монитором порта
подключите к плате пять светодиодов разных цветов с токоограничивающими резисторами
напишите программу, которая включает определенный светодиод при нажатии на определенную кнопку. Для облегчения программирования условий запишите значения, полученные для каждой кнопки, в переменные right, up и т.д. Приведен фрагмент кода программы:
int right = 0; // значение, выдаваемое при нажатии кнопки Right
int up = 100; // значение, выдаваемое при нажатии кнопки Up
int down = 200; // значение, выдаваемое при нажатии кнопки Down
int left = 300; // значение, выдаваемое при нажатии кнопки Left
int select = 400; // значение, выдаваемое при нажатии кнопки Select
…
if (sensorValue == right) { // если снятое с аналогового входа значение равно значению, определенному для нажатия кнопки Right
digitalWrite(led_right, HIGH); // зажжем светодиод индикации Вправо
}
else { // иначе
digitalWrite(led_right, LOW); // погасим светодиод индикации Вправо
}
…
загрузите написанную программу в контроллер и убедитесь, что при нажатии на ЖК шилде на кнопку загорается соответствующий светодиод
Практическое занятие 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, зеленый – когда больше |