Садржај 01 Шта је Ардуино ...............................................................................................................................3 02 Треперећи LED ................................................................................................................................5 03 Тастер и испис стања на екрану .....................................................................................................6 04 Зујалица (Buzzer) .............................................................................................................................7 05 Ултра–звучни сензор.......................................................................................................................8 06 Ултра–звучни сензор и бузер (зујалица) .....................................................................................10 07 ЛЕД диода и тастер .......................................................................................................................11 08 Потенциометар ..............................................................................................................................12 09 Потенциометар и ЛЕД диода .......................................................................................................13 10 Звучни сензор и ЛЕД диода .........................................................................................................15 11 FOR loop (петља) са 6 ЛЕД диода................................................................................................16 12 Фото–отпорник (Photo resistor) ....................................................................................................17 13 Детектор покрета (PIR) и ЛЕД .....................................................................................................18 14 Ласер – предајник ..........................................................................................................................19 15 Ласерски пријемник и предајник .................................................................................................20 16 Тач (touch) сензор и ЛЕД диода ...................................................................................................21 17 Tastatura ..........................................................................................................................................22 18 Релеј ................................................................................................................................................23 19 Сензор за температуру и влажност ..............................................................................................24 20 Сензор за кишу ..............................................................................................................................25 21 7 сегментни дисплеј ......................................................................................................................26 22 LCD дисплеј ...................................................................................................................................29 23 LCD Дисплеј и сензор за температуру и влажност ....................................................................30 24 Bluetooth .........................................................................................................................................31 25 Џојстик ...........................................................................................................................................32 26 Инфра–црвени (IR) сензор ...........................................................................................................33 27 Switch Statement ‘a–e’ пале ЛЕД, бројеви 1–5 гасе одговарајућу, ‘s’ гаси све ......................35 28 Fingerprint reader ............................................................................................................................37 29 RFID ................................................................................................................................................38 30 LED Matrix .....................................................................................................................................40 31 DC motor .........................................................................................................................................42 32 Steper motor ....................................................................................................................................43 33 Servo motor .....................................................................................................................................44 34 Servo motor i sensor za kišu ...........................................................................................................45 35 UV sensor i DC motor .....................................................................................................................46 36 Bluetooth i servo motor ...................................................................................................................47 37 Automatska ruka i džojstik ..............................................................................................................48 38 Повезивање два Ардуина..............................................................................................................49 01 Шта је Ардуино Пинови (5V, 3.3V, GND, Analog, Digital, PWM) Пинови на Ардуину су места где се жице (каблови) прикључују на Ардуино плочу, када се конструишу електрична кола. Они обично имају црне пластичне “главе” у које је могуће убости каблове директно у Ардуино плочу. Ардуино има више врста пинова, при чему су сви означени на Ардуино плочи и имају различите функције. GND (3): Скраћени назив ‘Ground’. Постоји неколико GND пинова на Ардуино плочи , сваки од њих се може користити као минус (-) за струјни коло које се конструише. 5V (4) & 3.3V (5): Су пинови који нам дају напон од 5V (пинови означени са 5V), и 3.3V (пинови означени са 3.3V). Већина сензора и других компоненти које се употребљвају на Ардуину користе раде на 5 или 3.3 волта. Analog (6): Поред ознаке ‘Analog In’ (A0 до A5) се налазе аналогни пинови. Ови пинови могу да очитавају сигнал са аналогних сензора (као што је сенсор за температуру) и да те вредности конвертује у дигиталне вредности са којима се даље може врштити обрада у Ардуину. Dиgиtal (7): Поред аналогних пинова постоје и дигитални пинови (0 до 13). Ови пинови се могу користити како за очитавање дигиталних вредности на улазу (нпр. да ли је притиснут тастер) тако и за дигитални излаз (нпр укључивање ЛЕД диоде). PWM (8): поред дигиталних пинова (3, 5, 6, 9, 10 и 11) стоји знак (~). Ови пинови су нормални дигитални пинови али се могу користити и за нешто што се зове Pulse-Width Modulation (PWM). Ардуино програмски код void setup() { // Овде се смешта параметри за „setup“ код који се извршава само једном } void loop() { // Овде се смешта главни код који се стално извршава } Aрдуино табла „Breadboard“, полови ЛЕД диода и означавање отпорника Ардуино развојно окружење – едитор за писање кода (програма) 02 Треперећи LED Ардуино УНО Breadboard Каблови USB кабел ЛЕД диода (5mm) Прекидач 220 Ohm отпорник Ардуино код – треперећи ЛЕД //Ардуино код за ЛЕД диоду int led = 13; int kasnjenje = 1000; //у милисекундама, 1000ms = 1s void setup() { pinMode(led, OUTPUT); } void loop() { digitalWrite(led, HIGH); delay(kasnjenje); digitalWrite(led, LOW); delay(kasnjenje); } 03 Тастер и испис стања на екрану Ардуино Тастер 10k ohm отпорник Каблови Breadboard Ардуино код – тастер //Ардуино код за тастер са исписом на екран вредности тастера int tasterPin = 2; // setup део – извршава се само први пут void setup() { Serial.begin(9600); pinMode(tasterPin, INPUT); } void loop() { int stanjeTastera = digitalRead(tasterPin); Serial.println(stanjeTastera); delay(1); // кашњење између два очитавања стања тастера } 0x Зујалица (Buzzer) Arduino uno Breadboard Buzzer KY-006 Ардуино код – бузер int buzzer = 8; // Дефинисање пина у који ће се повезати бузер void setup() { pinMode(buzzer, OUTPUT); // Дефинисање пина 8 као излазног } void loop() { //креирање звука for (int i = 0; i < 80; i++) { digitalWrite(buzzer, HIGH); // шаље HIGH сигнал на бузер delay(1); // касни 1ms digitalWrite(buzzer, LOW); // шаље LOW сигнал на бузер delay(1); } delay(50); //креирање новог тона for (int j = 0; j < 100; j++) { digitalWrite(buzzer, HIGH); delay(2); // касни 2ms digitalWrite(buzzer, LOW); delay(2); } delay(100); } 0x Ултра–звучни сензор VCC Trig (INPUT) Echo (OUTPUT) GND 5V Pin 11 Pin 12 GND Ардуино код – ултразвучни сензор /* Коплетно упутсво за Ultrasonic Sensor HC-SR04 */ int trigPin = 11; //Дефинисање пина за Тригер - одашиљач int echoPin = 12; // Дефинисање пина за Ехо - пријемник long duration, cm; void setup() { //Почетак Serial Port Serial.begin (9600); //Дефинисање улаза и излаза pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); } void loop() { // Тригер се прво поставља на LOW да би се осигурало да нема шумова пре пуштања HIGH сигнала: // Сензор пушта HIGH сигнал 10 микро секунди. digitalWrite(trigPin, LOW); delayMicroseconds(5); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // Ехо пин хвата повратни HIGH сигнал који је претходно послао тригер // Мери се време у микросекундама од времена слања (тригер) до времена пријема сигнала (ехо) pinMode(echoPin, INPUT); duration = pulseIn(echoPin, HIGH); //време које је протекло од слања до пријема сигнала // Конвертовање времена у раздаљину врши се по формули: (duration/2) / 29.1 cm = (duration/2) / 29.1; // време се дели са 29.1 или множи са 0.0343 Serial.print(cm); Serial.print("cm"); Serial.println(); delay(250); } 0x Ултра–звучни сензор и бузер (зујалица) Ардуино Ултразвучни сензор Каблови Бузер Ардуино код – бузер // Када се неки објекат приближи ултразвучном сензору ближе од 0.5м оглашава се бузер // Дефинисање пина за ултразвучни сензор и бузер int const trigPin = 10; int const echoPin = 9; int const buzzPin = 2; void setup() { pinMode(trigPin, OUTPUT); // Триг пин се дефинише као излазни pinMode(echoPin, INPUT); // Ехо пин се дефинише као улазни pinMode(buzzPin, OUTPUT); // Бузер пин се дефинише као излазни } void loop() { // Декларисање променљивих за трајање сигнала и раздаљину int duration, distance; digitalWrite(trigPin, HIGH); // Излазни пулс траје 1ms delay(1); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); // Мери се време протекло од слања до пријема // Раздаљина се одређује као као пола времена трајања сигнала подељено са 29.1 distance = (duration/2) / 29.1; // Ако је раздаљина већа од 0m и мања од 0.5m огласиће се бузер if (distance <= 50 && distance >= 0) { digitalWrite(buzzPin, HIGH); //Бузер укључен } else { digitalWrite(buzzPin, LOW); //Бузер искључен } delay(60); //чекај 60 ms до следеће провере раздаљине објекта у односу на ултразвук } 04 ЛЕД диода и тастер Ардуино Breadboard Каблови USB каблови ЛЕД диода Tастер 10k Ohm отпорник 220 Ohm отпорник Ардуино код – тастер и ЛЕД диода int ledPin = 13; // изабери пин за ЛЕД диоду int inPin = 2; // изабери улазни пин (за тастер) int val = 0; // промењива за исчитавање вредности статуса пина void setup() { pinMode(ledPin, OUTPUT); // дефинисање ledPin пина као излазног pinMode(inPin, INPUT); // дефинисање inPin као улазног } void loop(){ val = digitalRead(inPin); // чита улазну вредност if (val == HIGH) { // провера да ли је вредност на улазу HIGH (тастер није притиснут) digitalWrite(ledPin, LOW); // искључи ЛЕД диоду } else { digitalWrite(ledPin, HIGH); // укључи ЛЕД диоду } 08 Потенциометар Ардуино Потенциометар Каблови - џампери Ардуино код – потенциометар /* Чита аналогни сигнал на пину 0, штампа резултат на серијски монитор. Прикачити цебтрални пин потенциометра на A0, а спољне пинове на +5V и gnd. */ // сетап програмски код извршава се само једном: void setup(){ { Serial.begin(9600); } // подешава серијску комуникацију на 9600 bit-а по секунди: // Loop део програма се извршавастално, из круга у круг: void loop(){ int sensorValue = analogRead(A0); // чита улазну вредност на анлогном pin-у 0: Serial.println(sensorValue); // штампање исчитане вредности: delay(1); // сачекај 1ms па поново иди на почетак loop-а } 09 Потенциометар и ЛЕД диода У овој лекцији се учи како се мења интензитет светлости ЛЕД диоде преко потенциометра. Табла Каблови Отпорник (220Ω) Лед диода Потенциометар Ардуино код – потенциометар и укључивање/искључивање (on/off) ЛЕД диоде int analogPin = A0; int ledPin = 9; int inputValue = 0; //аналогни улазни сигнал качи се пин A0 //ЛЕД се качи на пин 9 //промењива која чува вредност добијену са потенциометра. //Инијална вредност се поставља на 0. void setup(){ pinMode(ledPin, OUTPUT); } // ledPin се проглашава као излазни // Loop део програма се извршавастално, из круга у круг: void loop(){ inputValue = analogRead(analogPin); //чита вредност са потенциометра if(inputValue < 500) { digitalWrite(ledPin, LOW); // Искључи ЛЕД } else { digitalWrite(ledPin, HIGH); // Укључи ЛЕД } Ардуино код – регулација потенциометром јачине светлости ЛЕД-а int int int int analogPin = A0; ledPin = 9; inputValue = 0; outputValue = 0; // аналогни улазни сигнал качи се пин A0 // ЛЕД се качи на пин 9 // промењива која чува вредност добијену са потенциометра. // промењива која чува излазну вредност void setup(){ } // Loop део програма се извршавастално, из круга у круг: void loop(){ inputValue = analogRead(analogPin); // чита вредност са потенциометра //претварање вредности 0-1023 са потенциометра на пропорционалне вредности од 0 до 255 outputValue = map(inputValue,0,1023,0,255); analogWrite(ledPin,outputValue); //Укључи ЛЕД снагом која је између 0-255 } 10 Звучни сензор и ЛЕД диода Ардуино 1x звучни сензор са микрофоном 1x ЛЕД диода 1x 220 Ohm отпорник КАблови Ардуино код – звучни сензор и ЛЕД диода int ledPin=13; int sensorPin=7; boolean val =0; void setup(){ pinMode(ledPin, OUTPUT); pinMode(sensorPin, INPUT); Serial.begin (9600); } void loop(){ val =digitalRead(sensorPin); Serial.println (val); if (val >= 50) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } } //чита вредност са сензора и смешта је у промењиву val //штампа вредност за val //Ако је вредност преко неке вредности укључи ЛЕД 11 FOR loop (петља) са 6 ЛЕД диода Ардуино Табла 6 х 220 ohm отпорника 6 ЛЕД диода Ардуино код – FOR петља са 6 ЛЕД диода /* Демонстрација употребе For Loop Диоде се пале у низу па се гасе обрнутим редом */ int timer = 100; void setup() { // Већи број спорије се креће паљење ЛЕД диода и обрнуто. // употребом for loop петље иницијализује се сваки пин од 2 до 7 као излазни (output): for (int thisPin = 2; thisPin < 7; thisPin++) { pinMode(thisPin, OUTPUT); } } void loop() { // петља креће од најмањег пина (2) до највећег (7): for (int thisPin = 2; thisPin < 7; thisPin++) { digitalWrite(thisPin, HIGH); // укључи пин delay(timer); digitalWrite(thisPin, LOW); // искључи пин } // петља креће од највећег пина (7) до најмањег (2): for (int thisPin = 6; thisPin >= 2; thisPin--) { digitalWrite(thisPin, HIGH); // укључи пин delay(timer); digitalWrite(thisPin, LOW); // искључи пин } } 12 Фото–отпорник (Photo resistor) Ардуино пин A0 –> пин за фото–отпорник Ардуино пин 9 –> пин за ЛЕД диоду Ардуино пин 5V –> +5V Ардуино пин GND –> GND (-) Ардуино код – Фото-отпорник и ЛЕД диода /* Коришћење фото–отпорника за паљење ЛЕД диоде у мраку */ //Константе const int pResistor = A0; // фото–отпорника се прикључује на пин A0 const int ledPin=9; // Лед пин се прикључује на пин 9 //Промењиве int value; // Узима вредност са фото–отпорника у распону (0-1023) void setup(){ pinMode(ledPin, OUTPUT); // Постављање lepPin - 9 пина као излазног pinMode(pResistor, INPUT); // Постављање pResistor - A0 пина као улазног (optional) } void loop(){ value = analogRead(pResistor); //чита се вредност са фото–отпорника и додељује value //уместо "25" може се ставити било која вредност за осетљивост фото–отпорника if (value > 25){ digitalWrite(ledPin, LOW); //искључи ЛЕД диоду } else{ digitalWrite(ledPin, HIGH); //укључи ЛЕД диоду } delay(500); //мало кашњење између два очитавања } 13 Детектор покрета (PIR) и ЛЕД Ардуино 1 x ЛЕД диода 1 x 220 Ohm отпорник 2 x jumper wires (male to male) 3 x jumper wires (male to female) 1 x Детектор покрета – PIR (passive motion sensor) Ардуино код – Детектор покрета и ЛЕД диода int led = 7; int pirSensor = 4; void setup(){ pinMode(pirSensor, INPUT_PULLUP); pinMode(led, OUTPUT); Serial.begin(9200); } void loop(){ if (digitalRead(pirSensor)) { //Да ли је сензор посало неку вредност Serial.println("Sensed Something"); //ако је да испиши на екран digitalWrite(led, HIGH); //ако је да укључи ЛЕД диоду } else { //ако је не digitalWrite(led, LOW); //искључи ЛЕД диоду Serial.println("Sensed Nothing"); //напиши поруку } delay(500); } //провери поново за пола секунде 5 Ласер – предајник Ардуино шема за KY-008 ласерски модул (предајник). Не гледати директно у извор ласерске светлости, може оштетити око. Pin – = GND Pin (среднји pin) = није повезан Pin S = +5V Ардуино код – ласер предајник KY-008 //Ардуино програм за предајник Laser KY-008 int laserPin = 13; void setup() { pinMode (laserPin, OUTPUT); // Дефинисање пина 13 као излазног (output) } void loop() { digitalWrite (laserPin, HIGH); delay (1000); digitalWrite (laserPin, LOW); delay (500); } // Укључи ласер // остани укључен 1 секунду // Искључи ласер // остани искључен пола секунде 15 Ласерски пријемник и предајник У примеру се демонстрира употреба ласерског предајника и пријемника. Предајник шаље сигнал до пријемника, а вредност са пријемника се испсује на екрану. Ардуино код – ласер предајник и ласер пријемник int pinLaser = 2; int pinReceiver = 3; // пин за ласер, излазни сигнал за ласер // пин за пријемник, улазни сигнал void setup() { pinMode(pinLaser, OUTPUT); // постављање pinLaser пина као излазни (output) pinMode(pinReceiver, INPUT); // постављање pinReceiver пина као улазни (input) digitalWrite(pinLaser, HIGH); // емитуј ласерски зрак Serial.begin(9600); //Успостави серијску конекцију за испис вредности са поријемника } void loop() { int value = digitalRead(pinReceiver); // пријемник детектује вредности LOW или HIGH Serial.println(value); // испиши добијену вредност на екран delay(1000); // кечај 1000ms = 1s } 16 Тач (touch) сензор и ЛЕД диода Ардуино Каблови Capacitive Touch Sensor ЛЕД диода 680 Ohm отпорник Ардуино код – тач сензор и ЛЕД диода // У зависности од јачине притиска на тач сензор пали се или гаси ЛЕД диода. //пин за ЛЕД int ledPin=7; void setup() { pinMode(ledPin,OUTPUT); Serial.begin(9600); } //пин за ЛЕД постављен као излазни (output) void loop() { // чита се улаз на аналогном улазном пину A0 и вредност се исписује на екран. int tacPritisak = analogRead(A0); //конверотванје вредности (0 - 1023) добијене са тач уређаја у стварни напон (0 - 5V) float ocitaniNapon = (5.0 / 1023.0)*tacPritisak; Serial.print(ocitaniNapon); Serial.println("Volti"); if (ocitaniNapon >1.5){ //дефинисање вредности напона преко које се укључује ЛЕД digitalWrite(ledPin,HIGH); // укључи ЛЕД } else{ digitalWrite(ledPin,LOW); // искључи ЛЕД } delay(20); //чекај 20ms па се врати на loop } 17 Tastatura Тастатура је матрица која се састоји од редова и колона. Сваки тастер је додељен одређеном реду и колони (слика доле). На тастатури са 12 тастера постоје 4 реда и 3 колоне. Први тастер (1) прави везу између реда 1 и колоне 1 (R1K1). Тастер 2 ће бити R1K2, 3 R1K3, * R4K1, 9 R3K3 … Библиотека за тастатуру - http://playground.arduino.cc/Code/Keypad#Download Тастатура Ардуино код – тастатура #include "Keypad.h" const byte ROWS = 4; const byte COLS = 3; char keys[ROWS][COLS] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'#','0','*'} }; // укључивање библиотеке // број редова // број колона // дефинисање изгледа тастатуре byte rowPins[ROWS] = {8, 7, 6, 5}; //пинови за редове на тастатури R1=pin8, R2=pin7, R3= pin6, R4= pin5 byte colPins[COLS] = {4, 3, 2}; //пинови за редове на тастатури C1 = pin4, C2 =pin3, C3 =pin2 Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS); //креирање објекта void setup() { Serial.begin(9600); } void loop() { char key = keypad.getKey(); if (key != NO_KEY) Serial.println(key); } //функција преузима вредност притиснутог тастера са тастатуре 18 Релеј На високо–напонској страни релеја један конектор са сијалице повезати на средњи контакт (middle contact), контакт NO (Normally Open) повезати на лампу. Када на (S) контакт дође сигнал high сијалица ће се упалити. Ардуино пин 10 –> релеј пин S Ардуино GND –> релеј пин – Ардуино +5V –> релеј пин + Ардуино код – релеј (on/off) //Програм укључује и искључује лампу прикачену на релеј int relay = 10; // Дефинисање пина за контролу релеја, активан – high; void setup() { pinMode (relay, OUTPUT); // пин се поставља као излазни – output; } void loop() { digitalWrite (relay, HIGH); // релеј се укључује delay (1000); digitalWrite (relay, LOW); // релеј се искључује delay (1000); } 19 Сензор за температуру и влажност Пример показује употребу DHT11 сензора за мерење температуре и влажности коришћењем библиотеке (Adafruit: library) https://github.com/adafruit/DHT-sensor-library/archive/master.zip Ардуино Табла DHT11 сензор Каблови Ардуино код – Photo Resistor Module #include "DHT.h" // додавање библиотеке #define DHTPIN 2 // пин на који се качи сензор #define DHTTYPE DHT11 // Дефинисање типа DHT dht(DHTPIN, DHTTYPE); //Дефинисање објекта са именом DHT void setup() { Serial.begin(9600); Serial.println("DHT testiranje"); dht.begin(); } void loop() { // Читање температуре и влажности траје око 250 milisekundi, nа старијим сензорима и до 2s float h = dht.readHumidity(); //чита влажност и придружује вредност промењивој h float t = dht.readTemperature(); //чита temperaturu и придружује вредност промењивој t Serial.print("Vlaznost: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperatura: "); Serial.print(t); Serial.println(" *C"); } // исписује текст: Vlaznost // исписује вредност за h // исписује размак (празно) // исписује текст:Temperatura // исписује вредност за t // исписује текст: C 20 Сензор за кишу Повезивање сензора за ниво воде на Ардуину: Поввезати S пин на било који аналогни пин, повезати + и – пин на 5V и GND. Ардуино Табла Сензор за течност Каблови Ардуино код – сензор за кишу void setup() { Serial.begin(9600); //успостављање конекције за испис на екран } void loop() { } int nivoTecnosti = analogRead(A0); //очитава вредност на аналогном пину A0 Serial.println(nivoTecnosti); // штампа на екран очитани ниво течности delay(100); //време између два очитавања 21 7 сегментни дисплеј У овој вежби на 7–сегментном дисплеју, на сваку секунду, се исписују бројеви од 9 до 0 и обрнуто. Ардуино 7 сегментни дисплеј 2 x 220 Ohm отпорник Каблови Ардуино код – 7 сегментни дисплеј #define segA #define segB #define segC #define segD #define segE #define segF #define segG int brojac = 2 3 4 5 6 7 8 0; void setup() { // // // // // // // // for (int i=2;i<9;i++) { pinMode(i, OUTPUT); повезивање повезивање повезивање повезивање повезивање повезивање повезивање бројач 0-9 сегмента A на сегмента B на сегмента C на сегмента D на сегмента E на сегмента F на сегмента G на чија вредност пин 2 пин 3 пин 4 пин 5 пин 6 пин 7 пин 8 се повећава од 0 до 9 // за свако i где i почиње од 2 и i је мање од 9, повећај i за 1 // дефинише све пинове од 2 до каи излазне } } void loop() { switch (brojac) { case 0: // када промењива „brojac„ има вредност 0 digitalWrite(segA, HIGH); digitalWrite(segB, HIGH); digitalWrite(segC, HIGH); digitalWrite(segD, HIGH); digitalWrite(segE, HIGH); digitalWrite(segF, HIGH); digitalWrite(segG, LOW); break; case 1: // када промењива „brojac„ има вредност 1 digitalWrite(segA, LOW); digitalWrite(segB, HIGH); digitalWrite(segC, HIGH); digitalWrite(segD, LOW); digitalWrite(segE, LOW); digitalWrite(segF, LOW); digitalWrite(segG, LOW); break; case 2: // када промењива „brojac„ има вредност 2 digitalWrite(segA, HIGH); digitalWrite(segB, HIGH); digitalWrite(segC, LOW); digitalWrite(segD, HIGH); digitalWrite(segE, HIGH); digitalWrite(segF, LOW); digitalWrite(segG, HIGH); break; case 3: // када промењива „brojac„ има вредност 3 digitalWrite(segA, HIGH); digitalWrite(segB, HIGH); digitalWrite(segC, HIGH); digitalWrite(segD, HIGH); digitalWrite(segE, LOW); digitalWrite(segF, LOW); digitalWrite(segG, HIGH); break; case 4: // када промењива „brojac„ има вредност 4 digitalWrite(segA, LOW); digitalWrite(segB, HIGH); digitalWrite(segC, HIGH); digitalWrite(segD, LOW); digitalWrite(segE, LOW); digitalWrite(segF, HIGH); digitalWrite(segG, HIGH); break; case 5: // када промењива „brojac„ има вредност 5 digitalWrite(segA, HIGH); digitalWrite(segB, LOW); digitalWrite(segC, HIGH); digitalWrite(segD, HIGH); digitalWrite(segE, LOW); digitalWrite(segF, HIGH); digitalWrite(segG, HIGH); break; case 6: // када промењива „brojac„ има вредност 6 digitalWrite(segA, HIGH); digitalWrite(segB, LOW); digitalWrite(segC, HIGH); digitalWrite(segD, HIGH); digitalWrite(segE, HIGH); digitalWrite(segF, HIGH); digitalWrite(segG, HIGH); break; case 7: // када промењива „brojac„ има вредност 7 digitalWrite(segA, HIGH); digitalWrite(segB, HIGH); digitalWrite(segC, HIGH); digitalWrite(segD, LOW); digitalWrite(segE, LOW); digitalWrite(segF, LOW); digitalWrite(segG, LOW); break; case 8: // када промењива „brojac„ има вредност 8 digitalWrite(segA, HIGH); digitalWrite(segB, HIGH); digitalWrite(segC, HIGH); digitalWrite(segD, HIGH); digitalWrite(segE, HIGH); digitalWrite(segF, HIGH); digitalWrite(segG, HIGH); break; case 9: // када промењива „brojac„ има вредност 9 digitalWrite(segA, HIGH); digitalWrite(segB, HIGH); digitalWrite(segC, HIGH); digitalWrite(segD, HIGH); digitalWrite(segE, LOW); digitalWrite(segF, HIGH); digitalWrite(segG, HIGH); break; } if (brojac<10) { brojac++; // повећај вредност за промењиву ’brojac’ за 1 delay(1000); // сачекај 1 секунду па иди на почетак } if (brojac==10) { // провери да ли је вредност промењиве једнака 10 brojac=0; delay(1000); } } // сачекај 1 секунду па иди на почетак 22 LCD дисплеј У овом примеру на lcd дисплеју ће бити исписан текст ‘Hello World!’ Ардуино 10K Потенциометар LCD модул Каблови Ардуино код – LCD дисплеј #include <LiquidCrystal.h> // укључивање библиотеке за LCD LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Креира LCD објекте (rs, enable, d4, d5, d6, d7) void setup() { lcd.begin(16, 2); // дефинисање броја редова и колона на LCD-у: lcd.clear(); // Бриши LCD екран } void loop() { lcd.print(" Hello world!"); lcd.setCursor(0, 1); lcd.print(" LCD Tutorial"); } // Пиши поруку "Hello world!" на LCD-у. // постави курсор на колону 0 и ред 1 // Штампај поруку „LCD Tutorial“ на LCD-у. 23 LCD Дисплеј и сензор за температуру и влажност Приказује температуру (у целзијусима) и релативни влажност ваздуха (у %) примњену са сензора DHT11 на дисплеју 16X2 LCD. DHT11 сензор Каблови Дисплеј 16X2 LCD Ардуино код – дисплеј и сензор за температуру и влажност #include <LiquidCrystal.h> // додавање библиотеке за LCD #include <dht.h> // додавање библиотеке за DHT dht_dpin = A0 dht DHT; //креирање објекта DHT LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //креирање објекта lcd void setup() { lcd.begin(16, 2); } void loop() { DHT.read11(dht_dpin); //чита вредност са dht-а lcd.clear(); // брише дисплеј lcd.setCursor(0, 0); // поставља курсор на 0 ред и 0 колону lcd.print(" TEMP : "); // штампа TEMP lcd.print((int)DHT.temperature); // штампа вредност за температуру са dht-а lcd.write((uint8_t)0); lcd.print("C"); // штампа С lcd.setCursor(0, 1); // поставља курсор у други ред lcd.print(" HUMIDITY: "); // исписује HUMIDITY lcd.print((int)DHT.humidity); // штампа вредност за влажност ваздуха са dht-а lcd.print(" %"); // исписује % delay(1000); //након 1s очитај и прикажи нови вредност за температуру у влажност } 24 Bluetooth Прогм омогућава контролу ЛЕД диоде на пину 13 коришћењем команди преко bluetooth модула. RX (Pin 0) ———> TX TX (Pin 1) ———> RX 5V ———> VCC GND ———> GND Упарити HC 05/06 уносом дифолтног пасворда 1234 Инсталирати LED апликацију на андроид телефон Притиснути дугме ON да би се укључила ЛЕД диода или OFF дугме да се искључи Приликом слања кода (upload) са рачунара на Ардуино процесор, TX и RX пинови морају бити откачени. Када се заврши пренос кода на ардуино процесор вратити пинове TX и RX. Ардуино код – дисплеј и сензор char data = 0; //промењива за чување податка примљеног са bluetooth-а void setup(){ Serial.begin(9600); pinMode(13, OUTPUT); } //постављање брзине комуникације са bluetooth-ом //дефинисање дигиталног пина 13 као излазног void loop() { if(Serial.available() > 0) //провера да ли је стигао неки података са bluetooth–а { data = Serial.read(); //чита долазни податак и смешта га у промењиву data Serial.print(data); //Штампа вредност за data на монитор Serial.print("\n"); //нови ред if(data == '1') //проверава да ли је вредност data једнако 1 digitalWrite(13, HIGH); //ако је вредност data 1 онда упали ЛЕД else if(data == '0') //проверава да ли је вредност data једнако 0 digitalWrite(13, LOW); //ако је вредност data 0 онда угаси ЛЕД } } 25 Џојстик Џојстик заправо представља групу потенциометара који шаљу неку аналогну вредност. Када је џојстик у неутралном положају (на средини), он шаље вредност 512. Распон вредности креће се од 0 до 1024. Ардуино код – џојстик const int SW_pin = 2; const int X_pin = 0; const int Y_pin = 1; // дигитални пин повезан на switch излаз // аналогни пин повезан на X излаз // аналогни пин повезан на Y излаз void setup() { pinMode(SW_pin, INPUT); digitalWrite(SW_pin, HIGH); Serial.begin(9600); // SW_pin пин се дефинише као излазни // укључи SW_pin пин (пошаљи напон) } void loop() { Serial.print("Switch: "); Serial.print(digitalRead(SW_pin)); Serial.print("\n"); Serial.print("X-osa: "); Serial.print(analogRead(X_pin)); Serial.print("\n"); Serial.print("Y-axis: "); Serial.println(analogRead(Y_pin)); Serial.print("\n\n"); delay(1000); } //испиши реч Switch: //очитај вредност са SW_pin-а и испиши је на екран //нови ред //испиши реч X-osa: //очитај вредност са X_pin-а и испиши је на екран //нови ред //испиши реч Y-osa: //очитај вредност са Y_pin-а и испиши је на екран //два нова реда //сачекај 1s пре новог очитавања положаја џојстика 26 Инфра–црвени (IR) сензор Инфра–црвени предајник Инфра–црвена диода (IR LED) је послебна ЛЕД диода која емитује инфра–црвене зраке од таласне дужине од 700 nm до 1 mm wavelength. Различите IR LED производе зраке различитих таласних дужина. IR LEDs are usually made of gallium arsenide or aluminum gallium arsenide. Људксо око не може да детектује инфра–црвене зраке, па није могуће уочити да ли је IR LED диода укључена или не. Овај проблем се решава помоћу камере на мобилном телефону, пошто се овом камером види када је IR LED диода укључена. IR емитујуће LED диоде (предајници) се најчешће користе у ТВ даљинском. У овом примеру користиће се и предајник и пријемник инфра–црвених зрака. Потребно је уперити оба уређаја (пријемник и предајник) један у други и очитавати вредности на 'serial monitor'–у. Предајник KY-005IR Пријемник KY-022 Пин – = GND Средњи пин = +5V Пин S = Пин 3 на Ардуино Ардуино код – Инфрацрвени предајник KY-005 //програм користи IR remote библиотеку, адреса: http://z3t0.github.io/Arduino-IRremote/ #include <IRremote.h>IRsend irsend; void setup(){ Serial.begin(9600); } void loop() { for (int i = 0; i < 50; i++) { //за свако 'i' почев од 0 до 49 повећај 'i' за 1 irsend.sendSony(0xa90, 12); // Sony TV power код delay(40); } } Инфра–црвени пријемник Модул пин (-) –> GND Модул + средњи пин –> +5V Модул S –> дигитални пин 11 Ардуино код – Инфрацрвени пријемник KY-022 // Демонстрација пријема IR кода са Irrecv #include <IRremote.h> int RECV_PIN = 11; //дефинисање пина за пријемник IRrecv irrecv(RECV_PIN); decode_results results; void setup(){ Serial.begin(9600); irrecv.enableIRIn(); //стартуј пријемник } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX); irrecv.resume(); } } // Прими следећу вредност 27 Switch Statement ‘a–e’ пале ЛЕД, бројеви 1–5 гасе одговарајућу, ‘s’ гаси све Демонстрација 'switch statement'-а. Коришћењем 'serial monitor'-а шаљу се одговарајући карактери који управљају паљењем/гашењем ЛЕД диода. Карактери 'a', 'b', 'c', 'd', и 'e' пале ЛЕД диоду. Бројеви од 1 до 5 гасе одговарајућу ЛЕД диду. 1 гаси прву, 2 гаси другу ... Слањем 's' карактера гасе се све ЛЕД диоде. Ардуино 5 х 220 Ohm отпорника 5 х ЛЕД диода Каблови Ардуино код – Switch Statement – Serial.read() void setup() { Serial.begin(9600); //иницира серијску комуникацију for (int thisPin = 2; thisPin < 7; thisPin++) { //иницијализује ЛЕД пинове од 2 до 6 pinMode(thisPin, OUTPUT); } } void loop() { if (Serial.available() > 0) { int inByte = Serial.read(); switch (inByte) { case 'a': digitalWrite(2, HIGH); // проверава да ли је нешто стигло преко конзоле // чита вредности које су пристигле // ако је стигло ’a’ укључи ЛЕД диоду на пину 2 break; case '1': digitalWrite(2, LOW); // ако је стигло ’1’ искључи ЛЕД диоду на пину 2 break; case 'b': digitalWrite(3, HIGH); // ако је стигло ’b’ укључи ЛЕД диоду на пину 3 break; case '2': digitalWrite(3, LOW); // ако је стигло ’2’ искључи ЛЕД диоду на пину 3 break; case 'c': digitalWrite(4, HIGH); // ако је стигло ’c’ укључи ЛЕД диоду на пину 4 break; case '3': digitalWrite(4, LOW); // ако је стигло ’3’ искључи ЛЕД диоду на пину 4 break; case 'd': digitalWrite(5, HIGH); // ако је стигло ’d’ укључи ЛЕД диоду на пину 5 break; case '4': digitalWrite(5, LOW); // ако је стигло ’4’ искључи ЛЕД диоду на пину 5 break; case 'e': digitalWrite(6, HIGH); // ако је стигло ’e’ укључи ЛЕД диоду на пину 6 break; case '5': digitalWrite(6, LOW); // ако је стигло ’5’ искључи ЛЕД диоду на пину 6 break; case 's': // ако је стигло ’s’ искључи ЛЕД на пиновима од 2 до 6 for (int thisPin = 2; thisPin < 7; thisPin++) { //за сваки пин, почев од 2 до 6 повећај за 1 digitalWrite(thisPin, LOW); } break; } } } 28 Fingerprint reader 29 RFID RFID – Radio Frequency Identification. У овом примеру очитава се таг и уколико је дозвољен, укључиће се ЛЕД диода. Пре овог експеримента потребно је путем 'Serial Monitor'–а очитати број картице, то је поље: CARD UID: 34 22 EC E2 1 x Arduino Uno board 1 x RFID reader with tags 1 x Breadboard 2 x LEDs (preferably one red and one green) 2 x 200Ω resistors Jumper wires Ардуино код – RFID и две ЛЕД диоде // MFRC522: http://downloads.arduino.cc/libraries/github.com/miguelbalboa/MFRC522-1.4.5.zip // SPI библиотека: https://github.com/PaulStoffregen/SPI/archive/master.zip #include <SPI.h> // увлачење SPI библиотеке #include <MFRC522.h> // увлачење RFID библиотеке #define SS_PIN 10 // дефинисање пина за SDA на модулу #define RST_PIN 9 // Дефинисање ресет пина #define ledPin 2 // Дефинисање ЛЕД пина MFRC522 mfrc522(SS_PIN, RST_PIN); // Стартовање инстанце MFRC522 void setup() { Serial.begin(9600); SPI.begin(); mfrc522.PCD_Init(); pinMode (ledPin, OUTPUT); } // Дефинисањеr der ledPin–а као Output void loop() { if ( ! mfrc522.PICC_IsNewCardPresent()) { return; // иди даље } if ( ! mfrc522.PICC_ReadCardSerial()) return; // иди даље } { Serial.print("Broj UID za karticu je:"); String rfid = ""; // Тражи (чека) нову картицу // чита RFID UID // испис на монитору for (byte i = 0; i < mfrc522.uid.size; i++) { rfid += mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "; rfid += String(mfrc522.uid.uidByte[i], HEX); } rfid.trim(); // уклања размаке пре и после UID -а rfid.toUpperCase(); // испис UID само са великим словима { Serial.print(rfid); // приказује UID RFID-а на монитору Serial.println(); // нови ред } if (rfid == "34 22 EC E2") { digitalWrite (ledPin, HIGH); delay (5000); digitalWrite (ledPin, LOW); } } // Да ли је UID једнак са "34 22 EC E2" // ако је да, укључи ЛЕД диоду // сачекај 5 секунди // искључи ЛЕД диоду 30 LED Matrix CLOCK I LED // DS1302_Serial_Easy (C)2010 Henning Karlsen // web: http://www.henningkarlsen.com/electronics // // A quick demo of how to use my DS1302-library to // quickly send time and date information over a serial link // // I assume you know how to connect the DS1302. // DS1302: RST pin -> Arduino Digital 2 // DAT pin -> Arduino Digital 3 // CLK pin -> Arduino Digital 4 #include <DS1302.h> // Init the DS1302 DS1302 rtc(2, 3, 4); int led = 13; Time t; void setup() { pinMode(led, OUTPUT); // Set the clock to run-mode, and disable the write protection rtc.halt(false); rtc.writeProtect(false); // Setup Serial connection Serial.begin(9600); // The following lines can be commented out to use the values already stored in the DS1302 rtc.setDOW(THURSDAY); // Set Day-of-Week to FRIDAY rtc.setTime(23, 42, 45); // Set the time to 12:00:00 (24hr format) rtc.setDate(8, 1, 2019); // Set the date to August 6th, 2010 } void loop() { t = rtc.getTime(); // Send Day-of-Week Serial.print(rtc.getDOWStr()); Serial.print(" "); Serial.print(" ----"); Serial.print(t.min); Serial.print(" "); // Send date Serial.print(rtc.getDateStr()); Serial.print(" -- "); // Send time Serial.println(rtc.getTimeStr()); // Wait one second before repeating :) delay (1000); if (t.min == 43 and t.sec == 15) { digitalWrite(led, HIGH); } if (t.min == 44 and t.sec == 05) { digitalWrite(led, LOW); } } 31 DC motor 32 Steper motor 33 Servo motor 34 Servo motor i sensor za kišu 35 UV sensor i DC motor 36 Bluetooth i servo motor 37 Automatska ruka i džojstik 38 Повезивање два Ардуина Два Ардуина могу да комуницирају један са другим путем 'Master Writer/Slave Receiver' конфигурације путем 'I2C synchronous' серијског протоколаl. За те потребе у овом примеру се користи пар функционалности Ардуино–ве 'Wire' библиотеке. Ардуино 1, Мастер, је програмиран да шаље 6 bytes података сваких пола секунде ка Slave–овима који имају јединствене адресе. Једном када је порука примљена, након тога она се може видети на Slave–овом 'serial monitor–у. I2C протокол захтева коришћење две линије, једна за пријем а друга за слање података. Отпочињање комуникације Мастер врши функцијом из библиотеке Wire.begin(). Пре слања поруке до Slave–а потребно је успоставити канал за трансмисију, што се постиже командом Wire.beginTransmission(n) – где је ’n’ број Slave–а са којим се остварује трансмисија, док се само слање спроводи функцијом Wire.write(х), где је 'х' вредност која се шаље Slave–у. Завршетак трансмисије се остварује командом Wire.endTransmission(). Ардуино – код за Master // I2C Master укључује 'Wire' библиотеку за I2C #include <Wire.h> int x = 0; int sensorPin = A0; int sensorValue = 0; void setup() { Wire.begin(); Serial.begin(9600); } // Старт I2C Bus као Master void loop() { sensorValue = analogRead(sensorPin); Serial.println(sensorValue); Wire.beginTransmission(9); Wire.write(sensorValue); delay(1000); Wire.endTransmission(); } // Трансисија до уређаја #9 // Стоп трансмисије Ардуино – код за Slave // I2C Slave укључује 'Wire' библиотеку за I2C #include <Wire.h> int LED = 11; int x = 0; void setup() { pinMode (LED, OUTPUT); Wire.begin(9); Wire.onReceive(receiveEvent); Serial.begin(9600); } // // // // void receiveEvent(int bytes) { x = Wire.read(); } //Читај карактере са I2C void loop() { int ledPWM = map(x, 0, 255, 0, 1023); analogWrite(LED, ledPWM); Serial.print("X is: "); Serial.println(x); Serial.print("PWM is: "); Serial.println(ledPWM); delay(1000); } Дефинисање LED пина као излазног – Output Старт I2C Bus као Slave на адреси 9 Проверавај да ли је нешто стигло од Мастера. Отвори 'Serial communication'за пренос података //мапирај вредност потенциометра у промењиву ledPWM // Укључи ЛЕД у складу са вредношћу ledPWM