Выбрать главу

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

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

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

Кстати, как же в действительности изменяется яркость свечения? Здесь применяется так называемая широтно-импульсная модуляция (ШИМ). В ней меняется не яркость светодиода, а продолжительность периодов его свечения:

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

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

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

С точки зрения физических процессов, принцип работы биполярного и полевого транзисторов, различен, но конечный результат для нас тот же - небольшое изменение входного тока базы (обозначена буквой 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. Каждой переменной выделяется определенный размер памяти, который и определяет, насколько большое число можно хранить.