Светофор на Arduino своими руками!
Всем Доброго Времени Суток)) В этой статье я постараюсь максимально доходчиво рассказать о том, как можно сделать макет настоящего светофора.
Если же ваш ребенок любит повозиться с машинками, не так уж сложно добавить реальность в процесс его игры, а также сделать это занятие еще более увлекательным, занимательным и интересным! Так давайте же сделаем светофорчик! И так поехали!
Что нам понадобится из материалов:
Толкушка (будем использовать в качестве основания для нашего изобретения!)Листы для акварели (можно картон или любую другую более плотную бумагу)Фольгу (Я взял обычные обертки из под глазированных сырков)Светодиоды (трех цветов: красный, желтый, зеленый)Резисторы (Сопротивлением 220 Ом)Провода
Контроллер Arduino
Из инструментов будем использовать:Ручную дрель (с тонкими сверлышками)ОтверткуСаморезыСтеплерНожикПаяльник (припой, флюс)В принципе все, теперь приступим к самому процессу сборки нашего макета. Разделим все на 3 больших шага..
Шаг №1 Сборка “Козырьков”
Для начала из бумаги будем изготавливать козырьки для светофора. Начертим карандашом и вырежем ножницами (на фото цифры – это длина в сантиметрах).Сложив нашу заготовку – получим козырек..Но что бы свет, излучаемый светодиодами отражался как можно ярче, на внутреннюю поверхность следует закрепить фольгу.
Сначала вырежем ее точно такой же формы, как и козырек (с помощью ножика), а затем скрепим оба материала между собой обычным степлером.На фото (ниже) я показал черными полосками где скреплял..После этого сворачиваем нашу заготовку и скрепляем оставшиеся боковые части.
Повторяем весь процесс три раза, ведь у нас должно быть три козырька!
Шаг №2 Крепление “Козырьков”
С помощью дрели просверливаем отверстия для наших козырьков на толкушке.С задней стороны козырька проделываем два отверстия: меньшее для самореза, большее для светодиода.Продеваем светодиоды с задней стороны и прикручиваем козырьки к толкушке. Ножки светодиодов пока просто отогнем в стороны.. Опять же повторяем все для каждого козырька.
Шаг №3 “Электроника”Спаяем между собой катоды светодиодов (их земли). Напомню, катод – это короткая ножка)
Общую землю вставим в GND микроконтроллера.Теперь возьмем другие три провода и спаяем их с резисторами.Провода воткнем в контакты ардуинки (я взял пины 2, 3, 4), а концы резисторов припаяем к анодам светодиодов.
Теперь остается загрузить следующий скетч в ардуино и порадовать близких своей поделкой!
boolean k = 0; void setup() { pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); } void loop() { digitalWrite(2,1); digitalWrite(3,0); digitalWrite(4,0); delay(3500); for(int i = 0; i<6; i++) { digitalWrite(2, k); k = !k; delay(800); } digitalWrite(2,0); digitalWrite(3,1); digitalWrite(4,0); delay(3500); for(int i = 0; i<6; i++) { digitalWrite(3, k); k = !k; delay(800); } digitalWrite(2,0); digitalWrite(3,0); digitalWrite(4,1); delay(3500); for(int i = 0; i<6; i++) { digitalWrite(4, k); k = !k; delay(800); } }Измените скетч и задайте свое время мигания огоньков и их задержку!
На этом у меня все, Спасибо всем, кто дочитал до конца! Надеюсь эта самоделка вам понравилась и вдохновила на совершенно новые идеи!! Удачи!
Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.
Источник: https://USamodelkina.ru/8601-svetofor-na-arduino-svoimi-rukami.html
Делаем светофор с Arduino – Блог Ильи Житенёва (БЖ)
Соединяем 13 пин Arduino с длинной ногой зелёного светодиода, а короткую ногу через резистор в 220 [Ом] соединяем с «землёй». Аналогично соединяем жёлтый светодиод через 12 пин и красный через 11 пин. 7 пин через резистор 10 кОм подключим к «земле» и к кнопке.
Схема, необходимая для работы светофора собрана, теперь необходимо подключить кнопку, для управления им.
При установке кнопки есть некоторая хитрость — кнопку надо устанавливать на разделительную полосу между двумя половинками брэдборда.
Теперь подключаем кнопку. Тут всё очень просто – кнопка проводит в обоих направлениях, в отличие от различных диодов, поэтому нет никакой разницы, какой из контактов будет соединён с землёй. Соедините один контакт кнопки с портом №7 Arduino и этот же контакт соедините через резистор в 10 [кОм] с Землёй, а другой с питанием в 5 [В] — рельса со значком +.
ВАЖНО!! Во всех схемах Земля должна быть всегда одна – для всех подключаемых элементов.
Сборка на этом закончена! Приступаем к программированию Arduino!
// Задаём номера портов для светодиодов int GPin = 13; // Зелёный int YPin = 12; // Жёлтый int RPin = 11; // Красный int switchPin = 7; // Порт кнопки boolean lastButton = LOW; // Устанавливаем последнее значение кнопки – выключено boolean currentButton = LOW; // Устанавливаем текущее значение кнопки – включено boolean ledOn = false; // Состояние светофора: false – выключен (мигает жёлтый), true – включен boolean yellowOn = LOW; // Мигающий жёлтый. unsigned long loopTime; // Вспомогающая переменная для цикла unsigned long currentTime; // Переменная хранящая текущее значение времени void setup() { // Устанавливаем 3 порта как выход для светодиодов и один как вход для отслеживания кнопки pinMode(GPin, OUTPUT); pinMode(YPin, OUTPUT); pinMode(RPin, OUTPUT); pinMode(switchPin, INPUT); currentTime = millis(); loopTime = currentTime; } // Функция для лучшего отрабатывания нажатия на кнопку – ждёт установившегося значения, а затем передаёт его в программу. boolean debounce(boolean last) { boolean current = digitalRead(switchPin); if(last != current) { delay(5); current = digitalRead(switchPin); } return current; } void loop() { currentButton = debounce(lastButton); if(lastButton == LOW && currentButton == HIGH) // При нажатии на кнопку включаемвыключаем светофор { ledOn = !ledOn; } lastButton = currentButton; currentTime = millis(); // Цикл действий при выключенном светофоре if(currentTime >= (loopTime + 500) && ledOn == false) { yellowOn = !yellowOn; // Инвертируем значение переменной. digitalWrite(GPin, LOW); digitalWrite(YPin, yellowOn); digitalWrite(RPin, LOW); loopTime = currentTime; } // Цикл действий при включенном светофоре if(ledOn == true) { // Горит зелёный if(currentTime >= loopTime && currentTime < (loopTime + 10000)) { digitalWrite(GPin, HIGH); digitalWrite(YPin, LOW); digitalWrite(RPin, LOW); } // Зелёный начинает мигать if(currentTime >= (loopTime + 10000) && currentTime < (loopTime + 10500)) { digitalWrite(GPin, LOW); } if(currentTime >= (loopTime + 10500) && currentTime < (loopTime + 11000)) { digitalWrite(GPin, HIGH); } if(currentTime >= (loopTime + 11000) && currentTime < (loopTime + 11500)) { digitalWrite(GPin, LOW); } if(currentTime >= (loopTime + 11500) && currentTime < (loopTime + 12000)) { digitalWrite(GPin, HIGH); } if(currentTime >= (loopTime + 12000) && currentTime < (loopTime + 12500)) { digitalWrite(GPin, LOW); } if(currentTime >= (loopTime + 12500) && currentTime < (loopTime + 13000)) { digitalWrite(GPin, HIGH); } if(currentTime >= (loopTime + 13000) && currentTime < (loopTime + 13500)) { digitalWrite(GPin, LOW); } if(currentTime >= (loopTime + 13500) && currentTime < (loopTime + 1400)) { digitalWrite(GPin, HIGH); } if(currentTime >= (loopTime + 14000) && currentTime < (loopTime + 14300)) { digitalWrite(GPin, LOW); } // Загорается жёлтый if(currentTime >= (loopTime + 14300) && currentTime < (loopTime + 17500)) { digitalWrite(YPin, HIGH); } // Загорается красный if(currentTime >= (loopTime + 17500) && currentTime < (loopTime + 27500)) { digitalWrite(YPin, LOW); digitalWrite(RPin, HIGH); } // Загорается красный с жёлтым if(currentTime >= (loopTime + 27500) && currentTime < (loopTime + 30500)) { digitalWrite(YPin, HIGH); } // Загорается зелёный if(currentTime >= (loopTime + 30500)) { digitalWrite(GPin, HIGH); digitalWrite(YPin, LOW); digitalWrite(RPin, LOW); loopTime = currentTime; } } }<\p>
Код достаточно прост. Если светофор выключен, то просто мигает жёлтым, иначе включаем и выключаем определённые светодиоды через определённые промежутки времени.
Конечно, вместо столько сложного метода мы могли бы использовать простую задержку методом delay(), однако в использовании функции delay() есть один очень большой минус, который не должна обладать наша программа.
Во время паузы — процессор не реагирует на другие операции, таким образом, во время задержки, например, на горение красного светодиода, сколько кнопку не нажимай — светофор не выключиться. Чтобы выключить светофор — вам придётся попадать по кнопке в тот момент, когда изменяется состояние светодиода, что, согласитесь, очень неудобно.
Поэтому мы используем метод millis(), которые возвращает количество миллисекунд, прошедшее с момента запуска приложения, и отсчитываем нужные нам интервалы времени.
Ну что, сохраняем нашу программу (скетч) и загружаем её в Arduino. Смотрим что у нас получилось.
Задавайте любые, интересующие Вас, вопросы, а я отвечу на них в комментариях к этому посту. До скорых встреч!
Источник: https://zhitenev.ru/delaem-svetofor-s-arduino/
Контроль трафика на ардуино – светофор Arduino DIY
Так как проект является контроллером светофора, схема состоит из множества светодиодов (по сути, 12), поскольку мы применяем светофоры на 4-х стороннем перекрестке. Проект представляет собой простое представление контроллера светофора, следовательно не используются другие дополнительные компоненты.
Нам нужно три светодиода красного, желтого и зеленого цветов на каждом перекрестке. Пересечение разделено на четыре полосы: Lane1, Lane 2 Lane 3 и Lane 4.
Все светодиоды подключены к цифровым вводам / выводам Arduino UNO через соответствующие токоограничивающие резисторы 1 кОм.
Все соединения выполнены в соответствии с принципиальной схемой. Ниже представлена полная схема подключения.
Для сборки проекта нам потребуется следующие элементы которые можно приобрести на Алиэкспресс (ссылки кликабельны) :
Работа над проектом контроллера светофора
Контроллер светового потока в реальном времени представляет собой сложную часть оборудования, которая состоит из силового шкафа, главного контроллера или процессора, реле, панели управления с переключателями или ключами, коммуникационных портов и т. Д.
В этом проекте с использованием Arduino UNO реализована простая система светофоров для 4-х стороннего пересечения. Хотя это не идеальная реализация для реальных сценариев жизни, она дает представление о процессе, стоящем за системой управления световым сигналом
Целью проекта является реализация простого контроллера светофора с использованием Arduino UNO, где управление трафиком осуществляется в заранее заданной системе синхронизации. Работа над проектом очень проста и объясняется ниже.
Рассмотрим следующий рисунок gif, показывающий цикл операций светофора. Проект также осуществляется таким же образом.
int Lane1[] = {13,12,11}; // Lane 1 Red, Yellow and Green int Lane2[] = {10,9,8};// Lane 2 Red, Yellow and Green int Lane3[] = {7,6,5};// Lane 3 Red, Yellow and Green int Lane4[] = {4,3,2};// Lane 4 Red, Yellow and Green void setup() { for (int i = 0; i < 3; i++) { pinMode(Lane1[i], OUTPUT); pinMode(Lane2[i], OUTPUT); pinMode(Lane3[i], OUTPUT); pinMode(Lane4[i], OUTPUT); } for (int i = 0; i < 3; i++) { digitalWrite(Lane1[i], LOW); digitalWrite(Lane2[i], LOW); digitalWrite(Lane3[i], LOW); digitalWrite(Lane4[i], LOW); } } void loop() { digitalWrite(Lane1[2], HIGH); digitalWrite(Lane3[0], HIGH); digitalWrite(Lane4[0], HIGH); digitalWrite(Lane2[0], HIGH); delay(7000); digitalWrite(Lane1[2], LOW); digitalWrite(Lane3[0], LOW); digitalWrite(Lane1[1], HIGH); digitalWrite(Lane3[1], HIGH); delay(3000); digitalWrite(Lane1[1], LOW); digitalWrite(Lane3[1], LOW); digitalWrite(Lane1[0], HIGH); digitalWrite(Lane3[2], HIGH); delay(7000); digitalWrite(Lane3[2], LOW); digitalWrite(Lane4[0], LOW); digitalWrite(Lane3[1], HIGH); digitalWrite(Lane4[1], HIGH); delay(3000); digitalWrite(Lane3[1], LOW); digitalWrite(Lane4[1], LOW); digitalWrite(Lane3[0], HIGH); digitalWrite(Lane4[2], HIGH); delay(7000); digitalWrite(Lane4[2], LOW); digitalWrite(Lane2[0], LOW); digitalWrite(Lane4[1], HIGH); digitalWrite(Lane2[1], HIGH); delay(3000); digitalWrite(Lane4[1], LOW); digitalWrite(Lane2[1], LOW); digitalWrite(Lane4[0], HIGH); digitalWrite(Lane2[2], HIGH); delay(7000); digitalWrite(Lane1[0], LOW); digitalWrite(Lane2[2], LOW); digitalWrite(Lane1[1], HIGH); digitalWrite(Lane2[1], HIGH); delay(3000); digitalWrite(Lane2[1], LOW); digitalWrite(Lane1[1], LOW); }
Источник: http://www.electronica52.in.ua/proekty-arduino/kontrol-trafika-na-arduino–svetofor-arduino-diy-
Светофоры на Arduino
ПодробностиКатегория: Arduino
Представляю вашему вниманию проект светофоров на плате Arduino. В нем мы управляем 3-мя светодиодами – зеленым, желтым и красным.Данная системы состоит из 2-х световоров. Когда один светофор разрешает движение другой запрещает.
Когда движение запрещено – горит красный цвет, то в этот момент времени начинает моргать индикатор ожидания – маленький красный светодиод.
Проект в целях демонстрации собран на монтажной плате. Питание осуществляется через саму плату.
Внешний вид системы из 2-х светофоров
Каждый светодиод подключен через сопротивление в 470 Ом. Выдержка времени осуществленна через заданные временные интервалы в массиве duration.
Подключение светофоров осуществляеться к следующим выводам:
- первый к выводам 2,3,4,5;
- второй к выводам 6,7,8,9.
Программа светофора для Arduino
Код не такой уж и сложный, ели немного посмотреть и подумать то можно понять как он работает.// Source: http://www.electroschematics.
com/10178/arduino-traffic-light-system/ int trafficLights1[] = {2,3,4,5}; // red, yellow, green, pedestrians led pins int trafficLights2[] = {6,7,8,9}; // red, yellow, green, pedestrians led pins int situations = 4; int duration[] = {8000,3000,10000,3000}; // duration of each situation long previousCars = 0; long previousPeds = 0; long interval = 300; //blink interval for pedestrians int ledState = LOW; int state; int i = 0; void setup() { for(int i = 0; i < 4; i++) { pinMode(trafficLights1[i], OUTPUT); pinMode(trafficLights2[i], OUTPUT); } Serial.begin(9600); } void loop() { unsigned long currentMillis = millis(); if(currentMillis - previousCars < duration[i]) { situation(i); } else { previousCars = currentMillis; if(i >= situations) { i = 0; } else { i++; } } } void activateTrafficLight1(String lights, int pedestrians) { for(int x = 0; x < 3; x++) { if(lights[x] == '0') state = LOW; if(lights[x] == '1') state = HIGH; digitalWrite(trafficLights1[x], state); } if(pedestrians == 1) { blinkPed(trafficLights1[3]); } else { digitalWrite(trafficLights1[3], LOW); } } void activateTrafficLight2(String lights, int pedestrians) { for(int x = 0; x < 3; x++) { if(lights[x] == '0') state = LOW; if(lights[x] == '1') state = HIGH; digitalWrite(trafficLights2[x], state); } if(pedestrians == 1) { blinkPed(trafficLights2[3]); } else { digitalWrite(trafficLights2[3], LOW); } } void situation(int i) { switch(i){ case 0: activateTrafficLight1("100",1); // 100 means red ON, yellow OFF, green OFF activateTrafficLight2("001",0); // the second parameter is for pedestrians break; // 1 is ON and 0 is OFF case 1: activateTrafficLight1("110",0); // 110: red ON, yellow ON, green OFF activateTrafficLight2("010",0); break; case 2: activateTrafficLight1("001",0); activateTrafficLight2("100",1); break; case 3: activateTrafficLight1("010",0); activateTrafficLight2("110",0); break; } } void blinkPed(int ped) { unsigned long currentMillis = millis(); if(currentMillis - previousPeds > interval) { previousPeds = currentMillis; if (ledState == LOW) ledState = HIGH; else ledState = LOW; digitalWrite(ped, ledState); } }<\p>
Видео работы самодельного светофора на Arduino
Источник: http://www.radio-magic.ru/arduino-projects/127-svetofory-na-arduino
Курс молодого бойца мира Arduino
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. Нужна для того, чтобы “инициализировать” цикл. То есть сравнить переменную с условием цикла.
Условие – условие, при истинности которого будут выполняться действия в фигурных скобках.
Изменение – правило, по которому изменяется переменная. Изменение производится после проверки условия. После этого проверяется измененная переменная.
Итог урока
Теперь код более читабельный и компактный. Сегодня ты научился делать светофор. Это только начало. Тебе стоит отдохнуть и переварить полученную информацию. Но если ты горишь желанием продолжить, приступай к следующей статье.
Список радиоэлементов
Скачать список элементов (PDF)
Прикрепленные файлы:
- Normal_light.ino (3 Кб)
- Simple__light.ino (2 Кб)
Источник: http://cxem.net/arduino/arduino183.php
Минимальная Arduino своими руками
Arduino — это хорошо, когда хочется быстро реализовать идею, не заморачиваясь мелочами. Но когда идея проверена, лишняя функциональность начинает просто мешать.
Собирая робота на гусеничном шасси, я столкнулся с тем, что бутерброд из Arduino + MotorShield + Sensor Shield плюс ко всему аккумулятор и прочие компоненты обросли проводами и стали с трудом помещаться на не самом крошечном шасси. Городить еще кучу шилдов, чтобы избавиться от лишних проводов не хотелось. Появилась идея избавиться от всего, что в Arduino не требуется в готовом девайсе.
Попутно хотелось снизить стоимость робота. Многих интересующихся электроникой отпугивает еще и стоимость Arduino в магазинах. С ebay и китайских магазинов посылка идет долго, изобретательский пыл успевает остыть, поэтому приобретение откладывается «на потом», «когда сын подрастет». Поэтому я решил собрать Arduino-совместимую плату из деталей, которые всегда можно купить в городе.
В итоге я получил Arduino-совместимую плату, стоимостью в 210 рублей на макетной плате и в ~270 рублей в готовом для наращивания функционала виде.
«Minimalist Arduino» С нуля до полной готовности собирается с дешевым 40Вт паяльником за 1 выходной без каких-то особых навыков.
Лазерного принтера у меня нет, печатные платы самостоятельно никогда не разводил, поэтому решено было использовать не ЛУТ, а макетную плату с односторонней металлизацией (максимально дешевая, всегда есть в продаже).
Сначала я хотел купить Atmega328P в DIP корпусе, чтобы воспользоваться статьей Arduino on a Breadboard и собрать Arduino на беспаечной макетке.
Но оказалось, что в DIP28 ее в Москве крайне трудно найти, да к тому же в этом корпусе она существенно дороже. Зато в наличии навалом Atmega168 в любом корпусе. Но цена DIP28 и TQFP-32 отличается тоже довольно существенно. Для робота на гусеничном шасси и домашней автоматизации возможностей Atmega168 более чем достаточно, поэтому поборов страх, я решил сэкономить и использовать 168ю в TQFP-32 корпусе (шаг ножек — 0.8мм)Все компоненты кроме эпоксидной макетки я купил в Москве, в одном магазине (макетки продаются в любом радиомагазине или на рынке, просто у меня уже было 5 штук, купленных ранее на ebay). Итак, для начала нужно припаять микроконтроллер размером 9х9 мм на DIP переходник, чтобы более комфортно с ней было работать. mkpochtoi не работал, поэтому купить готовую макетную плату не получилось, купил макетку MP-QFP, от которой ножовкой по металлу отпилил кусок под TQFP-32.
Просмотрев видеоурок по пайке от DIHALT я водрузил микруху на макетку с помощью обычного 40Вт паяльника, потратив на это чуть больше 5 минут (опыта пайки таких мелких компонентов и вообще SMD компонентов у меня не было). В качестве флюса использовал несколько капель глицерина (попросил у девушки, она занимается мыловарением). Отмыл горячей водой и высушил феном.
«Atmega 168PA-AU» 40-ногую линейку PBS-40 кусачками настрогал на кусочки по 4 ножки и впаял с обратной стороны. Я взял гнезда, а не штырьки, чтобы микроконтроллерную плату можно было подключать к макетке проводками без пайки.
Дальше все как в статье — собрал на макетной плате схему, использовав datasheet от семейства Atmega 48/88/168 (номера ножек на DIP28 и TQFP-32 различаются).
Поскольку процессор я взял чистый, то предстояло прошить его бутлоадером от Arduino. Тут меня поджидала засада: Arduino IDE знает только Atmega168 и ничего не знает об Atmega168P (точнее Atmega168PA-AU) — более свежей версии микросхемы. Прошивать она его отказалась.
А еще раньше я выяснил, что Freeduino Nano v5.0 почему-то не хочет работать ISP программатором. Пришлось разобрать робота и достать Freeduino 2009. с помощью скетча ArduinoISP и примера на Freeduino.ru удалось заставить avrdude игнорировать различие в сигнатуре (ключ -F) и прошить бутлоадер, фьюзы и лок.
У меня сработал такой вариант:
::Прошиваем bootloader (порт COM9 нужно поменять на Ваш) avrdude -F -C avrdude.conf -p m168p -c avrisp -P COM9 -b 19200 -e -U flash:w:optiboot_diecimila.hex ::Прошиваем fuse и lock биты
avrdude -F -C avrdude.
conf -p m168p -c avrisp -P COM9 -b 19200 -Uefuse:w:0x00:m -Uhfuse:w:0xdd:m -Ulfuse:w:0xff:m -Ulock:w:0x0F:m
На официальном сайте есть описание подключения для прошивки:
Как вариант, можно обновить файл avrdude.conf, прописав правильную сигнатуру, но нужды в этом особой нет. Все, Arduino на макетке готова. Можно подключать любой USB — serial TTL (или RS-232-TTL) адаптер и зашивать скетч из Arduino IDE, выбрав Board->Arduino Diecimila, Duemilanove or Nano w/Atmega168.
«Breadboard Arduino» Убедившись в работоспособности, я занялся переносом на макетную плату. Сложнее всего оказалось оптимально разместить элементы. Для этого наиболее простым бесплатным инструментом оказался Fritzing. Правда нагромождение картинок и проводов выглядит страшно, но позволяет при сборке не запутаться в проводах:
«Minimalist Arduino» Я старался уменьшить количество отдельных проводов, припаивая где возможно выводы воткнутого компонента к нужному контакту просто сгибая его ножки и обрезая излишек. Добавив примерно 65 р на запчасти я получил вот такой результат:
«Minimalist Arduino» Для удобства я добавил шину питания и землю (2 гребенки справа внизу), кнопку питания, гнездо RX, TX, DTR для загрузки скетчей и ICSP разъем для прошивки микроконтроллера программатором прямо на плате.
«Minimalist Arduino в сборе» Воткнув микроконтроллерную плату с Atmega328P-AU, можно прогапгрейдить девайсик для задач, где 16 кб под скетч не хватает. Оставшееся на макетке место я собираюсь использовать под сенсоры, драйвер мотора и прочие нужные вещи. Вот список компонентов и цен:
Mакетная плата MP-QFP | 64 | 1 | 64 |
Glass-Epoxy Board Prototyping PCB 9×15 FR4 | 43 | 1 | 43 |
PBS-4 | 4 | 8 | 32 |
PBS-6 | 4 | 2 | 8 |
PLS-40 | 4 | 1 | 4 |
ATMega168PA-AU | 62 | 1 | 62 |
LM7805 1A 5V Positive Voltage Regulator | 15 | 1 | 15 |
16.000MHz Clock Crystal | 10 | 1 | 10 |
22pF Capacitor | 1 | 2 | 2 |
10uF Capacitor | 5 | 2 | 10 |
100nF Capacitor | 1 | 1 | 1 |
10kOhm Resistor | 1 | 1 | 1 |
150 Ohm Resistor | 1 | 2 | 2 |
DTS-61 кнопка | 2 | 1 | 2 |
PS-22E85L | 7 | 1 | 7 |
WF-02 вилка на плату | 1 | 1 | 1 |
Red 3mm LED | 2 | 1 | 2 |
Green 3mm LED | 2 | 1 | 2 |
Итого | 268р. |
Источник: https://habr.com/post/131589/