Сама микросхема и нумерация ее выводов выглядят так:
Рассмотрим простую схему: мигающий светодиод.

Схема весьма проста. Частота задается деталями R1, R2 и С1, и определяется по формуле:
Частота, как мы знаем, измеряется в Герцах, 1Гц это одно колебание в секунду. NE555, R1, R2 и C1 создают генератор нужной частоты, справа мы видим уже знакомый нам светодиод с ограничивающим ток резистором.
Если схема собрана правильно, то мы увидим мигание светодиода. Если заменить резистор R1 на переменный, то частоту мигания можно будет изменять.
Немного усложнив схему, можно получить диммер - прибор, способный изменять яркость светодиода от нуля до максимума.

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

Здесь вместо светодиода и резистора подключен динамик с конденсатором.
Существует большое разнообразие схем с применением NE555. Например, подключив 2 микросхемы, можно получить “полицейскую сирену”:

Еще одна несложная схема - сигнализация, которая подаст звуковой сигнал при обрыве провода:

Аналогично, с применением NE555 есть схемы датчика протечки воды, ультразвукового отпугивателя собак, автоматического включения освещения с фоторезистором, и многое другое. Есть даже книга “Радиолюбительские схемы на ИС типа 555”, скачать ее можно в Интернете.
Самостоятельная работа: используя динамик, переменный резистор и NE555, собрать звуковой генератор, подобрав параметры так чтобы диапазон частот попадал в интервал 0-15КГц. С этим генератором легко проверить, насколько высокие звуки может слышать человек. Этот опыт можно провести с друзьями или одноклассниками - у каждого человека порог слышимости различный, более того, он меняется с возрастом.
1.8 Полевые и биполярные транзисторы
В предыдущей главе описывалась схема ночника, в которой яркость светодиода регулировалась от нуля до максимума. Но что делать, если мы захотим подключить целую светодиодную ленту чтобы осветить всю комнату? Включить ее напрямую к выводу микросхемы мы не можем, потребляемый ток слишком велик. На помощь придет полевой транзистор.

Схема подключения выводов транзистора показана на рисунке.
Упрощенно говоря, полевой транзистор - это электронный ключ, способный с помощью небольшого входного напряжения, управлять гораздо более мощной нагрузкой. Это как раз то, что нужно в нашей схеме.
Собрав схему, как показано на рисунке, мы можем подключить светодиодную ленту и изменять ее яркость вращением переменного резистора.
Кстати, как же в действительности изменяется яркость свечения? Здесь применяется так называемая широтно-импульсная модуляция (ШИМ). В ней меняется не яркость светодиода, а продолжительность периодов его свечения:
Человеческий глаз не может видеть пульсацию с частотой тысячи раз в секунду, и воспринимает это как более или менее яркий свет, в зависимости от вида пульсаций.
Аналогичную схему можно собрать на другом виде транзистора - биполярном.

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

С точки зрения физических процессов, принцип работы биполярного и полевого транзисторов, различен, но конечный результат для нас тот же - небольшое изменение входного тока базы (обозначена буквой 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. Каждой переменной выделяется определенный размер памяти, который и определяет, насколько большое число можно хранить.
Вещественные. Это упрощенно говоря, все нецелые числа - например 2.5, или 3.14. Они занимают в памяти больше места и работа с ними выполняется гораздо медленнее, так что использовать их на маломощных процессорах вроде Arduino рекомендуется лишь при реальной необходимости.
Символьные. Это та же целочисленная переменная, только используемая для хранения кодов букв. Одна переменная хранит код одного символа в формате ASCII. Строка представляется в виде массива символов.
Таким образом, мы можем создать разные типы переменных:
int a = 5;
float pi = 3.1415;
char s = "B";
char str[10] = "Hello";
Важно помнить, что в отличие от обычных персональных компьютеров, платы Arduino имеют ограниченный объем памяти, так что ее надо экономить - использовать тип, минимально достаточный для хранения данных. К примеру, если нужно хранить 255 кодов вводимых клавиш “0”..”9”, то для этого достаточно написать byte symbols[255]. Если же мы напишем int symbols[255] - результат будет тот же, но объем занимаемой памяти будет вдвое больше. Точные значения размера переменных можно посмотреть в таблице, приведенной выше.
Кстати, откуда взялись подобные ограничения? Это связано с тем, что физически данные хранятся в виде бит, в так называемой двоичной системе счисления.

Один бит - это минимально возможная величина, способная принимать значения “0” или “1”. 8 бит объединяются в байт. Любое число можно представить в виде двоичной записи, как сумму чисел степени 2 (1,2,4,8,16,32,...), например:
5 = 0*128 + 0*64 + 0*32 + 0*16 + 0*8 + 1*4 + 0*2 + 1*1 = 00000101.
Нетрудно подсчитать, что максимально возможное число при таком виде записи будет составлять 128+64+32+16+8+4+2+1 = 255. Это так называемое беззнаковое целое число (unsigned integer). Если один из разрядов зарезервировать под знак (+ или -), то останется 7 разрядов для чисел, что и соответствует -127..128.
Для 16-битных чисел диапазон значений соответственно больше, при желании их нетрудно подсчитать самостоятельно.
Вещественные числа хранятся в немного более сложном формате, так называемом формате “чисел с плавающей точкой”, состоящего из двух хранимых величин - мантиссы и экспоненты. К примеру, число 3.14 в двоичном виде будет храниться так: 01000000010010001111010111000011. Первый 0 - это знак (+), 1000000 = 128 - это экспонента, а 10010001111010111000011 - это мантисса. Вещественное число получается по формуле:
value = (1 + b0/2 + b1/4 + b2/8 + b3/16 + … ) * 2e-127
Действительно, нетрудно подсчитать, что:
(1 + 1/2 + 1/16 + ...) * 21 = 3.14
Важно отметить, что в отличие от целых чисел, вещественные числа представляются с некоторой небольшой погрешностью, она невелика, но она есть.
Разумеется, для пользователя все это прозрачно - можно написать float pi = 3.14, и не задумываться как оно внутри хранится. Но чтобы писать эффективные программы, про хранение данных хотя бы в общих чертах необходимо знать.
Теперь, вооруженные всеми этими знаниями, мы можем вновь взять плату Arduino обратно, и продолжить эксперименты с “железом”.
2.3 Мигаем светодиодом
В предыдущей части мы уже подключали светодиод к источнику питания. Arduino Nano содержит уже подключенный светодиод, для его использования достаточно лишь написать программу.