конспект хакера 20 мини проектов читать онлайн

Хотите попробовать Arduino, но нет времени на чтение книжек? С этим руководством вы сможете в кратчайшие сроки опробовать в действии бо́льшую часть функций Arduino.

В брошюре кратко, но в то же время доступно описываются все основные понятия, необходимые для реализации собственных электронных идей. Брошюра идеально подходит в качестве руководства по использованию наборов «Матрёшка». На самом деле конспект создан специально для них и уже включён в комплект «Матрёшек». Однако, если у вас уже есть Arduino и радиодетали, можете приобрести конспект отдельно.

Первая часть брошюры представляет собой вводную в электричество. В ней объясняются такие простые понятия, как резистор, электрическая схема, закон Ома и т.д. Чтобы теория не забылась, а прочно укоренилась в уме начинающего, во второй части брошюры приведены 20 простых заданий.

При написании брошюры приоритетными задачами были краткость и доступность, а не точность и общность. На 84-х страницах описаны, конечно, далеко не все аспекты схемотехники и функции Arduino. Брошюра призвана заинтересовать начинающего, избавить от рутины и в максимально сжатые сроки помочь определиться: нужно ему это или нет.

Данные


КОНСПЕКТ ХАКЕРА 20 МИНИ ПРОЕКТОВ ЧИТАТЬ ОНЛАЙН

Ножки тактовой кнопки, расположенные с одной стороны, разомкнуты, когда кнопка не нажата. Ножки, расположенные друг напротив друга на противоположных сторонах макетки находятся на одной «рельсе». Воспользовавшись этим, мы можем расположить резистор с одной стороны макетки, а провод, подключаемый к порту Arduino, с другой стороны.

В данном эксперименте мы подключаем кнопки по с подтягивающим резистором.

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

// на основе номера кнопки вычисляем номер её пина keyPin = i + FIRST_KEY_PIN;

// считываем значение с кнопки. Возможны всего 2 варианта:

// * высокий сигнал, 5 вольт, истина — кнопка отпущена

// * низкий сигнал, земля, ложь — кнопка зажата boolean keyUp = digitalRead

// проверяем условие «если не кнопка отпущена». Знак «!»

// рассчитываем высоту ноты в герцах в зависимости от

// клавиши, которую рассматриваем на данном этапе цикла.

// Мы получим значение 3500, 4000 или 4500

// Заставляем пищалку пищать с нужной частотой в течение

// 20 миллисекунд. Если клавиша останется зажатой, пищалка

// вновь зазвучит при следующем проходе loop, а мы услышим

// непрерывный звук


КОНСПЕКТ ХАКЕРА 20 МИНИ ПРОЕКТОВ ЧИТАТЬ ОНЛАЙН

Пояснения к коду

Благодаря тому, что в начале программы мы определили и , мы можем подключать произвольное количество кнопок к любым идущим друг за другом цифровым пинам, и для корректировки программы нам не придется менять параметры цикла . Изменить понадобится лишь эти константы:

цикл в любом случае пробегает от 0 до ;

перед считыванием порта мы задаем смещение на номер первого используемого порта —

возвращает состояние порта, номер которого передан ей параметром . Это может быть состояние или . Или, выражаясь иначе: высокое напряжение или низкое, 1 или 0, или

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

Мы используем логический оператор отрицания «не» . Если имеет значение 0,

выражениебудет иметь значение 1 и наоборот.

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

Действия, описанные в условном выражении , выполняются, когда его условие имеет значение «истина» (единица). Поэтому для выполнения действия по нажатию, мы инвертируем сигнал с кнопки.

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

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

Каким образом мы избежали написания отдельного когда для чтения каждой кнопки?

Почему разные «ноты», издаваемые пищалкой, звучат с разной громкостью?

Для чего мы использовали оператор логического отрицания ?

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

Сделайте так, чтобы наше пианино звучало в диапазоне от 2 кГц до 5 кГц.

Добавьте еще 2 кнопки и измените программу так, чтобы можно было извлечь 5 различных нот.

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

Эксперимент 9. Миксер

Список деталей для эксперимента

, если вы используете мотор с проводами, которые плохо втыкаются в макетку Для дополнительного задания

еще 1 кнопка

еще 2 провода


КОНСПЕКТ ХАКЕРА 20 МИНИ ПРОЕКТОВ ЧИТАТЬ ОНЛАЙН

Схема на макетке

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

Не перепутайте полярность диода, иначе, открыв транзистор, вы устроите короткое замыкание!

Причину отсутствия подтягивающих/стягивающих резисторов в схеме вы поймете, ознакомившись с программой.

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

// скорость (англ. speed) мотора при нажатии очередной кнопки

#define SPEED_STEP (255 / (BUTTON_COUNT – 1))

// на самом деле, в каждом пине уже есть подтягивающий

// резистор. Для его включения необходимо явно настроить пин

// как вход с подтяжкой (англ. input with pull up)


КОНСПЕКТ ХАКЕРА 20 МИНИ ПРОЕКТОВ ЧИТАТЬ ОНЛАЙН

i = ; i < BUTTON_COUNT; ++ipinModei + FIRST_BUTTON_PIN, INPUT_PULLUP;

// если кнопка отпущена, нам она не интересна. Пропускаем

// оставшуюся часть цикла for, продолжая (англ. continue) // его дальше, для следующего значения i

digitalReadi + FIRST_BUTTON_PIN;

// кнопка нажата — выставляем соответствующую ей скорость

// мотора. Нулевая кнопка остановит вращение, первая

// заставит крутиться в полсилы, вторая — на полную speed = i * SPEED_STEP;

// подача ШИМ-сигнала на мотор заставит его крутиться с

// указанной скоростью: 0 — стоп машина, 127 — полсилы,

// 255 — полный вперёд!

Мы использовали новый режим работы портов: . На цифровых портах Arduino есть встроенные подтягивающие резисторы, которые можно включить указанным образом одновременно с настройкой порта на вход. Именно поэтому мы не использовали резисторы при сборке схемы.

На каждой итерации цикла мы задаем мотору скорость вращения, пропорциональную текущему значению счетчика. Но выполнение инструкций не дойдет до назначения новой скорости, если при проверке нажатия кнопки она окажется отпущенной.

Инструкция , которая выполнится в этом случае, отменит продолжение данной итерации цикла и выполнение программы продолжится со следующей. А мотор будет крутиться со скоростью, заданной при последнем нажатии на какую-то из кнопок.

Зачем в схеме использован диод?

Почему мы использовали полевой MOSFET-транзистор, а не биполярный?

Почему мы не использовали резистор между портом Arduino и затвором транзистора?

Как работает инструкция , использованная в цикле ?

Внесите единственное изменение в программу, после которого максимальной скоростью вращения мотора составит половину от возможной.

Перепишите программу без использования инструкции .

Добавьте в схему еще одну кнопку, чтобы у миксера стало три режима. Понадобилось ли изменять что-либо в программе?


КОНСПЕКТ ХАКЕРА 20 МИНИ ПРОЕКТОВ ЧИТАТЬ ОНЛАЙН

Эксперимент 10. Кнопочный переключатель

номиналом 220 Ом


КОНСПЕКТ ХАКЕРА 20 МИНИ ПРОЕКТОВ ЧИТАТЬ ОНЛАЙН

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

Также полезно руководствоваться соображениями аккуратности изделия, поэтому катод светодиода мы соединяем с другим входом GND отдельным проводом, который не мешает нам работать в середине макетки.

boolean buttonWasUp = // была ли кнопка отпущена? boolean ledEnabled = // включен ли свет?

pinModeLED_PIN, OUTPUT; pinModeBUTTON_PIN, INPUT_PULLUP;

// определить момент «клика» несколько сложнее, чем факт того,

// что кнопка сейчас просто нажата. Для определения клика мы

boolean buttonIsUp = digitalReadBUTTON_PIN;

// возникающий в момент замыкания/размыкания пластин кнопки,

// запоминаем последнее состояние кнопки для новой итерации


КОНСПЕКТ ХАКЕРА 20 МИНИ ПРОЕКТОВ ЧИТАТЬ ОНЛАЙН

buttonWasUp = buttonIsUp;

Поскольку мы сконфигурировали вход кнопки как , при нажатии на кнопку на данном входе мы будем получать 0. Поэтому мы получим значение («истина») в булевой переменной(«кнопка отпущена»), когда кнопка отпущена.

(«и») возвращает значение «истина» только в случае истинности обоих его операндов. Взглянем на так называемую таблицу истинности для

выражения buttonWasUp && !buttonIsUp («кнопка была отпущена и кнопка не отпущена»):

Здесь рассмотрены все возможные сочетания предыдущего и текущего состояний кнопки и мы видим, что наш условный оператор сработает только в случае, когда кнопка нажата только что: предыдущее состояние 1 («была отпущена»), а текущее 0 («не отпущена»).

Через 10 миллисекунд мы проверяем еще раз, нажата ли кнопка: этот интервал больше, чем длительность «дребезга», но меньше, чем время, за которое человек успел бы дважды нажать на кнопку. Если кнопка всё еще нажата, значит, это был не дребезг.

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

Последняя инструкция в buttonWasUp = buttonIsUp сохраняет текущее состояние кнопки в переменную предыдущего состояния, ведь на следующей итерации текущее состояние уже станет историей.

В каком случае оператор возвращает значение «истина»?

Что такое «дребезг»?

Как мы с ним боремся в программе?

Как можно избежать явного указания значения уровня напряжения при вызове ?

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

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


КОНСПЕКТ ХАКЕРА 20 МИНИ ПРОЕКТОВ ЧИТАТЬ ОНЛАЙН

Начало работы с Arduino

Если у вас Windows и Arduino IDE из zip-файла, установите драйверы из папки

Подключите Arduino к компьютеру через USB

Запустите Arduino IDE

Жмите «Upload» на панели инструментов для прошивки платы!

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

Внешний вид Arduino IDE

Если прошивка не удаётся

Плата получает питание, горит светодиод «ON»

Драйверы под Windows установились корректно, и в диспетчере устройств вы видите устройство «Arduino Uno»

Вы выбрали правильную модель платы и правильный порт (пункты 5 и 6)


КОНСПЕКТ ХАКЕРА 20 МИНИ ПРОЕКТОВ ЧИТАТЬ ОНЛАЙН

Эксперимент 1. Маячок

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

Катод («минус») светодиода — короткая ножка, именно её нужно соединять с землёй (GND)

Не пренебрегайте резистором, иначе светодиод выйдет из строя


КОНСПЕКТ ХАКЕРА 20 МИНИ ПРОЕКТОВ ЧИТАТЬ ОНЛАЙН

Выбрать резистор нужного номинала можно с помощью или с помощью мультиметра в режиме измерения сопротивления

Плата Arduino имеет три пина GND, используйте любой из них

// настраиваем пин №13 в режим выхода,

// т.е. в режим источника напряжения

// подаём на пин 13 «высокий сигнал» (англ. «high»), т.е.

// выдаём 5 вольт. Через светодиод побежит ток.

// Это заставит его светиться

// задерживаем (англ. «delay») микроконтроллер в этом

// состоянии на 100 миллисекунд

// подаём на пин 13 «низкий сигнал» (англ. «low»), т.е.

// выдаём 0 вольт или, точнее, приравниваем пин 13 к земле.

// В результате светодиод погаснет

// замираем в этом состоянии на 900 миллисекунд

// после «размораживания» loop сразу же начнёт исполняться

// вновь, и со стороны это будет выглядеть так, будто

// светодиод мигает раз в 100 мс + 900 мс = 1000 мс = 1 сек

выполняется один раз при запуске микроконтроллера. Обычно она используется для конфигурации портов микроконтроллера и других настроек

запускается процедура , которая выполняется в бесконечном цикле. Именно этим мы пользуемся в данном примере, чтобы маячок мигал постоянно

и должны присутствовать в любой программе (скетче), даже если вам не нужно ничего выполнять в них — пусть они будут пустые, просто не пишите ничего между фигурными скобками. Например:


КОНСПЕКТ ХАКЕРА 20 МИНИ ПРОЕКТОВ ЧИТАТЬ ОНЛАЙН

Обращайте внимание на в концах строк. Не стирайте их там, где они есть, и не добавляйте лишних. Вскоре вы будете понимать, где они нужны, а где нет.

не возвращает никакого значения и принимает два параметра:

— номер цифрового порта, на который мы отправляем сигнал

— значение, которое мы отправляем на порт. Для цифровых портов значением может быть(высокое, единица) или (низкое, ноль)

Если в качестве второго параметра вы передадите функции значение,

отличное от ,, или , компилятор может не выдать ошибку, но считать, что передано . Будьте внимательны

Обратите внимание, что использованные нами константы: , , , , пишутся заглавными буквами, иначе компилятор их не распознает и выдаст ошибку. Когда ключевое слово распознано, оно подсвечивается синим цветом в Arduino IDE

Что будет, если подключить к земле анод светодиода вместо катода?

Что будет, если подключить светодиод с резистором большого номинала (например, 10 кОм)?

Что будет, если подключить светодиод без резистора?

Зачем нужна встроенная функция ? Какие параметры она принимает?

С помощью какой встроенной функции можно заставить микроконтроллер ничего не делать?

В каких единицах задается длительность паузы для этой функции?

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

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

Эксперимент 2. Маячок с нарастающей яркостью

еще 1 светодиод

еще 1 резистор номиналом 220 Ом


КОНСПЕКТ ХАКЕРА 20 МИНИ ПРОЕКТОВ ЧИТАТЬ ОНЛАЙН

Не любой порт Arduino поддерживает , если вы хотите регулировать напряжение, вам подойдут пины, помеченные символом тильда «~». Для

Arduino Uno это пины 3, 5, 6, 9, 10, 11

// даём разумное имя для пина №9 со светодиодом

// (англ. Light Emitting Diode или просто «LED»)

// Так нам не нужно постоянно вспоминать куда он подключён

#define LED_PIN 9

// настраиваем пин со светодиодом в режим выхода,

// как и раньше

// выдаём неполное напряжение на светодиод

// (он же ШИМ-сигнал, он же PWM-сигнал).

// Микроконтроллер переводит число от 0 до 255 к напряжению

// от 0 до 5 В. Например, 85 — это 1/3 от 255, // т.е. 1/3 от 5 В, т.е. 1,66 В.

// держим такую яркость 250 миллисекунд


КОНСПЕКТ ХАКЕРА 20 МИНИ ПРОЕКТОВ ЧИТАТЬ ОНЛАЙН

// выдаём 170, т.е. 2/3 от 255, или иными словами — 3,33 В.

// Больше напряжение — выше яркость!

// все 5 В — полный накал!

// ждём ещё немного перед тем, как начать всё заново

Идентификаторы переменных, констант, функций (в этом примере идентификатор )

являются одним словом (т.е. нельзя создать идентификатор ).

Идентификаторы могут состоять из латинских букв, цифр и символов подчеркивания . При этом идентификатор не может начинаться с цифры.

Регистр букв в идентификаторе имеет значение. Т.е. , и с точки зрения компилятора — различные идентификаторы

Идентификаторы, создаваемые пользователем, не должны совпадать с предопределенными идентификаторами и стандартными конструкциями языка; если среда разработки подсветила введенный идентификтор каким-либо цветом, замените его на другой

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

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


КОНСПЕКТ ХАКЕРА 20 МИНИ ПРОЕКТОВ ЧИТАТЬ ОНЛАЙН

помещается между парой слеш-звездочка и звездочка-слеш */

— номер порта, на который мы отправляем сигнал

— значение , которое мы отправляем на порт. Он может принимать целочисленное значение от 0 до 255, где 0 — это 0%, а 255 — это 100%

Какие из следующих идентификаторов корректны и не вызовут ошибку?

Что произойдет, если создать директиву #define HIGH LOW?

Почему мы не сможем регулировать яркость светодиода, подключенного к порту 7?

Какое усреднённое напряжение мы получим на пине 6, если вызовем функцию ?

Какое значение параметра нужно передать функции , чтобы получить усреднённое напряжение 2 В?

Отключите питание, отключите светодиод от 9-го порта и подключите к 11-му. Измените программу так, чтобы схема снова заработала

Измените код программы так, чтобы в течение секунды на светодиод последовательно подавалось усреднённое напряжение 0, 1, 2, 3, 4, 5 В

Возьмите еще один светодиод, резистор на 220 Ом и соберите аналогичную схему на этой же макетке, подключив светодиод к пину номер 3 и другому входу GND, измените программу так, чтобы светодиоды мигали в противофазу: первый выключен, второй горит максимально ярко и до противоположного состояния

Эксперимент 3. Светильник с управляемой яркостью

Видеоурок

setup

// настраиваем пин №13 в режим выхода,
// т.е. в режим источника напряжения
pinMode, OUTPUT

 
loop

// подаём на пин 13 «высокий сигнал» (англ. «high»), т.е.
// выдаём 5 вольт. Через светодиод побежит ток.
// Это заставит его светиться
digitalWrite, HIGH
 
// задерживаем (англ. «delay») микроконтроллер в этом
// состоянии на 100 миллисекунд
delay
 
// подаём на пин 13 «низкий сигнал» (англ. «low»), т.е.
// выдаём 0 вольт или, точнее, приравниваем пин 13 к земле.
// В результате светодиод погаснет
digitalWrite, LOW
 
// замираем в этом состоянии на 900 миллисекунд
delay
 
// после «размораживания» loop сразу же начнёт исполняться
// вновь, и со стороны это будет выглядеть так, будто
// светодиод мигает раз в 100 мс + 900 мс = 1000 мс = 1 сек

Пояснения к коду


КОНСПЕКТ ХАКЕРА 20 МИНИ ПРОЕКТОВ ЧИТАТЬ ОНЛАЙН

// откройте окно Serial Monitor в среде Arduino, оставьте на

// сутки, скопируйте данные в Excel, чтобы построить графики

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

В данном эксперименте мы знакомимся со стандартным объектом , который предназначен для работы с последовательным портом (UART) Arduino, и его методами (функциями, созданными для работы с данным объектом) , и ,

которые вызываются после точки, идущей за именем объекта:

делает то же самое, только добавляет в конце невидимый символ новой строки.

и можно использовать второй необязательный параметр: выбор системы счисления, в которой выводить число (это может быть , , , для десятичной, двоичной, шестнадцатеричной и восьмеричной систем счисления соответственно) или количество знаков после запятой для дробных чисел.

в мониторе порта даст результат

Монитор порта, входящий в Arduino IDE, открывается через меню Сервис или сочетанием клавиш Ctrl+Shift+M. Следите за тем, чтобы в мониторе и в скетче была указана одинаковая скорость обмена данными, . Скорости 9600 бит в секунду обычно достаточно. Другие стандартные значения можете посмотреть в выпадающем меню справа внизу окна монитора порта.


КОНСПЕКТ ХАКЕРА 20 МИНИ ПРОЕКТОВ ЧИТАТЬ ОНЛАЙН

Вам не удастся использовать цифровые порты 0 и 1 одновременно с передачей данных по последовательному порту, потому что по ним также идет передача данных, как и через USBпорт платы.

При запуске монитора порта скетч в микроконтроллере перезагружается и начинает работать с начала. Это удобно, если вам нельзя упустить какие-то данные, которые начинаю передаваться сразу же. Но в других ситуациях это может мешать, помните об этом нюансе!

Если вы хотите читать какие-то данные в реальном времени, не забывайте

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

выводится как символ табуляции (8 пробелов с выравниванием).

Также вы можете использовать, например, последовательность для перевода строки.

Если вы хотите использовать обратный слеш, его нужно экранировать вторым таким же: .

Какие действия нужно предпринять, чтобы читать на компьютере данные с Arduino?

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

Как избежать ошибки в передаче данных, содержащих обратный слэш ()?

Перед таблицей данных о температуре добавьте заголовок (например, “Meteostation”).

Добавьте столбец, содержащий количество секунд, прошедших с момента запуска микроконтроллера. Можно уменьшить интервал передачи данных.


КОНСПЕКТ ХАКЕРА 20 МИНИ ПРОЕКТОВ ЧИТАТЬ ОНЛАЙН

Эксперимент 17. Пантограф

1 конденсатор емкостью 220 мкФ


КОНСПЕКТ ХАКЕРА 20 МИНИ ПРОЕКТОВ ЧИТАТЬ ОНЛАЙН

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

Не забывайте про то, что нужно соблюдать полярность элетролитического конденсатора. Короткая ножка (со стороны белой полосы на корпусе) — «минус».

Вы можете соединить провод сервопривода с макетной платой проводами «папа-папа»: коричневый это земля, красный — питание, оранжевый — сигнал.

В данном эксперименте мы подключаем питние сервопривода к 5V-выходу Arduino. С одним сервоприводом плата справится, но если в каком-либо проекте вам нужно больше серв, используйте специальные платы-драйвера с отдельным источником питания для серв.

// управлять сервоприводами (англ. servo motor) самостоятельно

// не так то просто, но в стандартной библиотеке уже всё

// заготовлено, что делает задачу тривиальной

#define POT_MAX_ANGLE 270.0 // макс. угол поворота потенциометра

// объявляем объект типа Servo с именем myServo. Ранее мы

// использовали int, boolean, float, а теперь точно также

// используем тип Servo, предоставляемый библиотекой. В случае

// Serial мы использовали объект сразу же: он уже был создан

// для нас, но в случае с Servo, мы должны сделать это явно.

// Ведь в нашем проекте могут быть одновременно несколько

// приводов, и нам понадобится различать их по именам

// прикрепляем (англ. attach) нашу серву к 9-му пину. Явный

// вызов pinMode не нужен: функция attach сделает всё за нас

val = analogReadA0;

// на основе сигнала понимаем реальный угол поворота движка.

// Используем вещественные числа в расчётах, но полученный

// результат округляем обратно до целого числа val / 1024.0 * POT_MAX_ANGLE

// обычная серва не сможет повторить угол потенциометра на

// всём диапазоне углов. Она умеет вставать в углы от 0° до

// 180°. Ограничиваем угол соответствующе


КОНСПЕКТ ХАКЕРА 20 МИНИ ПРОЕКТОВ ЧИТАТЬ ОНЛАЙН

angle = constrainangle, , ;

// и, наконец, подаём серве команду встать в указанный угол

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

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

Далее мы используем два метода для работы с ним:

— сначала «подключаем» серву к порту, с которым физически соединен его сигнальный провод. не нужна, метод займется

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

здесь это имя объекта, идентификатор, который мы придумываем так же, как названия переменных. Например, если вы хотите управлять двумя захватами, у вас могут быть объекты и .

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

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

Каким образом библиотека позволяет нам работать с сервоприводом?

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

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

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

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


КОНСПЕКТ ХАКЕРА 20 МИНИ ПРОЕКТОВ ЧИТАТЬ ОНЛАЙН

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

номиналом 10 кОм


КОНСПЕКТ ХАКЕРА 20 МИНИ ПРОЕКТОВ ЧИТАТЬ ОНЛАЙН

Мы подключаем «плюс» батарейки через делитель напряжения с равными плечами (R1 = R2 = 10 кОм), таким образом деля подаваемое напряжение пополам. Поскольку в аналоговый вход Arduino мы можем подавать до 5В, мы можем измерять напряжение до 10В. Не пробуйте измерять большее напряжение, вы можете повредить плату!

На принципиальной схеме внутри изображения дисплея подписаны названия его выводов согласно datasheet, а снаружи — номера его ножек.

ЖК-дисплея нумеруются не подряд: 15 и 16 ножки находятся перед 1.

Диод пригодится, если пользователь тестера перепутает «+» и «-» батарейки, главное нам самим не забыть про направление, в котором через диод может течь ток, и установить его верно!

// Подключаем библиотеку для работы с жидкокристаллическим

// на диоде, защищающем от неверной полярности, падает доля

// напряжения (англ. voltage drop). Необходимо это учитывать

#define DIODE_DROP 0.7

// Объявляем объект, для управления дисплеем. Для его создания

// необходимо указать номера пинов, к которым он подключен в


КОНСПЕКТ ХАКЕРА 20 МИНИ ПРОЕКТОВ ЧИТАТЬ ОНЛАЙН

// печатаем напряжение в батарейке с точностью до сотых долей

// следом печатаем единицы измерения

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

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

с помощью которого мы задаем количество колонок и строк нашего дисплея

для вывода данных. У него есть второй необязательный

параметр , передав который, можно выбрать систему счисления, так же, как в

устанавливает курсор в переданную колонку и строку. Последующий вывод будет осуществляться с этого места.

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

О том, как выводить текст кириллицей, и о других подробностях работы с дисплеем в нашей вики есть отдельная .

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

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

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

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

Возможно, вы захотите воспользоваться еще одним методом вашего объекта — : он очищает экран и устанавливает курсор в левую колонку верхней строчки.

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

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

Теперь вы можете выводить без компьютера и проводов любые данные, с которыми работаете, и использовать это как в режиме эксплуатации вашего устройства, так и во время отладки!


КОНСПЕКТ ХАКЕРА 20 МИНИ ПРОЕКТОВ ЧИТАТЬ ОНЛАЙН

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

// для работы с текстом существуют объекты-строки (англ. string)

Про урокцифры:  УРОК ЦИФРЫ ЛИЦО

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *