Зачем нужен конденсатор при включении в схему сервопривода?

Конденсатор в данной схеме нам нужен для того, чтобы при включении сервопривода избежать просадки питания платы.

2.Каким образом библиотека <Servo.h> позволяет нам работать с сервоприводом?

В библиотеке есть всё для управления сервоприводом, нужно только её подключить.

Зачем мы ограничиваем область допустимых значений для angle?

обычная серва не сможет повторить угол потенциометра на всём диапазоне углов. Она умеет вставать в углы от 0° до 180°. Ограничиваем угол соответствующе.

Как быть уверенным в том, что в переменную типа int после вычислений попадет корректное значение?

Мы использовали функцию int() для явного преобразования числа с плавающей точкой в целочисленное значение. Она принимает в качестве параметра значение любого типа, а возвращает целое число. Когда в одном выражении мы имеем дело с различными типами данных, нужно позаботиться о том, чтобы не получить непредсказуемый ошибочный результат.

Задания для самостоятельного решения

1.Измените программу так, чтобы по мере поворота ручки потенциометра, сервопривод последовательно занимал 8 положений: 45, 135, 87, 0, 65, 90, 180, 150°.

Предположим, что сервопривод управляет шторкой, и нам нужно поддерживать постоянное количество света в помещении. Создайте такой механизм.

Эксперимент 18. Тестер батареек

В этом эксперименте мы выводим на жидкокристаллический дисплей данные о напряжении, измеренном на батарейке.

Схема

Код

#include <LiquidCrystal.h>

#define DIODE_DROP 0.7

LiquidCrystal lcd(13, 12, 11, 10, 9, 8);

void setup()

{

pinMode(7, OUTPUT);

lcd.begin(16, 2);

lcd.print("Battery voltage:");

}

void loop()

{

digitalWrite(7, HIGH);

float voltage = analogRead(A0) / 1024.0 * 10.0;

if (voltage > 0.1)

voltage += DIODE_DROP;

lcd.setCursor(0, 1);

lcd.print(voltage, 2);

lcd.print(" Volts");

}

Вопросы для проверки себя

Из-за чего измерения напряжения в этом эксперименте могут быть неточными (на что мы можем повлиять)?

Из-за падения напряжения на диоде, нужно прибавить это падение к конечному результату.

Какая библиотека облегчает работу с нашим текстовым экраном? Какие шаги нужно предпринять до начала вывода текста на него?

В этом эксперименте мы снова пользуемся готовой библиотекой <LiquidCrystal.h> для создания объекта lcd и использования его методов

· lcd.begin(cols,rows) с помощью которого мы задаем количество колонок и строк нашего дисплея

· lcd.print(data) для вывода данных. У него есть второй необязательный параметр BASE, передав который, можно выбрать систему счисления, так же, как в примере с Serial.print().

· lcd.setCursor(col,row) устанавливает курсор в переданную колонку и строку. Последующий вывод будет осуществляться с этого места.

Каким образом мы задаем позицию, с которой на экран выводится текст?

Сообщаем объекту количество

// строк и столбцов. Опять же, вызывать pinMode не требуется:

// функция begin сделает всё за нас

lcd.begin(16, 2);

// печатаем сообщение на первой строке

Можем ли мы писать на экране кириллицей? Как?

Можем, если закодируем каждую букву в шестнадцатеричной системе.

Задания для самостоятельного решения

Создайте секундомер, который будет отсчитывать время, прошедшее с начала работы Arduino и выводить секунды и сотые секунд на экран.

Совместите отсчет времени и измерение напряжения. Отобразите все данные на дисплее. Отправляйте их раз в 10 секунд на компьютер.

Эксперимент 19. Светильник, управляемый по USB

В этом эксперименте мы отправляем устройству команды, как ему светить.

Схема

Код

#define LED_PIN 9

String message;

void setup()

{

pinMode(LED_PIN, OUTPUT);

Serial.begin(9600);

}

void loop()

{

while (Serial.available()) {

char incomingChar = Serial.read();

if (incomingChar >= '0' && incomingChar <= '9') {

message += incomingChar;

} else if (incomingChar == '\n') {

analogWrite(LED_PIN, message.toInt());

message = "";

}

}

}

Вопросы для проверки себя

Наши рекомендации