LXF151:Arduino: Начнем знакомство
Ssr (обсуждение | вклад) (Новая страница: «Arduino Освежив в памяти закон Ома, создадим нашу первую умную схему Arduino: Начнем знакомст…») |
Ssr (обсуждение | вклад) |
||
Строка 86: | Строка 86: | ||
АЦП в микросхеме Atmega нужно некоторое время, чтобы вернуться в рабочее состояние, поэтому добавьте небольшую задержку между операциями считывания аналоговых значений, если важна точность. | АЦП в микросхеме Atmega нужно некоторое время, чтобы вернуться в рабочее состояние, поэтому добавьте небольшую задержку между операциями считывания аналоговых значений, если важна точность. | ||
− | + | file:///home/ssr/Downloads/LXF151/lxf151-11f-tut-arduino-web-resources/image/LXF146.sup_php.arduino_opt.jpeg Включите монитор последовательного порта в IDE Arduino и следите за показаниями. | |
+ | === Идем дальше === | ||
Если вы просто хотите знать, светло или темно, использование аналогового входа – напрасная трата ресурсов. Поэтому датчики часто применяются только для установки событий – жарко/темно/влажно и т. п., и все, что нам нужно – установить их выход в логическую «единицу» или «ноль». | Если вы просто хотите знать, светло или темно, использование аналогового входа – напрасная трата ресурсов. Поэтому датчики часто применяются только для установки событий – жарко/темно/влажно и т. п., и все, что нам нужно – установить их выход в логическую «единицу» или «ноль». | ||
Можно просто подключить делитель напряжения к цифровому входу, но результаты окажутся не лучшими. Причина – в напряжении переключения: когда напряжение на выводе станет достаточно высоким для отправки логической единицы, вы войдете в состояние почти случайных включений и отключений. Такой способ ненадежен и для управления логическими схемами. | Можно просто подключить делитель напряжения к цифровому входу, но результаты окажутся не лучшими. Причина – в напряжении переключения: когда напряжение на выводе станет достаточно высоким для отправки логической единицы, вы войдете в состояние почти случайных включений и отключений. Такой способ ненадежен и для управления логическими схемами. | ||
+ | |||
+ | = Работаем с Fritzing = | ||
+ | ПО ''Fritzing'' было разработано специально для работы с Arduino и схемами на макете. Одна из основных возможностей программы – редактор макета, в котором можно разместить компоненты на макете и соединить их. Он преобразует их в схему и даже сможет создать печатные платы, хотя разводит он их неважно. Тем не менее, он прекрасно подходит для составления схем, и с его помощью можно убедиться, что компоненты макета соединены правильно. | ||
+ | |||
+ | file:///home/ssr/Downloads/LXF151/lxf151-11f-tut-arduino-web-resources/image/LXF146.sup_php.fritzin_opt.jpeg | ||
+ | |||
+ | ''Fritzing'' умеет рисовать красивые картинки и проверять схему на макете. | ||
Один из способов получения устойчивого положительного или отрицательного сигнала – воспользоваться транзистором в качестве цифрового переключателя, однако проблемы с непостоянными значениями вблизи напряжения переключения могут сохраниться. | Один из способов получения устойчивого положительного или отрицательного сигнала – воспользоваться транзистором в качестве цифрового переключателя, однако проблемы с непостоянными значениями вблизи напряжения переключения могут сохраниться. | ||
Строка 102: | Строка 110: | ||
Чтобы получить точки переключения, которые вам нужны, можно изменять значения резисторов или добавить переменный резистор между базой второго транзистора и «заземлением» и с его помощью смещать точку переключения вверх и вниз. | Чтобы получить точки переключения, которые вам нужны, можно изменять значения резисторов или добавить переменный резистор между базой второго транзистора и «заземлением» и с его помощью смещать точку переключения вверх и вниз. | ||
− | + | = Используем KTechLab = | |
+ | Существует немало приложений для работы с электронными схемами в Linux, но многие из них предназначены для профессионалов и главным образом сосредоточены на разработке микросхем, а не печатных плат или проектов Arduino. | ||
+ | |||
+ | А вот ''KTechLab'' подойдет и тем, для кого печатные платы – лишь хобби. Здесь есть функции построения схемы и разводки печатных плат и удобный симулятор электрических цепей, и вы сможете проверить, будут ли работать ваши триггеры Шмитта. | ||
+ | |||
+ | Обширной библиотеки компонентов нет, и – как, похоже, и во всех подобных программах – схему трудно перенести в любое другое приложение; но симулятор – это здорово! | ||
+ | |||
+ | file:///home/ssr/Downloads/LXF151/lxf151-11f-tut-arduino-web-resources/image/LXF146.sup_php.ktechla_opt.jpeg | ||
+ | |||
+ | ''KTechlab'' не безупречен, но симулятор прекрасно справляется с простыми схемами. | ||
+ | === Триггер счастлив === | ||
На сайте pcbheaven есть прекрасная статья о том, как реализовать триггер Шмитта (<nowiki>http://pcbheaven.com/wikipages/The_Schmitt_Trigger/</nowiki>), а также удобную утилиту для определения сопротивления используемых резисторов (<nowiki>http://pcbheaven.com/drcalculus/index.php?calc=st_tr</nowiki>). | На сайте pcbheaven есть прекрасная статья о том, как реализовать триггер Шмитта (<nowiki>http://pcbheaven.com/wikipages/The_Schmitt_Trigger/</nowiki>), а также удобную утилиту для определения сопротивления используемых резисторов (<nowiki>http://pcbheaven.com/drcalculus/index.php?calc=st_tr</nowiki>). | ||
− | + | file:///home/ssr/Downloads/LXF151/lxf151-11f-tut-arduino-web-resources/image/LXF146.sup_php.circui_opt1.jpeg Простая схема вроде этой не потребует особых навыков работы с макетом, но всегда полезно сперва нарисовать ее и проверить соединения. | |
Код для управления такой цепью тоже довольно прост. Сначала можно использовать сочетание аналогового и цифрового методов, чтобы убедиться в правильной установке точек переключения. Соответствующая прошивка приведена ниже: | Код для управления такой цепью тоже довольно прост. Сначала можно использовать сочетание аналогового и цифрового методов, чтобы убедиться в правильной установке точек переключения. Соответствующая прошивка приведена ниже: | ||
− | /* Датчик освещенности - аналоговый и цифровой | + | <code>/* Датчик освещенности - аналоговый и цифровой</code> |
− | <nowiki>*</nowiki>/ | + | <code><nowiki>*</nowiki>/</code> |
− | int LDR = 1 // аналоговый контакт для LDR | + | <code>int LDR = 1 // аналоговый контакт для LDR</code> |
− | int ledPin = 13; // выбор контакта для LED | + | <code>int ledPin = 13; // выбор контакта для LED</code> |
− | int sensePin =12; // цифровой контакт | + | <code>int sensePin =12; // цифровой контакт</code> |
− | int val = 0; | + | <code>int val = 0;</code> |
− | int sense =0; | + | <code>int sense =0;</code> |
− | void setup() { | + | <code>void setup() {</code> |
− | pinMode(LDR, INPUT); // объявим LDR как вход INPUT | + | <code>pinMode(LDR, INPUT); // объявим LDR как вход INPUT</code> |
− | pinMode(ledPin, OUTPUT); // объявим ledPin как выход OUTPUT | + | <code>pinMode(ledPin, OUTPUT); // объявим ledPin как выход OUTPUT</code> |
− | pinMode(sensePin, INPUT); | + | <code>pinMode(sensePin, INPUT);</code> |
− | Serial.begin(9600); | + | <code>Serial.begin(9600);</code> |
− | } | + | <code>}</code> |
− | void loop() { | + | <code>void loop() {</code> |
− | val = analogRead(LDR); // считываем показания датчика | + | <code>val = analogRead(LDR); // считываем показания датчика</code> |
− | sense = digitalRead(sensePin); | + | <code>sense = digitalRead(sensePin);</code> |
− | if (sense == 1) | + | <code>if (sense == 1)</code> |
− | digitalWrite(ledPin, LOW); // включаем ledPin | + | <code>digitalWrite(ledPin, LOW); // включаем ledPin</code> |
− | else | + | <code>else</code> |
− | digitalWrite(ledPin, HIGH); // выключаем ledPin | + | <code>digitalWrite(ledPin, HIGH); // выключаем ledPin</code> |
− | delay(1000); | + | <code>delay(1000);</code> |
− | Serial.print(“reading: “); | + | <code>Serial.print(“reading: “);</code> |
− | Serial.println(val); | + | <code>Serial.println(val);</code> |
− | Serial.print(“sense: “); | + | <code>Serial.print(“sense: “);</code> |
− | Serial.println(sense); | + | <code>Serial.println(sense);</code> |
− | } | + | <code>}</code> |
Хотя здесь мы пользовались обычным фоторезистором, те же принципы справедливы и для любого другого датчика на основе сопротивления, поэтому те же самые схемы подходят и во многих других случаях. Небольшие отличия есть для датчиков температуры – их выходная функция нелинейна, и для получения корректного аналогового значения обычно нужно заглянуть в таблицу или произвести некоторые вычисления – обо всем этом мы обязательно поговорим на следующих уроках. | Хотя здесь мы пользовались обычным фоторезистором, те же принципы справедливы и для любого другого датчика на основе сопротивления, поэтому те же самые схемы подходят и во многих других случаях. Небольшие отличия есть для датчиков температуры – их выходная функция нелинейна, и для получения корректного аналогового значения обычно нужно заглянуть в таблицу или произвести некоторые вычисления – обо всем этом мы обязательно поговорим на следующих уроках. | ||
Строка 171: | Строка 189: | ||
«Код установки инициализирует контакты должными функциями.» | «Код установки инициализирует контакты должными функциями.» | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Включите монитор последовательного порта в IDE Arduino и следите за показаниями. | Включите монитор последовательного порта в IDE Arduino и следите за показаниями. | ||
Строка 186: | Строка 198: | ||
«Триггер Шмитта – краеугольный камень множества схем.» | «Триггер Шмитта – краеугольный камень множества схем.» | ||
− | + | == Законы надо соблюдать == | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | Законы надо соблюдать | + | |
− | + | ||
Чтобы создавать работающие цепи, не нужно знать множество формул и теоретических сведений, но следует ознакомиться с несколькими фундаментальными законами, если вы хотите скорее зажечь светодиод, чем спалить его. Вот несколько самых главных. | Чтобы создавать работающие цепи, не нужно знать множество формул и теоретических сведений, но следует ознакомиться с несколькими фундаментальными законами, если вы хотите скорее зажечь светодиод, чем спалить его. Вот несколько самых главных. | ||
− | |||
− | |||
− | U = I * R | + | ====== 1 Закон Ома ====== |
+ | <code>U = I * R</code> | ||
Перепишите его в любой форме, но в любой цепи и в любой части цепи напряжение на ней равно произведению тока на сопротивление. | Перепишите его в любой форме, но в любой цепи и в любой части цепи напряжение на ней равно произведению тока на сопротивление. | ||
− | |||
− | |||
− | R = R1 + R2 + R3 … | + | ====== 2 Последовательное соединение резисторов ====== |
+ | <code>R = R1 + R2 + R3 …</code> | ||
Общее сопротивление цепочки резисторов равно сумме сопротивлений резисторов. | Общее сопротивление цепочки резисторов равно сумме сопротивлений резисторов. | ||
− | |||
− | |||
− | U1 = U * R1/(R1 + R2 + R3...) | + | ====== 3 Напряжение на отдельном резисторе в цепочке ====== |
+ | <code>U1 = U * R1/(R1 + R2 + R3...)</code> | ||
Из двух предыдущих правил ясно, что напряжение на любом заданном резисторе в цепочке пропорционально отношению его сопротивления к сумме сопротивлений всех резисторов. | Из двух предыдущих правил ясно, что напряжение на любом заданном резисторе в цепочке пропорционально отношению его сопротивления к сумме сопротивлений всех резисторов. | ||
+ | |||
+ | file:///home/ssr/Downloads/LXF151/lxf151-11f-tut-arduino-web-resources/image/LXF146.sup_php.circuit_opt.jpeg | ||
Рис. 1. В этой простой схеме мы объединили фоторезистор и резистор сопротивлением 10 кОм. | Рис. 1. В этой простой схеме мы объединили фоторезистор и резистор сопротивлением 10 кОм. | ||
− | + | file:///home/ssr/Downloads/LXF151/lxf151-11f-tut-arduino-web-resources/image/LXF146.sup_php.circui_opt2.jpeg | |
− | + | ||
− | + | ||
+ | Рис. 2. Сопротивления резисторов во второй схеме определяют точки переключения логического выхода. | ||
[[Категория:LXF151]] | [[Категория:LXF151]] |
Версия 00:03, 18 января 2018
|
|
|
Arduino Освежив в памяти закон Ома, создадим нашу первую умную схему
Arduino: Начнем знакомство
Создать полезное устройство с Arduino проще, чем вы думали. Ник Вейч начинает серию статей об Arduino с добавления датчиков к устройствам.
«Никогда не вредно провести расчеты для проверки.»Признайтесь честно: вы купили макетную плату Arduino, загрузили примеры прошивок и полюбовались мигающими светодиодами, но с тех пор плата вместе с набором компонентов, которые вы приобрели в решимости создать нечто грандиозное, собирает пыль в шкафу.
Здесь нечего стыдиться, но если вы хотите узнать, как с небольшими усилиями сделать удивительные вещи, надеемся, эта серия руководств поможет вам. Да, нас ждет немного арифметики, и кое-что потребуется изучить. Сайтов с планами проектов для Arduino немало, но если вы не понимаете основ работы платы, то никогда не претворите свои великие планы в жизнь.
Мы не только покажем, что можно сделать на базе Arduino, но и ознакомим вас с теоретическими сведениями, лежащими в основе работы платы, и стоящими за ними расчетами – во всяком случае, в той мере, в какой это будет полезно.
На этом уроке мы подключим к Arduino несколько сенсоров и с их помощью будем управлять другими устройствами или просто записывать данные через последовательный порт. Это несложно и займет всего несколько минут, поэтому начнем.
Содержание |
Простые датчики
Имеется множество компонентов с переменным сопротивлением, зависящим от условий окружающей среды – давления, температуры, света, звука, магнитного поля и др. Причина в том, что существует масса веществ, чье сопротивление естественным образом зависит от этих условий, а что для нас важнее – сопротивление довольно легко измерить и отреагировать на него в электрической цепи.
Сопротивление для всех типов датчиков обычно измеряется косвенно в резисторной сборке (называемой делителем напряжения). В цепочке резисторов отношение падения напряжения на каждом отдельном резисторе к общему напряжению, приложенному к цепочке, равно отношению сопротивления этого резистора к общему сопротивлению цепочки. И если собрать цепочку резисторов, в которую входит датчик, его сопротивление можно определить, измерив напряжение на датчике и сравнив его с общим приложенным напряжением. Во многих случаях точная величина сопротивления даже не нужна: достаточно получать определенный входной сигнал, который изменяется в диапазоне, позволяющем заметить, что изменилось исследуемое свойство.
Стоит усвоить основы — и возможно все!
Эй, здесь темно
Создание схемы, которая включает и выключает свет в зависимости от освещенности – пожалуй, эквивалент «Hello World» в Arduino. Это довольно простая схема, и для нее нужны всего два дополнительных компонента, которые легко доступны – а если у вас их нет, ну, достаньте их.
Фоторезистор (LDR, Light Dependent Resistor) как раз и представляет собой резистор, сопротивление которого меняется в зависимости от падающего на него света. Существуют фоторезисторы различных типов, но самые распространенные имеют ромбовидную форму, около 4 мм в длину, а их сопротивление изменяется от нескольких сот ом (на ярком свету) до примерно 250 кОм (в глухой тьме).
Иногда к ним прикрепляют купола или линзы, чтобы собрать больше света, но обычно они помещаются в плоские эпоксидные корпуса. К счастью, их выходная характеристика весьма близка к линейной, что немного упрощает расчеты, если мы захотим выполнить настоящие измерения.
И, наконец, помните о рассеянии мощности. У всех подобных резисторов есть предельно допустимый ток, по превышении которого они сгорают. На практике в низковольтных схемах постоянного тока, обычно применяемых в Arduino, сжечь фоторезистор сложно, но помните об этом для других компонентов.
В нашей простой цепи мы объединим фоторезистор в цепочку с резистором сопротивлением 10 кОм. Тогда мы не потратим на нашу цепь чересчур много энергии, более чем достаточно защитим фоторезистор и получим приемлемое сравнительное значение в диапазоне сопротивлений фоторезистора.
Чтобы измерить напряжение, нужно лишь подключиться к середине цепочки и соединить ее с одним из аналоговых входов Arduino. Никогда не вредно провести расчеты для проверки, чего нужно ожидать.
При ярком свете измеренное сопротивление нашего фоторезистора составило 220 Ом. В темноте оно поднялось до 250 кОм. Следовательно [ULDR – напряжение на фоторезисторе; Uin – входное напряжение; RLDR – сопротивление фоторезистора, – прим. пер.]:
ULDR = Uin * (RLDR/ RLDR +10000)
ULDR = 5 * (220/10220) = 0,1 В при ярком свете
ULDR = 5 * (250000/260000) = 4,8 В в темноте
В аналоговых входах Arduino используются внутренние аналого-цифровые преобразователи (АЦП) Atmega. Они обладают 10-битной разрядностью сигнала и сравнивают поступающее напряжение с напряжением питания Arduino. Так, значение 1023 соответствует 5 В. На практике это напряжение меньше, особенно при питании через USB.
Но, поскольку сравнение все равно относительное, большой разницы не будет; хотя об этом стоит помнить, если вы пытаетесь провести точные измерения.
Схема, как она есть, приведена на рис. 1 в конце статьи; есть и фотография, чтобы вы смогли посмотреть, как это выглядит на макете. Осталось написать код, включающий свет.
/* Простой датчик освещенности
*/
int LDR = 1; // выбор входного контакта для LDR
int LED = 13; // выбор контакта для LED
int val = 0; // переменная, хранящая показание датчика
void setup() {
pinMode(LDR, INPUT); // объявим LDR как вход - INPUT
Serial.begin(9600);
}
void loop() {
val = analogRead(LDR); // считываем показание датчика
delay(1000); // небольшая пауза
Serial.print(“Освещенность: “);
Serial.println(val);
}
«Прошивка» (так называется исходный код для Arduino) состоит из трех частей: глобальные определения, код установки и основной цикл. В первой секции определяются переменные, которыми мы собираемся воспользоваться, включая назначение меток контактам, которые мы будем употреблять для ввода и вывода.
Код установки инициализирует контакты должными функциями (это очень важно, так как у контактов есть несколько режимов работы и функций) и инициализирует последовательный ввод/вывод, чтобы впоследствии мы смогли записывать данные.
Основной цикл считывает показание с аналогового контакта и сохраняет результат в переменной, которую мы завели. Затем он просто проверяет, больше или меньше это показание определенного значения, и если «темно», зажигает светодиод.
Измеренное показание также отправляется на последовательный порт (чтобы мы могли следить за его изменениями), и затем нужна небольшая пауза на передышку. Пауза указывается в миллисекундах, так что у нас здесь показание считывается примерно раз в секунду. Если вы планируете разместить различные датчики на различных контактах, позаботьтесь о том, чтобы считывать их значения одновременно.
АЦП в микросхеме Atmega нужно некоторое время, чтобы вернуться в рабочее состояние, поэтому добавьте небольшую задержку между операциями считывания аналоговых значений, если важна точность.
file:///home/ssr/Downloads/LXF151/lxf151-11f-tut-arduino-web-resources/image/LXF146.sup_php.arduino_opt.jpeg Включите монитор последовательного порта в IDE Arduino и следите за показаниями.
Идем дальше
Если вы просто хотите знать, светло или темно, использование аналогового входа – напрасная трата ресурсов. Поэтому датчики часто применяются только для установки событий – жарко/темно/влажно и т. п., и все, что нам нужно – установить их выход в логическую «единицу» или «ноль».
Можно просто подключить делитель напряжения к цифровому входу, но результаты окажутся не лучшими. Причина – в напряжении переключения: когда напряжение на выводе станет достаточно высоким для отправки логической единицы, вы войдете в состояние почти случайных включений и отключений. Такой способ ненадежен и для управления логическими схемами.
Работаем с Fritzing
ПО Fritzing было разработано специально для работы с Arduino и схемами на макете. Одна из основных возможностей программы – редактор макета, в котором можно разместить компоненты на макете и соединить их. Он преобразует их в схему и даже сможет создать печатные платы, хотя разводит он их неважно. Тем не менее, он прекрасно подходит для составления схем, и с его помощью можно убедиться, что компоненты макета соединены правильно.
file:///home/ssr/Downloads/LXF151/lxf151-11f-tut-arduino-web-resources/image/LXF146.sup_php.fritzin_opt.jpeg
Fritzing умеет рисовать красивые картинки и проверять схему на макете.
Один из способов получения устойчивого положительного или отрицательного сигнала – воспользоваться транзистором в качестве цифрового переключателя, однако проблемы с непостоянными значениями вблизи напряжения переключения могут сохраниться.
Добавление дополнительного транзистора, впрочем, означает, что можно настроить петлю обратной связи, которая придаст устойчивость выходному сигналу. Напряжение, при котором система переходит в состояние «включено», можно сделать заметно выше, чем напряжение, необходимое для переключения обратно в состояние «выключено», создав таким образом буфер и исключив колебания состояний «включено»/«выключено».
Такая схема называется триггером Шмитта, и это краеугольный камень множества управляющих электронных схем. Для решения нашей задачи можно купить интегральные схемы с большим количеством триггеров Шмитта или добавить схему операционного усилителя, но с парой простых NPN-транзисторов стоимостью около 30 пенсов и несколькими резисторами сделать то же самое гораздо проще.
Расположение компонентов приведено на рис. 2. Мы воспользовались NPN-транзисторами BC547, но на самом деле подойдут любые NPN-транзисторы. Сопротивления резисторов в цепи определяют точки, в которых будет изменяться значение логического выхода. С нашими резисторами оно должно установиться в «единицу» при напряжении около 2,5 В и в «ноль» при напряжении около 1,3 В (при напряжении питания 5 В).
Чтобы получить точки переключения, которые вам нужны, можно изменять значения резисторов или добавить переменный резистор между базой второго транзистора и «заземлением» и с его помощью смещать точку переключения вверх и вниз.
Используем KTechLab
Существует немало приложений для работы с электронными схемами в Linux, но многие из них предназначены для профессионалов и главным образом сосредоточены на разработке микросхем, а не печатных плат или проектов Arduino.
А вот KTechLab подойдет и тем, для кого печатные платы – лишь хобби. Здесь есть функции построения схемы и разводки печатных плат и удобный симулятор электрических цепей, и вы сможете проверить, будут ли работать ваши триггеры Шмитта.
Обширной библиотеки компонентов нет, и – как, похоже, и во всех подобных программах – схему трудно перенести в любое другое приложение; но симулятор – это здорово!
file:///home/ssr/Downloads/LXF151/lxf151-11f-tut-arduino-web-resources/image/LXF146.sup_php.ktechla_opt.jpeg
KTechlab не безупречен, но симулятор прекрасно справляется с простыми схемами.
Триггер счастлив
На сайте pcbheaven есть прекрасная статья о том, как реализовать триггер Шмитта (http://pcbheaven.com/wikipages/The_Schmitt_Trigger/), а также удобную утилиту для определения сопротивления используемых резисторов (http://pcbheaven.com/drcalculus/index.php?calc=st_tr).
file:///home/ssr/Downloads/LXF151/lxf151-11f-tut-arduino-web-resources/image/LXF146.sup_php.circui_opt1.jpeg Простая схема вроде этой не потребует особых навыков работы с макетом, но всегда полезно сперва нарисовать ее и проверить соединения.
Код для управления такой цепью тоже довольно прост. Сначала можно использовать сочетание аналогового и цифрового методов, чтобы убедиться в правильной установке точек переключения. Соответствующая прошивка приведена ниже:
/* Датчик освещенности - аналоговый и цифровой
*/
int LDR = 1 // аналоговый контакт для LDR
int ledPin = 13; // выбор контакта для LED
int sensePin =12; // цифровой контакт
int val = 0;
int sense =0;
void setup() {
pinMode(LDR, INPUT); // объявим LDR как вход INPUT
pinMode(ledPin, OUTPUT); // объявим ledPin как выход OUTPUT
pinMode(sensePin, INPUT);
Serial.begin(9600);
}
void loop() {
val = analogRead(LDR); // считываем показания датчика
sense = digitalRead(sensePin);
if (sense == 1)
digitalWrite(ledPin, LOW); // включаем ledPin
else
digitalWrite(ledPin, HIGH); // выключаем ledPin
delay(1000);
Serial.print(“reading: “);
Serial.println(val);
Serial.print(“sense: “);
Serial.println(sense);
}
Хотя здесь мы пользовались обычным фоторезистором, те же принципы справедливы и для любого другого датчика на основе сопротивления, поэтому те же самые схемы подходят и во многих других случаях. Небольшие отличия есть для датчиков температуры – их выходная функция нелинейна, и для получения корректного аналогового значения обычно нужно заглянуть в таблицу или произвести некоторые вычисления – обо всем этом мы обязательно поговорим на следующих уроках.
Наш эксперт
Когда LXF только появился, его держали на плаву исключительно скрипты Bash от Ника Вейча. Потом их заменили «люди», и это, по мнению Ника, стало шагом назад...
Что нам нужно
Для этого урока вам понадобится плата Arduino (сойдет любая), а для первой схемы – фоторезистор (или другой резистивный датчик) и резистор сопротивлением 10 кОм. Для второй схемы пригодятся обычные NPN-транзисторы и хороший набор резисторов. Также нужна последняя версия IDE Arduino.
«Код установки инициализирует контакты должными функциями.»
Включите монитор последовательного порта в IDE Arduino и следите за показаниями.
Простая схема, объединяющая аналоговый сигнал освещенности и цифровой сигнал под управлением триггера Шмитта, на макете.
Не хотите пропустить номер? Подпишитесь на www.linuxformat.ru/subscribe/!
«Триггер Шмитта – краеугольный камень множества схем.»
Законы надо соблюдать
Чтобы создавать работающие цепи, не нужно знать множество формул и теоретических сведений, но следует ознакомиться с несколькими фундаментальными законами, если вы хотите скорее зажечь светодиод, чем спалить его. Вот несколько самых главных.
1 Закон Ома
U = I * R
Перепишите его в любой форме, но в любой цепи и в любой части цепи напряжение на ней равно произведению тока на сопротивление.
2 Последовательное соединение резисторов
R = R1 + R2 + R3 …
Общее сопротивление цепочки резисторов равно сумме сопротивлений резисторов.
3 Напряжение на отдельном резисторе в цепочке
U1 = U * R1/(R1 + R2 + R3...)
Из двух предыдущих правил ясно, что напряжение на любом заданном резисторе в цепочке пропорционально отношению его сопротивления к сумме сопротивлений всех резисторов.
file:///home/ssr/Downloads/LXF151/lxf151-11f-tut-arduino-web-resources/image/LXF146.sup_php.circuit_opt.jpeg
Рис. 1. В этой простой схеме мы объединили фоторезистор и резистор сопротивлением 10 кОм.
file:///home/ssr/Downloads/LXF151/lxf151-11f-tut-arduino-web-resources/image/LXF146.sup_php.circui_opt2.jpeg
Рис. 2. Сопротивления резисторов во второй схеме определяют точки переключения логического выхода.