...са думите, които чувате от много МГ-йци, когато ги питате как вървят нещата по информатика...
Здравейте всички, аз съм Дани и от 5 години се занимавам с програмиране. Със статията, която следва, ще се опитам да ви убедя, че програмирането не е толкова страшно, просто ако го използвате за лични нужди.
Цялата ми история в света на програмирането започна в 9ти клас. Както всички училища почнахме да учим булеви системи (тези само с 0-ли и 1-ци) и смятахме на ръка как да преобразуваме от двойчна в десетична и шестнайсетична система. Тогава ни убеждаваха, че "това е основата на всичко". След 5 години програмиране и следване на инженерна специалност мога да кажа "това НЕ Е основата на всичко". Всичко започва с
Hello World!
Още не знаете какво е Visual Studio, какво е обект, как компютъра преработва 0-лите и 1-ците, дори не знаете как да отворите нов проект в Code Blocks (защото учителят ви го е направил за вас), но самата мисъл, че сте създали нещо от нищо вече осмисля цялото мъчение.
Минават още няколко учебни часа, научавате 2-3 функции, каква е разликата между float и int и учителят вече се опитва да ви убеди, че може с това да си решавате задачите по математика. Разбира се виждате, че усилията не си струват за нещо такова. Но ви хрумва идеята да направите игра! Тя няма да е нищо особено, просто история с избори, представена чрез текст. Чудите се откъде да започнете...
Писането на код все още е трудно. Решавате, че ще е по-лесно първо да я напишете на хартия, а после да я прехвърлите дигитално. Разписвате историята на хартия, изборите през които ще минава играчът, какви ще са последствията от тях, какви краища ще има играта и идва времето да започнете кода...
Все още не знаете много функции, но си спомняте за console.WriteLine() и if(). Пренаписвате историята в Code Blocks, правите изборите точно както сте ги написали на хартия, натискате бутона Compile, очаквайки няколкото дена труд най-после да станат реалност, и...
Първият Compile error
Но защо стана така, всичко го написах както трябва!?
Всичкият труд вложен досега изглежда, че ще отиде на вятъра... Чудите се, "наистина ли си похабих толкова много от свободното време за един провал, нещо което дори не мога АЗ да играя?"
Това е първият ви възвратен момент. Тук имате избора да се откажете от програмирането, защото е загуба на време, или да вникнете в кода си, да разберете грешките си и да ги оправите.
Отивате в YouTube и виждате новата ракета на чичо Елон, автономни коли, изкуствен интелект, последното поколение видеокарти с RTX ядра и най-вече: виждате любимата си игра. Тази, която нямаше да съществува без програмисти. Знаете, че бъдещето се гради от програмистите. Все пак зад всяка електроника, която ползвате в момента, стоят хиляди екипи от инженери, които го правят възможно. Решавате че искате да сте:
Творец на бъдещето
И така вече навлязохте в света на програмирането. Оправихте програмата си и най-после може да покажете на всички първата си игра! От тук нататък пътищата за развитие са безкрайни, методите за обучение още по-безкрайни, а приложението на програмирането е най-безкрайно.
Сега е време да ви покажа с малко знания и малко мерак, колко много може да се постигне. От както започнах да следвам инженерна специалност, видях изключително много неща, които човек може да направи просто с едно...
ARDUINO!
Ардуиното представлява малък програмируем компютър и с него може да правите буквално всичко. Много големи компании го ползват за направа на прототипи на изделията си. Почти всеки комерсиален обект с компютър, който виждате, е направен като се използва прототип на ардуино. RGB LED ленти -> контролират се от ардуино, 3D принтери -> ардуино, новата уредба в хола -> ардуино, касови апарати -> ардуино, чиповете за отваряне на входната врата на блока -> ами пак ардуино.
Тези компютърчета идват във всякакви форми и размери, като най - често използваните са Nano, Uno и Mega.
Теория
Накратко казано, тези компютърчета се състоят от 3 главни части. Микроконтролер (по - добро от процесор), аналогови и дигитални пинове. Дигиталните могат да приемат само нули и единици като сигнал (0 или не-0 волта) , а аналоговите приемат стойности от 0-1024 (0 до 5 волта). Например за определяне дали е натиснат бутон ще използваме дигитален пин, а за мерене на напрежение [V] ще използваме аналогов.
Ще ви дам един пример със светофар, който лесно може да подобрите на диско топка. За целта ще ни трябват 3 диода, 3 резистора (защото токът, идващ от ардуиното, е прекалено голям и трябва с резистори да го намалим, за да не изгорим диодите си) и 1 ардуино. През диода може да протича ток само в една посока, за това трябва да сме внимателни! Свързваме анода(+) към дигитален пин на ардуиното, а към катода(-) закачаме резистор (няма значение дали той е преди или след диода). Свързваме към обща нула (след като сме подали ток от правилното място, няма нужда той да се "оттече" за всеки по отделен канал).
Сега идва моментът да напишем код за ардуиното. Той в нашия случай е много прост. Във всяка програма на ардуино има 2 важни части: void setup() и void loop().
Void setup() е функция, която се изпълнява само веднъж при стартирането на ардуиното. Нея я ползваме, за да конфигурираме ардуиното. В нашия случай му казваме, че от пинове 2, 3 и 4 ще подаваме ток (а няма да приемаме).
Void loop() е функция която се изпълнява постоянно. Повтаря се в цикъл (когато стигне края, отново се връща в началото) и не спира, докато не изключим захранването на ардуиното. В нашия случай, казваме на ардуиното ни да подаде сигнал(ток) към 2ри пин, да изчака 2 секунди и после да спре тока. Това се повтаря за всички диоди.
// pin 2 = red
// pin 3 = yellow
// pin 4 = green
void setup() {
// declare pin 2,3,4 to be outputs:
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
}
void loop(){
digitalWrite(2, HIGH); // Turns LED on pin 2 on
delay(2000); // LED on pin 2 remains on for 2 seconds
digitalWrite(2, LOW); // Turns LED on pin 2 off
digitalWrite(3, HIGH); // Turns LED on pin 3 on
delay(500); // LED on pin 3 remains on for .5 seconds
digitalWrite(3, LOW); // Turns LED on pin 3 off
digitalWrite(4, HIGH); // Turns LED on pin 4 on
delay(2000); // LED on pin 4 remains on for 2 seconds
digitalWrite(4, LOW); // Turns LED on pin 4 off
digitalWrite(3, HIGH); // Turns LED on pin 3 on
delay(500); // LED on pin 3 remains on for .5 seconds
digitalWrite(3, LOW); // Turns LED on pin 3 off
}
Свързваме ардуиното си към компютъра, компилираме през Arduino IDE програмата и зареждаме кода!
Можем много лесно да направим светофара ни по-наподобяващ на диско топка, ако заменим стойността на delay със нещо много по-ниско (например 100ms) или ако навържем повече диоди, които да светят едновременно!
Цена на проекта:
Arduino Uno - 6лв от Aliexpress (между 10-20лв в България)
диоди и резистори - 4лв комплект от 30 диода и 30 резистора от Aliexpress
Breadboard - 0,80лв от Викиват
кабели - 3лв комплект от 30 (M to F, M to M, F to F) от Aliexpress
Обща цена - 13,8лв
Обща цена по използвани компоненти - 7,5лв
И това е само част от функционалността на ардуино! Компютърчето може да контролира екрани, да командва стъпкови мотори, да записва файлове в SD карта, да контролира RFID модули (системи за достъп), да поддържа уеб сървъри(ESP) и още безброй други неща!
Как да експериментираме, без да си купуваме ардуино?
Варианти винаги има и най-добрата опция е TinkerCAD! Чрез Circuit опцията може да добавите ардуино на полето си и да го кодирате като реално ардуино! Лесно е за схващане и е много добра опция за тестване, преди да пренесете проекта си в реалния живот, ако искате да видите дали системата ви няма да избухне!
В TinkerCAD има много заложени примери, които са лесни за схващане, и с малко креативност лесно може да ги преобразувате в полезни проекти за вашия дом!
Собствени проекти
В момента с Клуба по Роботика в ТУ София разработваме система за достъп, която ще може да се контролира както със стандартен чип, така и с телефон*! В сегашния прототип може да записваме и съхраняваме карти (като записването става с натискане на бутон) и да светваме диод в зависимост дали е разпозната или не картата. При монтиране върху брава, също ще се контролира и бравата (не само диода). Може да видите сегашния прототип на системата във видеото долу.
Частта с телефона все още се разработва*
Друг проект, който ще осъществя по-напред в бъдеще, е 3D принтер! Ще използвам ардуино като основа със CNC Shield и стъпкови двигатели!
И така стигнахте до края на статията.
Надявам се да ви е било интересно и да сте понаучили поне малко за възможностите на Ардуино!
absolute madman! <3