Arduino. Начало
Приветствую! Мы начинаем курс молодого бойца мира Arduino.
Это первый уровень. Он предназначен для тех, кто только-только попал в мир DIY электроники и хочет разобраться, что к чему, не корпя часами над учебниками. Без теории, конечно, не обойтись, но мы будем тут же подкреплять ее практикой.
Как начать
Чтобы начать курс обучения нужно:
- Скачать среду разработки Ардуино.
- Завести себе плату Arduino или ее аналоги.
- Научиться подключать плату к компьютеру.
- Приобрести себе рассыпухи. Все нужные детали будут в описании.
- Не бояться совершать ошибки. Без ошибок не будет развития.
- Иметь желание познать дзен DIY, конечно.
Если ты полон сил, у тебя есть необходимые компоненты, и ты готов открыть для себя мир электроники, добро пожаловать!
Аксиомы нашего курса
Если что-то не так, лучше вынуть кабель питания, и только после этого, менять схему.
Код нужно писать самому, а не копировать пример. Так ты запомнишь много, а если будешь копировать – совсем чуточку.
Не обязательно соблюдать цвета проводов, как на схемах. Цвет может быть любым, он не влияет на функциональность схемы.
Во всех наших экспериментах(1 Уровня) мы будем использовать ArduinoUNO и макетную плату. В компонентах, необходимых для проведения урока они не будут описываться. Опишу я их только в первом уроке.
Все решения, показанные в нашем курсе, не являются единственно верными. Если ты нашел другое, более рациональное решение для той или иной задачи, не думай, что ты не прав. Помни, что я показываю основы работы с Arduino и способы для решений типовых задач. А дальше, ты сам можешь усложнять/упрощать код или схемы на свое усмотрение. Твори, что тебе вздумается (в пределах разумного, конечно)
Первое устройство
Нашим первым небольшим проектом будет крайне полезная на дороге вещь - светофор.
Кто-нибудь думал о том, как устроен светофор? Там нет сложнейших схем и огромного числа электроники всего-то таймер да небольшая плата управления.
Мы попытаемся сделать небольшой светофор. Это будет идеальным началом для знакомства с Arduino.
Алгоритм работы светофора
Каждый проект начинается на бумаге. И наш не исключение. Давайте представим схему работы светофора в виде последовательности действий.
На рисунке видно, что после одного цикла действий мы начинаем его снова и снова. Действия идут в строгом порядке и не могут быть выполнены , пока не подойдет их очередь. Вот и мы должны писать нашу программу строго по алгоритму.
Так, с алгоритмом разобрались. Теперь нам нужно собрать наш светофор.
Детали для светофора
- Светодиод красный 1 шт
- Светодиод желтый 1 шт
- Светодиод зеленый 1 шт
- Резистор на 220 Ом 3 шт
- Макетная плата 1 шт
- ArduinoUNO 1 шт
- Соединительные провода "Папа-Папа" 7 шт
Сборка
Собираем наш светофор по схеме. Главное, соблюсти полярность светодиодов. У светодиода анод - это плюс, а катод - это минус. Длинную ножку (анод), подключить к пинам (Пин - это вывод или контакт, кому как нравится.) Еще нужно подключить светодиоды именно пинам 13, 12 и 11. Зеленый к 13, Желтый к 12, Красный к 11.
Кодим
Отлично. У нас есть мини-светофор. И теперь нам надо заставить его работать.
Для этого нам нужно запрограммировать плату. Не надо пугаться, эта задача не сложная. Нужно лишь чуток внимательности и все получится.Рабочий код будет прикреплен к статье.Если интересно узнать, что значат функции ,и почему мы пишем их именно так, можно зайти на arduino.ru.
Посмотрим на код:
//Впоследствии мы научимся делать код более компактным и читабельным, но для начала нам нужно разобраться с этим. void setup() { pinMode(13, OUTPUT); // Это наш зеленый светодиод,его мы обозначили как выход. pinMode(12,OUTPUT); // Это желтый pinMode(11,OUTPUT); //Это красный } //Теперь наш алгоритм, записанный на бумаге, нужно перевести в программу. void loop() { digitalWrite(11, HIGH); //Включаем красный светодиод delay(5000); //Ждем, пока он горит. digitalWrite(12, HIGH); //Вместе с красным зажигаем и желтый. delay(1000); //Ждем немного digitalWrite(11, LOW); //Теперь надо выключить красный и желтый, digitalWrite(12, LOW); digitalWrite(13, HIGH); //И включить зеленый delay(5000); //Ждем, пока горит зеленый digitalWrite(13, HIGH); // Теперь моргаем зеленым,Эту часть можно сделать меньше.Я расскажу об этом чуть позже. delay(800); digitalWrite(13, LOW); delay(800); digitalWrite(13, HIGH); delay(800); digitalWrite(13, LOW); delay(800); digitalWrite(13, HIGH); delay(800); digitalWrite(13, LOW); //Включаем желтый и гасим зеленый digitalWrite(12, HIGH); delay(1000); digitalWrite(12, LOW); //Гасим желтый delay(10); //Цикл повторяется бесконечное число раз. }
Теперь у нас есть рабочий светофор.
Меньше кода
Теперь давайте увеличим читаемость нашего кода и попробуем его сделать компактнее.
Посмотрим на наш код.
// Более правильный код. // Для лучшей читаемости, нужно давать, так называемые, макроопределения. // Макроопределение работает так, как и Вордовское "Найти и заменить". #define GREEN 13 // Обозначим 13 пин как Зеленый. #define YELLOW 12 // 12 - как Желтый. #define RED 11 // 11 - как красный. // Нам нужно создать переменные, для упрощения работы при настройке параметров программы и лучшей читаемости. int main_delay = 5000; // Время горения красного и зеленого int mini_delay = 1000; // Время горения желтого int blink_delay = 800; // Время моргания зеленого void setup() { pinMode(GREEN, OUTPUT); pinMode(YELLOW, OUTPUT); pinMode(RED, OUTPUT); } void loop() { digitalWrite(RED, HIGH); delay(main_delay); digitalWrite(YELLOW, HIGH); delay(mini_delay); digitalWrite(RED, LOW); digitalWrite(YELLOW, LOW); digitalWrite(GREEN, HIGH); delay(main_delay); digitalWrite(GREEN, LOW); // Теперь моргаем зеленым. Им можно моргать с помощью так называемого цикла со счетчиком. for(int i = 0; i < 3; i = i+1) { delay(blink_delay); digitalWrite(GREEN, HIGH); delay(blink_delay); digitalWrite(GREEN, LOW); } digitalWrite(YELLOW, HIGH); delay(mini_delay); digitalWrite(YELLOW, LOW); delay(mini_delay); } // Теперь наш код стал компактнее и читабельнее. // Но запомни, тебе следует давать осмысленные имена переменным и макроопределениям.Это улучшает читабельность. // Если ты через месяц откроешь свой код, ты поймешь о чем я говорю.
Пояснения
For - это так называемый цикл со счетчиком.Этот цикл повторяет действия ,заключенные в скобки, заданное количество раз. Сколько раз повторить - задается внутри круглых скобок.
В общем виде его можно записать так:
for(Переменная;Условие;Изменение)
{ Код, который нужно повторять}
Переменная - переменная, созданная только для цикла for. Нужна для того, чтобы "инициализировать" цикл. То есть сравнить переменную с условием цикла.
Условие - условие, при истинности которого будут выполняться действия в фигурных скобках.
Изменение - правило, по которому изменяется переменная. Изменение производится после проверки условия. После этого проверяется измененная переменная.
Итог урока
Теперь код более читабельный и компактный. Сегодня ты научился делать светофор. Это только начало. Тебе стоит отдохнуть и переварить полученную информацию. Но если ты горишь желанием продолжить, приступай к следующей статье.
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот |
---|---|---|---|---|---|---|
Плата Arduino | Arduino Uno | 1 | Поиск в магазине Отрон | |||
Светодиод | АЛ307В | 1 | Поиск в магазине Отрон | |||
Светодиод | АЛ102Б | 1 | Поиск в магазине Отрон | |||
Светодиод | АЛ307Д | 1 | Поиск в магазине Отрон | |||
Резистор | 220 Ом | 3 | Поиск в магазине Отрон | |||
Макетная плата | breadboard-half | 1 | Размер роли не играет.Главное, чтобы детали поместились | Поиск в магазине Отрон | ||
Соединительный провода | Папа-Папа | 7 | Поиск в магазине Отрон | |||
Скачать список элементов (PDF)
Прикрепленные файлы:
- Normal_light.ino (3 Кб)
- Simple__light.ino (2 Кб)
Комментарии (15) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
[Автор]
Этот цикл повторяет действия ,заключенные в скобки, заданное количество раз. Сколько раз повторить - задается внутри круглых скобок.
Для этого нужно создать переменную-счетчик, и проверить условие, при котором будет выполняться, далее, нужно задать условие, по которому будет выполняться изменение переменной-счетчика.
P.S. Извиняйте - забыл сделать пояснение. Сегодня исправлю.
[Автор]
В следующих статьях есть другое применение циклу со счетчиком
[Автор]
[Автор]
const int YELLOW = 6;
const int GREEN = 7;
int main_delay = 4000;
int mini_delay = 1000;
int blink_delay = 700;
void setup() {
pinMode (GREEN, OUTPUT);
pinMode (YELLOW, OUTPUT);
pinMode (RED, OUTPUT);
}
void loop() {
digitalWrite (RED, HIGH);
delay(main_delay);
digitalWrite(YELLOW, HIGH);
delay(mini_delay);
digitalWrite (RED, LOW);
digitalWrite(YELLOW, LOW);
digitalWrite(GREEN, HIGH);
delay(main_delay);
digitalWrite(GREEN, LOW);
delay(200);
for (int povtor = 1; povtor < = 3; povtor = povtor + 1) {
digitalWrite(GREEN, HIGH);
delay(blink_delay);
digitalWrite(GREEN, LOW);
delay(200);
}
digitalWrite(YELLOW, HIGH);
delay(mini_delay);
digitalWrite(YELLOW, LOW);
delay(200);
}
[Автор]
В принципе можно подключить и без резистора, но тогда есть шанс выхода светодиода из строя.
Arduino выдает 50мА. Если ваш светодиод выдерживает такой ток - смело подключайте. Найти максимальный ток светодиода можно в его характеристиках.