Реклама ⓘ
Главная » Arduino
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Реклама ⓘ

Курс молодого бойца мира Arduino

Arduino. Начало

Приветствую! Мы начинаем курс молодого бойца мира Arduino.

Это первый уровень. Он предназначен для тех, кто только-только попал в мир DIY электроники и хочет разобраться, что к чему, не корпя часами над учебниками. Без теории, конечно, не обойтись, но мы будем тут же подкреплять ее практикой.

Как начать

Чтобы начать курс обучения нужно:

  1.  Скачать среду разработки Ардуино.
  2. Завести себе плату Arduino или ее аналоги. 
  3. Научиться подключать плату к компьютеру.
  4. Приобрести себе рассыпухи. Все нужные детали будут в описании.
  5. Не бояться совершать ошибки. Без ошибок не будет развития.
  6. Иметь желание познать дзен 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-half1 Размер роли не играет.Главное, чтобы детали поместилисьПоиск в магазине ОтронВ блокнот
Соединительный проводаПапа-Папа7 Поиск в магазине ОтронВ блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Теги:

Опубликована: Изменена: 12.02.2018 0 3
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (15) | Я собрал (0) | Подписаться

0
Ильнур #
Прокоментируйте пожалуйста вот это - for(int i = 0; i < 3; i = i+1)
Ответить
0

[Автор]
Симилячник #
for - это так называемый цикл со счетчиком.
Этот цикл повторяет действия ,заключенные в скобки, заданное количество раз. Сколько раз повторить - задается внутри круглых скобок.
Для этого нужно создать переменную-счетчик, и проверить условие, при котором будет выполняться, далее, нужно задать условие, по которому будет выполняться изменение переменной-счетчика.
P.S. Извиняйте - забыл сделать пояснение. Сегодня исправлю.
Ответить
0
Max #
Цикл, на 3 итерации, правда не оптимально? лучше так for(unsigned char i=0;i
Ответить
0

[Автор]
Симилячник #
Я лишь привел пример применения цикла со счетчиком, показал применение. И выше написано, что мой вариант не является единственно верным априори.
В следующих статьях есть другое применение циклу со счетчиком
Ответить
0
Ильнур #
А проверка условия и прибавление к переменной единицы происходит в начале цикла?
Ответить
0

[Автор]
Симилячник #
Сначала инициализииуется переменная. Далее - идет проверка условия. После этого производится увеличение переменной. Проверяется условие с новой переменной. И так далее.
Ответить
0
Александр #
В алгоритме ошибка
Ответить
0

[Автор]
Симилячник #
Спасибо! Исправим.
Ответить
0
БГ #
const int RED = 5;
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);
}
Ответить
0
Сергей #
А зачем резистор? Простите мою безграмотность.
Ответить
0

[Автор]
Симилячник #
Резистор нужен чтобы понизить силу тока. Его так же называют ограничивающий резистор.
В принципе можно подключить и без резистора, но тогда есть шанс выхода светодиода из строя.
Arduino выдает 50мА. Если ваш светодиод выдерживает такой ток - смело подключайте. Найти максимальный ток светодиода можно в его характеристиках.
Ответить
0
madgardner #
А можно два светодиода на 25 мА параллельно?
Ответить
0
виталий #
Простите мою безграмотность, но при чем здесь сила тока? Критично напряжение-же... или в сторону (свето)диодов действуют другие принципы? Ведь если подключить к 50мА нагрузку на 100мА, то греться и выходить из строя будет уже сама ардуина, не?
Ответить
0
alex_taran #
СД будет пытаться поддерживать на своих выводах напряжение отпирания.обычно это около 2 вольт. Если прикладывать большее, то он начнет открываться все сильнее, и ток через него начнет расти. Если источник достаточно мощный, то СД выйдет из строя быстрее. Обычные маломощные СД держат около 20 мА, соответственно сгорят первыми. Чтобы этого избежать и ставят резисторы. Они погасят лишнее напряжение.
Ответить
0
roman90878 #
При заливки скеча выдает ошибку digitalWrite(GREEN, HIGH); и пишет что зеленый не был обьявлен в этой области. Что это значит?
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическое сопротивление?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Arduino UNO
Arduino UNO
Набор начинающего радиолюбителя LC-измеритель LC100-A
вверх