Схема подключения выводов транзистора показана на рисунке.
Упрощенно говоря, полевой транзистор - это электронный ключ, способный с помощью небольшого входного напряжения, управлять гораздо более мощной нагрузкой. Это как раз то, что нужно в нашей схеме.
Собрав схему, как показано на рисунке, мы можем подключить светодиодную ленту и изменять ее яркость вращением переменного резистора.
Кстати, как же в действительности изменяется яркость свечения? Здесь применяется так называемая широтно-импульсная модуляция (ШИМ). В ней меняется не яркость светодиода, а продолжительность периодов его свечения:
Человеческий глаз не может видеть пульсацию с частотой тысячи раз в секунду, и воспринимает это как более или менее яркий свет, в зависимости от вида пульсаций.
Аналогичную схему можно собрать на другом виде транзистора - биполярном.
Такой транзистор подключается следующим образом:
С точки зрения физических процессов, принцип работы биполярного и полевого транзисторов, различен, но конечный результат для нас тот же - небольшое изменение входного тока базы (обозначена буквой B) вызывает значительное изменение тока коллектор-эмиттер (C-E).
Транзисторы также активно используются в усилителях звуковой и радиочастоты, как управляющие элементы в блоках питания, в компьютерной технике, и так далее. Фактически это один из основных элементов современной схемотехники. Но “в чистом виде” нам его использовать практически не придется - в основном, мы будем использовать готовые микросхемы (все они внутри себя, разумеется, содержат транзисторы).
На этом мы закончим поверхностное знакомство с основными электронными компонентами, и перейдем к цифровой технике. Желающие углубленно изучить аналоговую схемотехнику, могут найти в интернете книгу Хоровица и Хилла “Искусство схемотехники” (The Art of Electronics), которая была выпущена еще в 80е, но до сих пор актуальна.
Часть 2. Знакомство с Arduino
В настоящее время существует большое количество различных микроконтроллеров - STM, Atmega, PIC и пр. Микроконтроллер - это по сути, небольшой но полноценный компьютер, имеющий оперативную и флеш-память, тактовый генератор, порты ввода-вывода для связи с “внешним миром”.
Типичный микроконтроллер выглядит примерно так:
Чтобы его использовать, необходимо:
- припаять его к печатной плате,
- добавить элементы, минимально необходимые для работы контроллера (питание, reset, тактовый генератор, и пр),
- добавить специальную схему для загрузки программы (“прошивки”),
- установить на ПК так называемую “среду разработки” (IDE) для написания кода.
Все это весьма трудоемко, поэтому в 2003м году итальянские инженеры (тогда еще студенты) придумали разместить все это на одной готовой плате. Так появился проект Arduino. Система стала настолько популярной, что к 2013 году на руках у пользователей было уже 700000 плат.
Arduino выглядит примерно так:
Она содержит:
- уже готовый к работе микроконтроллер,
- модуль для подключения к компьютеру по USB - через него осуществляется загрузка и отладка программы,
- базовый набор функций (светодиод, кнопка reset),
- большое количество выводов для подключения различных устройств (кнопки, экраны, датчики).
Существуют разные варианты плат - Arduino Uno, Arduino Mega, Arduino Nano и пр. Также можно приобрести различные платы расширения, например плату управления мотором, или плату с ЖК-экраном.
Помимо плат, существует и бесплатная среда разработки Arduino IDE, позволяющая писать код и загружать программу в плату. Загруженная программа сохраняется в Arduino и после отключения питания, готовую плату потом можно использовать отдельно от компьютера.
2.1 Основы языка Си
Для начала … отложим плату Arduino в сторону, и научимся писать несложные программы на языке Си. Ведь центральный процессор Arduino - это почти полноценный компьютер, а значит его нужно будет программировать. Для этого используется язык Си, весьма популярный для написания программ различных микроконтроллеров.
Чтобы писать программу на каком-либо языке программирования, нужны специальный редактор (так называемая “среда разработки” или IDE) и компилятор, преобразующий текст в готовую программу. Для упрощения мы воспользуемся онлайн компилятором, для чего можно зайти на сайт https://repl.it/languages/c или https://www.onlinegdb.com/online_c_compiler.
Простейшая программа на Си выглядит так:
#include <stdio.h>
int main(void) {
printf("Hello World\n");
return 0;
}
Директива #include подключает служебный файл, в котором описаны необходимые нам функции. Функция printf выводит текст на экран. Запустим программу нажатием кнопки “>”, и справа мы увидим результат ее выполнения - появится текст Hello world.
Мы также можем создать целочисленную переменную, написав:
int i = 42;
Или вещественную:
float a = 1.0;
C переменными можно осуществлять математические действия:
float b = 3*val + 5;
Можно увеличить или уменьшить значение переменной:
i = i+1; // Более короткая запись: i += 1; или еще короче i++;
i = i-1; // Более короткая запись: i -= 1; или еще короче i--;
Можно вывести на экран значения переменных:
int i = 42;
float a = 1.0;
printf("I = %d, A = %f\n", i, a);
Нужный фрагмент программы можно повторить нужное число раз с помощью оператора for. Выведем значение переменной 10 раз:
for(int v=0; v<10; v++) {
printf("I = %d, A = %f\n", i, a);
}
Блок, который будет повторен, выделяется фигурными скобками { и }. Оператор for можно использовать не только для вывода, например вот так можно подсчитать и вывести сумму квадратов чисел от 1 до 100:
#include <stdio.h>
int main(void) {
int sum = 0;
for(int v=0; v<100; v++) {
sum += v*v;
}
printf("Sum = %d\n", sum);
return 0;
}
В программе могут также быть условия, которые записываются в виде оператора if: фрагмент кода внутри фигурных скобок выполнится только если условие истинно.
if (sum > 100) {
printf("Sum > 100\n");
}
Это небольшое введение позволит нам ориентироваться в коде программ для Arduino. Желающие могут найти более подробное руководство по С++ самостоятельно.
Самостоятельная работа: найти любые примеры из школьного задачника по математике, и решить их с помощью программы на С.
2.2 Типы данных в Arduino
Мы уже рассмотрели некоторые виды переменных, например int и float. Рассмотрим более подробно типы данных, доступные для Arduino.
Переменные можно разбить на 3 основные группы.
Целочисленные. Они содержат целые числа, например в диапазоне -32768..32767, или 0..65535. Каждой переменной выделяется определенный размер памяти, который и определяет, насколько большое число можно хранить.