Arduino е платка за микроконтролери, която можете да програмирате за управление на външни устройства. Той взаимодейства с външния свят чрез сензори, мотори, светодиоди, високоговорители ... и дори интернет, което го прави гъвкава платформа за различни проекти. Има доста микроконтролери, но Arduino е популярен поради факта, че различни проекти са много активно изложени и обсъждани в Интернет. Ако търсите в google или youtube, ще намерите милиони идеи и информация, за да започнете сами да изследвате Arduino.
Дори и да нямате опит с програмирането на микроконтролери - с Arduino бързо ще научите и научите нещо електроника използвайки експерименти.
Какво трябва да започнете?
Arduino Uno- 1бр
USB кабел-1бр
Джъмпери 1бр
1бр съвет за развитие
Червен LED 4 бр
220 ома резистор 4бр
Резистор 10 стая 1 бр
Бутон без фиксиране
потенциометър
RGB LED с общ катод
Всичко това може да се купи в местен радио магазин или да се поръча в интернет.
Използва се онлайн симулатор за демонстриране и симулиране на електрически вериги.
Този симулатор работи най-добре в браузъра Chrome.
Нека разгледаме по-отблизо Arduino.
Arduino не е голям компютър, към който могат да се свържат външни вериги. Arduino Uno използва Atmega 328P
Това е най-големият чип на дъската. Този чип изпълнява програми, които се съхраняват в неговата памет. Можете да изтеглите програмата чрез usb с помощта на Arduino IDE. Usb порта също осигурява захранване на arduino.
Има отделен конектор за захранване. На платката има два изхода с етикет 5v и 3.3v, които са необходими за захранването на различни устройства. Също така ще намерите щифтове, маркирани като GND, това са наземни изводи (земята е 0V). Платформата Arduino също има 14 цифрови изхода (пина), маркирани с числа от 0 до 13, които са свързани към външни възли и имат две състояния, високо или ниско (включено или изключено). Тези контакти могат да работят като изходи или като входове, т.е. те могат или да предават някои данни и да управляват външни устройства, или да получават данни от устройства. Следните изводи на таблото са обозначени A0-A5. Това са аналогови входове, които могат да приемат данни от различни сензори. Това е особено удобно, когато трябва да измерите обхват, като например температура. Аналоговите входове имат допълнителни функции, които могат да се активират отделно.
Как да използвате табло.
За временно свързване на частите, за да проверите как работи устройството, е необходимо преди да спойкате всичко заедно.
Всички следващи примери са събрани на дъска, за да можете бързо да направите промени в схемата и да използвате повторно частите, без да се занимавате с запояване.
В дъската има редици от дупки, в които можете да вмъкнете части и проводници. Някои от тези дупки са електрически свързани помежду си.
Двата горни и долни реда са свързани последователно по цялата дъска. Тези редове се използват за захранване на веригата. Тя може да бъде 5v или 3.3v, но във всеки случай, първото нещо, което трябва да направите, е да свържете 5v и GND към дънната платка, както е показано на фигурата. Понякога тези редови връзки могат да бъдат прекъснати в средата на дъската, тогава ако трябва, можете да ги свържете, както е показано на фигурата.
Останалите дупки, разположени в средата на дъската, са групирани в пет отвора. Те се използват за свързване на части от веригата.
Първото нещо, което свързваме към нашия микроконтролер, е LED. Диаграмата за електрическо свързване е показана на снимката.
Защо ми трябва резистор във веригата? В този случай тя ограничава тока, който преминава през светодиода. Всеки светодиод е проектиран за специфичен ток и ако този ток е по-голям, тогава светодиодът ще се провали. Разберете каква стойност трябва да използва резисторът, използвайки закона на Ом. За тези, които не знаят или са забравили, законът на Ом казва, че съществува линейна зависимост на тока от напрежението. Тоест, колкото повече прилагаме напрежение към резистора, толкова повече ток ще тече през него.
V = I * R
където V-напрежение през резистора
аз- ток през резистора
R- съпротива да се намери.
Първо, трябва да открием напрежението в резистора. Повечето от 3 мм или 5 мм светодиоди, които ще използвате, имат 3V работно напрежение. Така че за резистора трябва да изплатим 5-3 = 2v.
След това изчисляваме тока, преминаващ през резистора.
Повечето 3 и 5 мм светодиоди светят при пълна яркост при ток от 20 mA. Ток повече от това може да ги деактивира, а ток с по-малка сила ще намали яркостта им, без да причини вреда.
Така че, ние искаме да включим светодиода във веригата 5v, така че да има ток от 20mA. Тъй като всички части са включени в една верига, резисторът също ще има ток от 20 mA.
Получаваме
2V = 20 mA * R
2V = 0,02A * R
R = 100 ома
100 Ома е минималното съпротивление, по-добре е да използвате малко повече, защото светодиодите имат известна промяна в характеристиките.
В този пример се използва резистор 220 ома. Само защото авторът има много от тях: wink:.
Поставете светодиода в отворите в средата на платката, така че дългият му извод да бъде свързан към един от изводите на резистора. Свържете втория край на резистора към 5V и свържете втория изход на светодиода към GND. Светодиодът трябва да светне.
Моля, обърнете внимание, че има разлика в начина на свързване на светодиода. Ток тече от по-дълъг терминал към по-къс. На диаграмата може да се представи, че токът тече в посоката, където е насочен триъгълникът. Опитайте да обърнете светодиода и ще видите, че няма да светне.
Но как свързвате резистора, няма никаква разлика. Можете да го обърнете или да опитате да го свържете към другия изход на светодиода, това няма да повлияе на работата на веригата. Той все още ще ограничи тока през светодиода.
Анатомия на скица на Ардуино.
Програмите за Arduino се наричат скица. Те се състоят от две основни функции. функция настройка и функция контур
вътре в тази функция ще зададете всички основни настройки. Какви изводи ще работят при въвеждането или изхода, кои библиотеки да се свържат, инициализират променливи. функция Настройка () Стартира само веднъж по време на скицата, когато стартира програмата.
това е основната функция, която се изпълнява след настройка (), Всъщност това е самата програма. Тази функция ще работи безкрайно, докато не изключите захранването.
Мигащ светодиод Arduino
В този пример ще свържем схемата със светодиода към един от цифровите пинове на Arduino и ще го включим и изключим с помощта на програмата, а също така ще научите няколко полезни функции.
- тази функция се използва в настройка () части от програмата и служи за инициализиране на заключенията, които ще използвате като вход (INPUT) или излезте (Продукция), Не можете да четете или записвате данни от щифта, докато не го настроите съответно на pinMode, Тази функция има два аргумента: pinNumber- Това е номера на щифта, който ще използвате.
вид- определя как ще работи щифта. На входа (INPUT) или излезте (Продукция), За да запалим светодиода трябва да подадем сигнал ОТ Arduino. За целта конфигурираме щифта за излизане.
- тази функция служи за задаване на състоянието (ДВ) щифт (PinNumber), Има две основни състояния (общо има 3), едно е HIGH, щифта ще бъде 5v, друг е ниско и щифта ще бъде 0v. Така че, за да запалим светодиода, трябва да зададем високо ниво на щифта, свързан към светодиода HIGH.
- забавяне. Служи за забавяне на програмата за определен период в мс.
По-долу е кодът, който кара да мига светодиода.
// LED мига
int ledPin = 7; // Arduino щифт, към който е свързан светодиодът
настройка за невалидност () {
pinMode (ledPin, OUTPUT); // задайте щифта като EXIT
}
void loop () {
digitalWrite (ledPin, HIGH); // свети LED
закъснение (1000); // закъснение 1000 ms (1 сек.)
digitalWrite (ledPin, LOW); // Изключете светодиода
забавяне (1000); // изчакайте 1 сек
}
Малко обяснение на кода.
Линиите, които започват с „//“, са коментари на Ардуино, които ги игнорират.
Всички команди завършват с точка и запетая; ако ги забравите, ще получите съобщение за грешка.
ledPinе променлива. Променливите се използват в програми за съхранение на стойности. В този пример променливата ledPin присвоена стойност 7, това е номера на щифта на Arduino. Когато Arduino в програмата срещне низ с променлива ledPin , ще използва стойността, която посочихме по-рано.
Така че запишете pinMode (ledPin, OUTPUT) подобно на записа pinMode (7, изход).
Но в първия случай е достатъчно да промените променливата и тя ще се промени във всеки ред, където се използва, а във втория случай, за да промените променливата, трябва да направите промени в писалките във всяка команда.
в първия ред показва типа на променливата. Когато програмирате Arduino, важно е винаги да декларирате типа променливи. Засега трябва само да знаете това INT обявява отрицателни и положителни числа.
По-долу е представено моделиране скица. Натиснете старт, за да видите работата на веригата.
Както се очаква, светодиодът се изключва и светва след една секунда. Опитайте да промените забавянето, за да видите как работи.
Управление на няколко светодиода.
В този пример ще научите как да контролирате няколко светодиода. За целта инсталирайте още 3 светодиода на платката и ги свържете към резисторите и щифтовете на Arduino, както е показано по-долу.
За да включите и изключите светодиодите на свой ред, трябва да напишете програма като тази:
// Multi LED мига
int led1Pin = 4;
int led2Pin = 5;
int led3Pin = 6;
int led4Pin = 7;
настройка за невалидност () {
// задайте щифтове като EXIT
pinMode (led1Pin, OUTPUT);
pinMode (led2Pin, OUTPUT);
pinMode (led3Pin, OUTPUT);
pinMode (led4Pin, OUTPUT);
}
void loop () {
digitalWrite (led1Pin, HIGH); // свети LED
забавяне (1000); // забавяне 1 сек
digitalWrite (led1Pin, LOW); // изгасете светодиода
забавяне (1000); // забавяне 1 сек
// направете същото и за останалите 3 светодиода
digitalWrite (led2Pin, HIGH); // свети LED
забавяне (1000); // забавяне 1 сек
digitalWrite (led2Pin, LOW); // изгасете светодиода
забавяне (1000); // забавяне 1 сек
digitalWrite (led3Pin, HIGH); // свети LED
забавяне (1000); // забавяне 1 сек
digitalWrite (led3Pin, LOW); // изгасете светодиода
забавяне (1000); // забавяне 1 сек
digitalWrite (led4Pin, HIGH); // свети LED
забавяне (1000); // забавяне 1 сек
digitalWrite (led4Pin, LOW); // изгасете светодиода
забавяне (1000); // забавяне 1 сек
}
Тази програма ще работи добре, но това не е най-рационалното решение. Кодът трябва да бъде променен. За да може програмата да работи отново и отново, ще използваме наречената конструкция.
Циклите са удобни, когато трябва да повторите едно и също действие няколко пъти. В горния код повтаряме редовете
digitalWrite (led4Pin, HIGH);
забавяне (1000);
digitalWrite (led4Pin, LOW);
забавяне (1000);
пълен код на скицата в прикачения файл
LED регулиране на яркостта
Понякога ще трябва да промените яркостта на светодиодите в програмата. Това може да стане с помощта на командата analogWrite (), Тази команда включва и изключва светодиода толкова бързо, че окото не вижда това трептене. Ако светодиодът се включи на половината от времето и наполовина, тогава визуално ще изглежда, че свети на половината си яркост. Това се нарича импулсна широчина модулация (PWM или PWM на английски). PWM се използва доста често, тъй като може да се използва за управление на „аналоговия“ компонент с помощта на цифров код. Не всички Arduino щифтове са подходящи за тези цели. Само тези заключения, около които се прави такова обозначение "~".Ще го видите до щифтове 3,5,6,9,10,11.
Свържете един от вашите светодиоди към един от PWM изходите (за автора това е пин 9). Сега стартирайте мигащия светодиод на скицата, но първо променете командата digitalWrite () за analogWrite (). analogWrite () Той има два аргумента: първият е номерът на щифта, а вторият е PWM стойността (0-255), както се прилага за светодиодите, това ще бъде тяхната яркост, а за електрическите двигатели - скоростта на въртене. По-долу е примерен код за различна LED яркост.
// Промяна на яркостта на светодиода
int ledPin = 9; // LED свързан към този щифт
настройка за невалидност () {
pinMode (ledPin, OUTPUT); // инициализирайте пина за извеждане
}
void loop () {
analogWrite (ledPin, 255); // пълна яркост (255/255 = 1)
забавяне (1000); // пауза 1 сек
digitalWrite (ledPin, LOW); // изключете светодиода
забавяне (1000); // пауза 1 сек
analogWrite (ledPin, 191); // яркост при 3/4 (191/255 ~ = 0,75)
забавяне (1000); // пауза 1 сек
digitalWrite (ledPin, LOW); // изключете светодиода
забавяне (1000); // пауза 1 сек
analogWrite (ledPin, 127); // половин яркост (127/255 ~ = 0,5)
забавяне (1000); // пауза 1 сек
digitalWrite (ledPin, LOW); // изключете светодиода
забавяне (1000); // пауза 1 сек
analogWrite (ledPin, 63); // яркост на четвърт (63/255 ~ = 0,25)
забавяне (1000); // пауза 1 сек
digitalWrite (ledPin, LOW); // изключете светодиода
забавяне (1000); // пауза 1 сек
}
Опитайте да промените PWM стойността в командата analogWrite ()за да видите как влияе на яркостта.
След това ще научите как да регулирате яркостта плавно от пълна до нула. Можете, разбира се, да копирате парче код 255 пъти
analogWrite (ledPin, яркост);
забавяне (5); // кратко забавяне
яркост = яркост + 1;
Но, разбирате ли - няма да е практично. За да направите това, най-добре е да използвате контура FOR, който беше използван преди.
Следващият пример използва два цикъла, един за намаляване на яркостта от 255 до 0
за (int яркост = 0; яркост = 0; яркост -) {
analogWrite (ledPin, яркост);
забавяне (5);
}
забавяне (5) използва се за забавяне на скоростта на покачване и падане на яркостта 5 * 256 = 1280 ms = 1.28 сек.)
Първият ред използва „brightness-"така че стойността на яркостта намалява с 1, всеки път, когато цикълът се повтаря. Моля, обърнете внимание, че цикълът ще работи толкова дълго, колкото яркост> = 0.Смяна на табелата > на табелата >= включихме 0 в диапазона на яркостта. Тази скица е моделирана по-долу.
// плавно променяйте яркостта
int ledPin = 9; // LED е свързан към този щифт
настройка за невалидност () {
pinMode (ledPin, OUTPUT); // инициализирайте щифта за излизане
}
void loop () {
// постепенно увеличавайте яркостта (0 до 255)
за (int яркост = 0; яркост = 0; яркост -) {
analogWrite (ledPin, яркост);
забавяне (5);
}
забавяне (1000); // изчакайте 1 сек
// плавно намаляване на яркостта (255 до 0)
за (int яркост = 255; яркост> = 0; яркост -) {
analogWrite (ledPin, яркост);
забавяне (5);
}
забавяне (1000); // изчакайте 1 сек
}
}
Това не е много видимо, но идеята е ясна.
RGB LED и Arduino
RGB светодиодът всъщност е три светодиода с различни цветове в един корпус.
Включвайки различни светодиоди с различна яркост, можете да комбинирате и да получите различни цветове. За Arduino, където броят на градациите на яркостта е 256, получавате 256 ^ 3 = 16581375 възможни цветове. В действителност, разбира се, ще има по-малко от тях.
Светодиодът, който ще използваме, е общият катод. Т.е. и трите светодиода са конструктивно свързани чрез катоди към един терминал. Ще свържем този щифт с щифта GND. Останалите клеми, чрез ограничаващите резистори, трябва да бъдат свързани към PWM клемите. Авторът използва заключения 9-11. По този начин ще бъде възможно да се управлява всеки светодиод поотделно. Първата скица показва как да включите всеки светодиод поотделно.
// RGB LED - тест
// pin връзки
int червено = 9;
int green = 10;
int blue = 11;
настройка за невалидност () {
pinMode (червен, OUTPUT);
pinMode (син, изход);
pinMode (зелен, изход);
}
void loop () {
// включване / изключване на червения светодиод
digitalWrite (червен, ВИСОКИ);
забавяне (500);
digitalWrite (червено, НИСКО);
забавяне (500);
// включване / изключване на зеления светодиод
digitalWrite (зелен, ВИСОКИ);
забавяне (500);
digitalWrite (зелен, нисък);
забавяне (500);
// включване / изключване на синия светодиод
digitalWrite (син, ВИСОКИ);
забавяне (500);
digitalWrite (син, нисък);
забавяне (500);
}
Следващият пример използва командите analogWrite () и да получите различни стойности на случайна яркост за светодиоди. Ще видите различни цветове да се променят на случаен принцип.
// RGB LED - произволни цветове
// pin връзки
int червено = 9;
int green = 10;
int blue = 11;
настройка за невалидност () {
pinMode (червен, OUTPUT);
pinMode (син, изход);
pinMode (зелен, изход);
}
void loop () {
// изберете случаен цвят
analogWrite (червен, случаен (256));
analogWrite (син, случаен (256));
analogWrite (зелен, случаен (256));
забавяне (1000); // изчакайте една секунда
}
Случайно (256)-Връща връщане на произволно число в диапазона от 0 до 255.
В прикачения файл има скица, която демонстрира плавни преходи на цветове от червено към зелено, след това към синьо, червено, зелено и т.н.
Примерна скица работи, но има много дублиращ се код. Можете да опростите кода, като напишете своя собствена помощна функция, която плавно ще промени един цвят в друг.
Ето как ще изглежда:
Нека разгледаме дефиницията на функция на части. Извикана функция плъзгач и има два аргумента. Всеки аргумент е разделен със запетая и има тип, деклариран в първия ред на дефиницията на функцията: void fader (int color1, int color2), Виждате, че и двата аргумента са декларирани като инт, и им се дават имена COLOR1 и COLOR2 като условни променливи за дефиниране на функция. празнота означава, че функцията не връща никакви стойности, тя просто изпълнява команди. Ако беше необходимо да се напише функция, която върна резултата от умножението, тя ще изглежда така:
int множител (int number1, int number2) {
int продукт = число1 * число2;
продукт за връщане;
}
Забележете как обявихме Тип инт като тип връщане вместо това
празнота.
Вътре във функцията има команди, които вече сте използвали в предишната скица, само номерата на пиновете бяха заменени с COLOR1 и COLOR2, Извикана функция плъзгач, аргументите му се изчисляват като color1 = червен и color2 = зелен, Архивът е пълен скица с помощта на функции
бутон
В следващата скица ще се използва бутон с нормално отворени контакти, без да се фиксира.
Това означава, че докато бутонът не е натиснат, токът не тече през него и след освобождаването, бутонът се връща в първоначалното си положение.
Във веригата, в допълнение към бутона, се използва резистор. В този случай тя не ограничава тока, а "дърпа" бутона до 0v (GND). Т.е. докато бутонът бъде натиснат на щифта на Arduino, към който е свързан, нивото ще бъде ниско. Резисторът, използван във веригата от 10 kΩ.
// определете щракването на бутона
int buttonPin = 7;
настройка за невалидност () {
pinMode (buttonPin, INPUT); // инициализира входния щифт
Serial.begin (9600); // инициализира серийния порт
}
void loop () {
if (digitalRead (buttonPin) == HIGH) {// ако бутонът е натиснат
Serial.println ("натиснат"); // отпечатай "натиснат"
} else {
Serial.println ("непритиснат"); // в противен случай "непритиснат"
}
}
В тази скица има няколко нови екипа.
-Тази команда приема стойността High (високо ниво) и ниско (ниско ниво) на изхода, който проверяваме. Преди това в setup () този изход трябва да бъде конфигуриран за въвеждане.
; // където buttonPin е номера на щифта, където е свързан бутонът.
Серийният порт ви позволява да изпращате Arduino съобщения до компютъра, докато самият контролер управлява програмата. Това е полезно за отстраняване на грешки в програма, изпращане на съобщения до други устройства или приложения. За да разрешите прехвърлянето на данни през серийния порт (известен също като UART или USART), трябва да го инициализирате в setup ()
Serial.begin () има само един аргумент е скоростта на предаване на данни между Arduino и компютъра.
скица, команда се използва за показване на съобщение на екрана в Arduino IDE (Инструменти >> Сериен монитор).
- дизайнът ви позволява да контролирате напредъка на програмата, като комбинирате няколко проверки на едно място.
Ако (ако) digitalRead върне ВИСОКО, тогава на монитора се показва думата "натиснат". Друго (иначе) думата „изцеден“ се показва на монитора. Сега можете да опитате да включите и изключите светодиода с едно натискане на бутон.
// откриване на натискане на бутон с LED изход
int buttonPin = 7;
int ledPin = 8;
настройка за невалидност () {
pinMode (buttonPin, INPUT); // този път ще зададем pin pin като INPUT
pinMode (ledPin, OUTPUT);
Serial.begin (9600);
}
void loop () {
ако (digitalRead (buttonPin) == HIGH) {
digitalWrite (ledPin, HIGH);
Serial.println ("натиснат");
} else {
digitalWrite (ledPin, LOW);
Serial.println ("нетиснат");
}
}
Аналогов вход.
analogRead ви позволява да четете данни от един от аналоговите щифтове на Arduino и показва стойност в диапазона от 0 (0V) до 1023 (5V). Ако напрежението на аналоговия вход е 2,5 V, тогава ще бъде отпечатано 2.5 / 5 * 1023 = 512
analogRead има само един аргумент - Това е аналоговият входен номер (A0-A5). Следващата скица предоставя код за отчитане на напрежението от потенциометър. За да направите това, свържете променлив резистор, крайните щифтове към щифтове 5V и GND и средния щифт за вход A0.
Изпълнете следния код и погледнете в серийния монитор как стойностите се променят в зависимост от въртенето на копчето на резистора.
// аналогов вход
int potPin = A0; // централният изход на потенциометъра е свързан към този щифт
настройка за невалидност () {
// аналоговият щифт е активиран чрез въвеждане по подразбиране, така че не е необходима инициализация
Serial.begin (9600);
}
void loop () {
int potVal = analogRead (potPin); // potVal е число между 0 и 1023
Serial.println (potVal);
}
Следващата скица съчетава скица за щракване с бутон и скица за контрол на яркостта с LED. Светодиодът ще се включи от бутона, а потенциометърът ще контролира яркостта на сиянието.
// откриване на натискане на бутон с LED изход и променлива интензивност
int buttonPin = 7;
int ledPin = 9;
int potPin = A0;
настройка за невалидност () {
pinMode (buttonPin, INPUT);
pinMode (ledPin, OUTPUT);
Serial.begin (9600);
}
void loop () {
if (digitalRead (buttonPin) == HIGH) {// ако бутонът е натиснат
int analogVal = analogRead (potPin);
int scaledVal = карта (analogVal, 0, 1023, 0, 255);
analogWrite (ledPin, scaledVal); // включете led с интензитет, зададен от пот
Serial.println ("натиснат");
} else {
digitalWrite (ledPin, LOW); // изключете, ако не е натиснат бутон
Serial.println ("нетиснат");
}
}