Урок 1. arduino и мигающий светодиод

Прерывание по таймеру с «человеческим лицом»

Добрые люди написали программный интерфейс к таймеру в виде библиотеки TimerOne

C++

#include «TimerOne.h»

uint8_t blink_loop = 0;
uint8_t blink_mode = 0;
uint8_t modes_count = 0;

// Callback функция по таймеру
void timerIsr()
{
if( blink_mode & 1<<(blink_loop&0x07) ) digitalWrite(13, HIGH);
else digitalWrite(13, LOW);
blink_loop++;
}

void setup() {
pinMode(13,OUTPUT);
blink_mode = 0B00000000;
Timer1.initialize(125000);
Timer1.attachInterrupt( timerIsr );
}

void loop() {
blink_mode = 0B00001111; //Мигание по 0.5 сек
delay(5000);
blink_mode = 0B00000001; //Короткая вспышка раз в секунду
delay(5000);
blink_mode = 0B00000101; //Две короткие вспышки раз в секунду
delay(5000);
blink_mode = 0B00010101; //Три короткие вспышки раз в секунду
delay(5000);
blink_mode = 0B01010101; //Частые короткие вспышки (4 раза в секунду)
delay(5000);
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

#include «TimerOne.h»
 

uint8_t  blink_loop=;

uint8_t  blink_mode=;

uint8_t  modes_count=;

 
// Callback функция по таймеру

voidtimerIsr()

{

if(blink_mode&1<<(blink_loop&0x07))digitalWrite(13,HIGH);

elsedigitalWrite(13,LOW);

blink_loop++;

}
 

voidsetup(){

pinMode(13,OUTPUT);

blink_mode=0B00000000;

Timer1.initialize(125000);

Timer1.attachInterrupt(timerIsr);

}

voidloop(){

blink_mode=0B00001111;//Мигание по 0.5 сек

delay(5000);

blink_mode=0B00000001;//Короткая вспышка раз в секунду

delay(5000);

blink_mode=0B00000101;//Две короткие вспышки раз в секунду

delay(5000);

blink_mode=0B00010101;//Три короткие вспышки раз в секунду

delay(5000);

blink_mode=0B01010101;//Частые короткие вспышки (4 раза в секунду)

delay(5000);

}

Ну, и напоследок, код для тех, кто как и я «грызет» программирование WiFi модулей ESP8266 в среде Arduino IDE.

Шаг 3: Объяснение кода

Давайте теперь поговорим о коде при работе Ардуино эмулятора.

Когда редактор кода открыт в эмуляторе, вы можете щелкнуть выпадающее меню слева и выбрать «Блоки + Текст» (Blocks + Text), чтобы открыть код Arduino, сгенерированный блоками кода. Все дополнительные символы являются частью синтаксиса Arduino, но не пугайтесь! Требуется время, чтобы научиться писать правильный код с нуля. Здесь мы рассмотрим каждую часть, и вы всегда можете использовать блоки для сравнения и повышения своего уровня.

Мы не знаем какой версией вы пользуетесь, поэтому код мы оставим таким, какой был у нас.

/*
  This program blinks pin 13 of the Arduino (the built-in LED)
*/

Этот первый раздел представляет собой комментарий блока заголовка, описывающий, что делает программа. Блочные комментарии открываются так /* и закрываются так */.

void setup()
{
  pinMode(13, OUTPUT);
}

Далее приведена настройка кода, которая помогает настроить то, что потребуется вашей программе позже. Она запускается один раз и содержит все что нужно внутри своих фигурных скобок {}. В нашем проекте нужно настраивает вывод 13 в качестве выхода, который подготавливает плату для отправки сигналов на нее, а не приема.

void loop()
{
  // включите светодиод (HIGH - уровень напряжения)
  digitalWrite(13, HIGH);
  delay(1000); // Подождите 1000 миллисекунд
  // выключите светодиод, сделав напряжение LOW
  digitalWrite(13, LOW);
  delay(1000); // Подождите 1000 миллисекунд
}

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

Больше полезного о программировании Ардуино вы найдете в нашей статье «Ардуино язык программирования«.

Используемая команда вывода называется digitalWrite(), которая является функцией, которая устанавливает или выдает значение HIGH или LOW. Чтобы приостановить программу мы будем использовать функцию delay(), которая занимает несколько миллисекунд (1000 мс = 1 с).

Как подключить светодиод к Arduino Uno / Nano

Для этого занятия нам потребуется:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • макетная плата;
  • несколько светодиодов и резисторов 220 Ом;
  • провода «папа-папа».

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

Быстрая сборка схем на макетной плате

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

Для чего светодиод включают к Ардуино с резистором? Дело в том, что в светодиоде стоит кристалл который боится больших токов. Резистор призван ограничивать силу тока (Амперы), чтобы светодиод не перегорел. Большой ток губителен для светодиода, меньший ток (благодаря подключению резистора) обеспечивает длительную работу. Чтобы подключить светодиод к Ардуино без резистора, используйте 13 порт.

Кабель с разъемами USB-A и USB-B для подключения принтера

Если у вас не установлена программа Arduino IDE, то скачайте последнюю версию на официальном сайте www.arduino.cc. С помощью USB кабеля производится запись программ, также плата получает питание от компьютера. Если требуется автономная работа электронного устройства, то плату можно запитать от батарейки или блока питания на 7-12 В. При подаче питания на плате загорится светодиод индикации.

Убедитесь, что программа определила ваш тип платы Ардуино

Шаг 1. Зайдите в основном меню «Инструменты -> Плата». Если плата Arduino определилась неправильно, то выберите необходимый тип, например, Arduino Uno.

Шаг 2. Установите порт (кроме COM1) подключения в меню «Инструменты -> Порт», так как при подключении Ардуино к ПК создается виртуальный COM-порт.

Убедитесь, что программа определила порт подключения Ардуино

Скетч для включения светодиода от Ардуино

void setup() {
pinMode(13, OUTPUT); // объявляем пин 13 как выход
}

void loop() {
digitalWrite(13, HIGH); // зажигаем светодиод

delay(1000); // ждем 1 секунду

digitalWrite(13, LOW); // выключаем светодиод

delay(1000); // ждем 1 секунду
}

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

Скопируйте код и вставьте скетч в программу Arduino IDE

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

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

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

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

  1. процедура выполняется при запуске микроконтроллера один раз. Используется для конфигурации портов микроконтроллера и других настроек;
  2. после выполнения запускается процедура , которая выполняется в бесконечном цикле. Это мы используем, чтобы светодиод мигал постоянно;
  3. процедуры и должны присутствовать в любой программе (скетче), даже если вам не нужно ничего выполнять в них — пусть они будут пустые, просто не пишите ничего между фигурными скобками.

Тестирование мигающих RGB светодиодов

Компьютерный блок питания выступает идеальным вариантом тестирования светодиодов SMD0603. Нужно просто поставить резистивный делитель. Согласно схеме технической документации оценивают сопротивления p-n переходов в прямом направлении, заручившись помощью тестера. Прямое измерение здесь невозможно. Соберем схему, показанную ниже:

Схема оценки сопротивления p-n переходов

Микросхема дана вместе с номерами ножек согласно техническим характеристикам.
Питание подается на катод, полярность напряжения отрицательная. 3,3 вольта хватит открыть p-n переходы.
Переменный резистор нужен небольшого номинала. На рисунке установлен с максимальным пределом 680 Ом. В таком положении должен находиться изначально.
Сопротивление открытого p-n перехода невелико, нужен значительный запас, чтобы диоды не погорели (помним, что максимальное прямое напряжение составляет 3 В)

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

Подставляя в качестве трех входных параметров 700, получаем 233 Ом. Сопротивление светодиодов, когда только-только начнут открываться (по крайней мере, так полагаем). Формула расчета суммарного сопротивления

Понадобится контролировать режим тестером (см. рисунок). Постоянно измеряем напряжение на светодиодной микросхеме, одновременно уменьшая значение сопротивления, пока разница потенциалов поднимется до 2,5 В. Дальше повышать вольтаж попросту опасно, быть может, многие остановятся на 2,2 В.
Затем из пропорции найдем искомое сопротивление светодиодной микросхемы: (3,3 – 2,5)/2,5 = R пер / Rобщ, R пер – сопротивление переменного резистора, когда напряжение на дисплее тестера достигает 2,5 В. R общ = 3,125 R пер.

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

Обратите внимание: опасно включать модуль без нагрузки. Идеально подключить DVD-привод или другое устройство

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

Теперь знаем, как сделать мигающую светодиодную подсветку своими руками. Можно ли варьировать время срабатывания. Полагаем, внутри должны использоваться емкости. Возможно, собственные паразитные элементы p-n переходов светодиодов. Подключая переменный конденсатор параллельно схеме на вход, можно попробовать что-либо изменить. Номинал очень мал, измеряется пФ. Маленькая микросхема лишена больших емкостей. Допускаем, резистор, подключенный параллельно микросхеме (см. пунктир на рисунке), усаженный на землю, будет образовывать точный делитель. Стабильность возрастет.

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

Последовательное включение светодиодов на Ардуино

Что такое Ардуиноfor

byte i;                // задаем переменную для цифровых выходов
byte LedMax = 13; // максимальное количество выходов (диодов)

void setup()
{
// задаем пины со 2 по 13, как выходы (OUTPUT)
for(i=2; i<LedMax; i++) { pinMode(i, OUTPUT); }
}

Вместо прописывания в скетче всех пинов с 2 по 13, как выходы, мы воспользовались одним циклом . Сразу отметим, что использование всех выходов на Ардуино для последовательного включения светодиодов или подключения светодиодной шкалы не рационально. На практике для этого используют сдвиговый регистр 74hc165 или, еще более простой вариант драйвер светодиодов М5450В7 для микроконтроллера Ардуино.

Обработка битовой матрицы состояния светодиода

Уменьшаем время срабатывания события до 1/8 секунды и в 1 байте кодируем 8 бит состояний, отображаемых последовательно.

C++

// Массив режимов работы светодиода
byte modes[] = {
0B00000000, //Светодиод выключен
0B11111111, //Горит постоянно
0B00001111, //Мигание по 0.5 сек
0B00000001, //Короткая вспышка раз в секунду
0B00000101, //Две короткие вспышки раз в секунду
0B00010101, //Три короткие вспышки раз в секунду
0B01010101 //Частые короткие вспышки (4 раза в секунду)
};

uint32_t ms, ms1 = 0, ms2 = 0;
uint8_t blink_loop = 0;
uint8_t blink_mode = 0;
uint8_t modes_count = 0;

void setup() {
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
modes_count = 1;
blink_mode = modes;
}

void loop() {
ms = millis();
// Событие срабатывающее каждые 125 мс
if( ( ms — ms1 ) > 125|| ms < ms1 ){
ms1 = ms;
// Режим светодиода ищем по битовой маске
if( blink_mode & 1<<(blink_loop&0x07) ) digitalWrite(13, HIGH);
else digitalWrite(13, LOW);
blink_loop++;
}

// Этот код служит для демонстрации переключения режимов
// Один раз в 5 секунд меняем эффект
if( ( ms — ms2 ) > 5000|| ms < ms2 ){
ms2 = ms;
blink_mode = modes;
if( modes_count >= 7 )modes_count = 1;
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

// Массив режимов работы светодиода

bytemodes={

0B00000000,//Светодиод выключен

0B11111111,//Горит постоянно

0B00001111,//Мигание по 0.5 сек

0B00000001,//Короткая вспышка раз в секунду

0B00000101,//Две короткие вспышки раз в секунду

0B00010101,//Три короткие вспышки раз в секунду

0B01010101//Частые короткие вспышки (4 раза в секунду)

};

uint32_t ms,ms1=,ms2=;

uint8_t  blink_loop=;

uint8_t  blink_mode=;

uint8_t  modes_count=;

voidsetup(){

pinMode(13,OUTPUT);

digitalWrite(13,LOW);

modes_count=1;

blink_mode=modesmodes_count;

}
 
 

voidloop(){

ms=millis();

// Событие срабатывающее каждые 125 мс  

if((ms-ms1)>125||ms<ms1){

ms1=ms;

// Режим светодиода ищем по битовой маске      

if(blink_mode&1<<(blink_loop&0x07))digitalWrite(13,HIGH);

elsedigitalWrite(13,LOW);

blink_loop++;

}

// Этот код служит для демонстрации переключения режимов    
// Один раз в 5 секунд меняем эффект  

if((ms-ms2)>5000||ms<ms2){

ms2=ms;

blink_mode=modesmodes_count++;

if(modes_count>=7)modes_count=1;

}

}

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

4-й режим. Короткая вспышка 1 раз в секунду

5-й режим. Две короткие вспышки в секунду

6-й режим. Три вспышки.

Ну и постоянная череда коротких вспышек

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

Что если 8 бит состояний светодиодов мало?

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

C++

byte bytes[] = {0B00010101,0B00110011,0B10100011,0B00000010};

uint32_t ms, ms1 = 0;
uint8_t blink_loop = 0;

void setup() {
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
}

void loop() {
ms = millis();
// Событие срабатывающее каждые 125 мс
if( ( ms — ms1 ) > 125|| ms < ms1 ){
ms1 = ms;
// Выделяем сдвиг светодиода (3 бита)
uint8_t n_shift = blink_loop&0x07;
// Выделяем номер байта в массиве (2 байта со здвигом 3 )
uint8_t b_count = (blink_loop>>3)&0x3;
if( bytes & 1<< n_shift )digitalWrite(13, HIGH);
else digitalWrite(13, LOW);
blink_loop++;
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

bytebytes={0B00010101,0B00110011,0B10100011,0B00000010};

uint32_t ms,ms1=;

uint8_t  blink_loop=;

voidsetup(){

pinMode(13,OUTPUT);

digitalWrite(13,LOW);

}
 
 

voidloop(){

ms=millis();

// Событие срабатывающее каждые 125 мс  

if((ms-ms1)>125||ms<ms1){

ms1=ms;

// Выделяем сдвиг светодиода (3 бита)  

uint8_t n_shift=blink_loop&0x07;

// Выделяем номер байта в массиве (2 байта со здвигом 3 )      

uint8_t b_count=(blink_loop>>3)&0x3;

if(bytesb_count&1<<n_shift)digitalWrite(13,HIGH);

elsedigitalWrite(13,LOW);

blink_loop++;

}

}

Получаем циклический сигнал SOS — три коротких, три длинных и снова три коротких сигнала светодиодом, повторяемый каждые 4 секунды

Для тех, кто считает, что программировать микроконтроллеры в цикле loop() это не по Фен шую Несмотря на то, что millis() использует прерывание по первому таймеру

Соединяем все детали

На данном этапе у нас:

  • куплены все детали;
  • установлены все нужные программы (Arduino IDE и Fritzing при необходимости);
  • нарисована схема устройства.

Теперь мы начинаем собирать всё вместе. Не забываем заранее подготовить все провода-перемычки и все детали. Внимательно следуйте инструкциям и не спешите, чтобы убедиться, что все соединения выполнены правильно.

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

Если вы еще не вставили Arduino Nano к макетке — самое время это сделать:

Вставляем перемычки:

Теперь подключаем наше сопротивление:

И наконец вставляем светодиод:

И последнее на данном шаге — вставляем наш USB-кабель, который при покупке часто идет в комплекте с микроконтроллером:

Управление RGB светодиодом на Ардуино

Для этого занятия нам потребуется:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • макетная плата;
  • RGB светодиод;
  • 3 резистора 220 Ом;
  • провода «папа-мама».

Фото. Схема подключения RGB LED к Ардуино на макетной плате

Модуль «RGB светодиод» можно подключить напрямую к плате, без проводов и макетной платы. Подключите модуль с полноцветным RGB светодиодом к следующим пинам: Минус — GND, B — Pin13, G — Pin12, R — Pin11 (смотри первое фото). Если вы используете RGB LED (Light Emitting Diode), то подключите его по схеме на фото. После подключения модуля и сборки схемы на Ардуино загрузите скетч в плату.

Скетч для мигания RGB светодиодом на Ардуино

#define RED 11  // присваиваем имя RED для пина 11
#define GRN 12 // присваиваем имя GRN для пина 12
#define BLU 13  // присваиваем имя BLU для пина 13
 
void setup() {
   pinMode(RED, OUTPUT);  // используем Pin11 для вывода
   pinMode(GRN, OUTPUT); // используем Pin12 для вывода
   pinMode(BLU, OUTPUT);  // используем Pin13 для вывода
}
 
void loop() {
 
   digitalWrite(RED, HIGH); // включаем красный свет
   digitalWrite(GRN, LOW);
   digitalWrite(BLU, LOW);
 
   delay(1000); // устанавливаем паузу для эффекта
 
   digitalWrite(RED, LOW);
   digitalWrite(GRN, HIGH); // включаем зеленый свет
   digitalWrite(BLU, LOW);
 
   delay(1000); // устанавливаем паузу для эффекта
 
   digitalWrite(RED, LOW);
   digitalWrite(GRN, LOW);
   digitalWrite(BLU, HIGH); // включаем синий свет
 
  delay(1000); // устанавливаем паузу для эффекта
}

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

  1. с помощью директивы мы заменили номер пинов 11, 12 и 13 на соответствующие имена , и . Это сделано для удобства, чтобы не запутаться в скетче и понимать какой цвет мы включаем;
  2. в процедуре мы поочередно включаем все три цвета на RGB.

Функция millis вместо delay

Функция millis() позволит выполнить задержку без delay на ардуино, тем самым обойти недостатки предыдущих способов. Максимальное значение параметра millis такое же, как и у функции delay (4294967295мс или 50 суток). При переполнении значение просто сбрасывается в 0, не забывайте об этом.

С помощью millis мы не останавливаем выполнение всего скетча, а просто указываем, сколько времени ардуино должна просто “обходить” именно тот блок кода, который мы хотим приостановить. В отличие от delay millis сама по себе ничего не останавливает. Данная команда просто возвращает нам от встроенного таймера микроконтроллера количество миллисекунд, прошедших с момента запуска. При каждом вызове loop Мы сами измеряем время, прошедшее с последнего вызова нашего кода и если разница времени меньше желаемой паузы, то игнорируем код. Как только разница станет больше нужной паузы, мы выполняем код, получаем текущее время с помощью той же millis и запоминаем его – это время будет новой точкой отсчета. В следующем цикле отсчет уже будет от новой точки и мы опять будем игнорировать код, пока новая разница millis и нашего сохраненного прежде значения не достигнет вновь желаемой паузы.

Вот пример, наглядно иллюстрирующий работу команды:

Сначала мы вводим переменную timing, в ней будет храниться количество миллисекунд. По умолчанию значение переменной равно 0. В основной части программы проверяем условие: если количество миллисекунд с запуска микроконтроллера минус число, записанное в переменную timing больше, чем 10000, то выполняется действие по выводу сообщения в монитор порта и в переменную записывается текущее значение времени. В результате работы программы каждые 10 секунд в монитор порта будет выводиться надпись 10 seconds. Данный способ позволяет моргать светодиодом без delay.

Светодиодная мигалка — мультивибратор

  • Принцип работы мультивибратора
  • Мультивибратор в своем исполнении

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

Все это будет дальше по тексту, а пока я хочу рассказать небольшом изменении на блоге.

Заходя на свой бложик, мне всегда хочется сделать что-нибудь эдакое, что-то такое , что сделает сайт запоминающимся. Так что представляю вашему вниманию новую «секретную страницу» на блоге.

Эта страница отныне носит название — «».

Вы наверное спросите: «Как же ее найти?» А очень просто!

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

Причем стоит только подвести курсор мыши к этой надписи , как уголок начинает еще больше отслаиваться, обнажая надпись — ссылку «».

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

Ладно, немножко отвлекся, теперь продолжим…

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

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

Эта схема рабочая и неприхотливая. Нужно лишь определиться как же она работает?

Принцип работы мультивибратора

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

Переключение транзисторов происходит следующим образом.

Когда один транзистор открыт, допустим VT1, происходит разрядка конденсатора C1. Конденсатор С2 — напротив спокойно заряжается базовым током через R4.

Конденсатор C1 в процессе разрядки держит базу транзистора VT2 под отрицательным напряжением — запирает его. Дальнейшая разрядка доводит конденсатор C1 до нуля и далее заряжает его в другую сторону.

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

Проект “Светофор на Ардуино”

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

Если вы совсем новичок в Ардуино, крайне рекомендуем прочитать наши статьи для начинающих:

  • Первый урок с основами Ардуино.
  • Статью о том, как создаются проекты для начинающих.
  • Первые проекты со светодиодами – Маячок и Мигалка.

Сложность урока: для начинающих

Вам понадобится:

  • Плата Ардуино Уно или Нано.
  • Макетная плата.
  • Три светодиода. Естественно, что лучше всего красного, желтого и зеленого цветов.
  • Три резистора номиналом 220 Ом.
  • Соединительные провода.

Дребезг кнопки ардуино

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

Для устранения дребезга используют программные и аппаратные решения. В двух словах лишь упомянем основные методы подавления дребезга:

  • Добавляем в скетче паузу 10-50 миллисекунд между полкучением значений с пина ардуино.
  • Если мы используем прерывания, то программный метд использоваться не может и мы формируем аппаратную защиту. Простейшая из них  – RC фильтр с конденсатором и сопротивлением.
  • Для более точного подавления дребезга используется аппаратный фильтр с использованием триггера шмидта. Этот вариант позволит получить на входе в ардуино сигнал практически идеальной формы.

Более подробную информацию о способах борьбы с дребезгом вы можете найти в этой статье об устранении дребезга кнопок.

Заключение

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

Мы также научились собирать электрическую схему со светодиодом на основе макетной платы и Arduino Uno. В схеме обязательно использование токоограничивающих резисторов. Все примеры и схемы подключения актуальны и для более миниатюрного аналога Uno – платы Arduino Nano.

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