ARDUINO KROZ JEDNOSTAVNE PRIMJERE - pripreme za natjecanja -

Similar documents
Mathcad sa algoritmima

Slika 1. Slika 2. Da ne bismo stalno izbacivali elemente iz skupa, mi ćemo napraviti još jedan niz markirano, gde će

Algoritam za množenje ulančanih matrica. Alen Kosanović Prirodoslovno-matematički fakultet Matematički odsjek

ZANIMLJIV NAČIN IZRAČUNAVANJA NEKIH GRANIČNIH VRIJEDNOSTI FUNKCIJA. Šefket Arslanagić, Sarajevo, BiH

PRIPADNOST RJEŠENJA KVADRATNE JEDNAČINE DANOM INTERVALU

Fajl koji je korišćen može se naći na

Projektovanje paralelnih algoritama II

TEORIJA SKUPOVA Zadaci

Red veze za benzen. Slika 1.

Matrice u Maple-u. Upisivanje matrica

Uvod u relacione baze podataka

LINEARNI MODELI STATISTIČKI PRAKTIKUM 2 2. VJEŽBE

ATOMSKA APSORP SORPCIJSKA TROSKOP

FIZIKALNA KOZMOLOGIJA VII. VRLO RANI SVEMIR & INFLACIJA

KLASIFIKACIJA NAIVNI BAJES. NIKOLA MILIKIĆ URL:

Quasi-Newtonove metode

NAPREDNI FIZIČKI PRAKTIKUM II studij Geofizika POLARIZACIJA SVJETLOSTI

Kontrolni uređaji s vremenskom odgodom za rasvjetu i klimu

EXPERIMENTAL ANALYSIS OF THE STRENGTH OF A POLYMER PRODUCED FROM RECYCLED MATERIAL

KVADRATNE INTERPOLACIJSKE METODE ZA JEDNODIMENZIONALNU BEZUVJETNU LOKALNU OPTIMIZACIJU 1

Fibonaccijev brojevni sustav

NAPREDNI FIZIČKI PRAKTIKUM 1 studij Matematika i fizika; smjer nastavnički MJERENJE MALIH OTPORA

Formule za udaljenost točke do pravca u ravnini, u smislu lp - udaljenosti math.e Vol 28.

Funkcijske jednadºbe

Zadatci sa ciklusima. Zadatak1: Sastaviti progra koji određuje z ir prvih prirod ih rojeva.

Metoda parcijalnih najmanjih kvadrata: Regresijski model

ANALYSIS OF THE RELIABILITY OF THE "ALTERNATOR- ALTERNATOR BELT" SYSTEM

Termodinamika. FIZIKA PSS-GRAD 29. studenog Copyright 2015 John Wiley & Sons, Inc. All rights reserved.

povezuju tačke na četiri različita načina (pravom linijom, splajnom,

Rešenja zadataka za vežbu na relacionoj algebri i relacionom računu

IMPROVEMENT OF HIPPARCOS PROPER MOTIONS IN DECLINATION

Vedska matematika. Marija Miloloža

Zanimljive rekurzije

Metode praćenja planova

Metode izračunavanja determinanti matrica n-tog reda

KRITERIJI KOMPLEKSNOSTI ZA K-MEANS ALGORITAM

Algoritam za odre divanje ukupnog poravnanja dva grafa poravnanja parcijalnog ure daja

Hornerov algoritam i primjene

NIZOVI I REDOVI FUNKCIJA

Matematika (PITUP) Prof.dr.sc. Blaženka Divjak. Matematika (PITUP) FOI, Varaždin

ANALYSIS OF INFLUENCE OF PARAMETERS ON TRANSFER FUNCTIONS OF APERIODIC MECHANISMS UDC Života Živković, Miloš Milošević, Ivan Ivanov

ODREĐIVANJE DINAMIČKOG ODZIVA MEHANIČKOG SUSTAVA METODOM RUNGE-KUTTA

Shear Modulus and Shear Strength Evaluation of Solid Wood by a Modified ISO Square-Plate Twist Method

Sveučilišni studijski centar za stručne studije. Zavod za matematiku i fiziku. Uvod u Matlab. Verzija 1.1

Fraktali - konačno u beskonačnom

THE ROLE OF SINGULAR VALUES OF MEASURED FREQUENCY RESPONSE FUNCTION MATRIX IN MODAL DAMPING ESTIMATION (PART II: INVESTIGATIONS)

Modified Zagreb M 2 Index Comparison with the Randi} Connectivity Index for Benzenoid Systems

DYNAMIC HEAT TRANSFER IN WALLS: LIMITATIONS OF HEAT FLUX METERS

Hrvatski matematički elektronički časopis. Kvantitativne metode odlučivanja - problem složene razdiobe ulaganja

A SPECTRAL ATLAS OF λ BOOTIS STARS

Geometrijski smisao rješenja sustava od tri linearne jednadžbe s tri nepoznanice

Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku Preddiplomski studij matematike. Školska kriptografija

VARIS DODATNA OPREMA. Alu naplatak Podium anthracite. Alu naplatak 15 11, Light Grey PZ49P-B0671-CE. Sigumosne matice. Krovni nosac (3 vrata)

3. Programiranje u Matlab-u

Oracle Spatial Koordinatni sustavi, projekcije i transformacije. Dalibor Kušić, mag. ing. listopad 2010.

PARALELNI ALGORITMI ZA PROBLEM GRUPIRANJA PODATAKA

DRUGI KOLOKVIJ ZADACI ZA VJEŽBU. 1. zadatak. Za rad s bazom podataka moja_baza koristimo naredbu:

ALGORITAM FAKTORIZACIJE GNFS

Teorem o reziduumima i primjene. Završni rad

Representation theorems for connected compact Hausdorff spaces

Pojam funkcije u nastavi matematike nekad i danas

CALCULATION OF VELOCITY DISPERSION OF THE NEARBY GALAXIES USING DIFFERENT STELLAR TEMPLATE LIBRARIES

SINTAKSNA I ALGORITAMSKA NOTACIJA

1.1 Uvod. 1.1 Uvod Značajke programskog jezika Python Interpretacija me dukôda

L A T E X 1. predavanje

AIR CURTAINS VAZDU[NE ZAVESE V H

MATHEMATICAL ANALYSIS OF PERFORMANCE OF A VIBRATORY BOWL FEEDER FOR FEEDING BOTTLE CAPS

Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku Sveučilišni nastavnički studij matematike i informatike. Sortiranje u linearnom vremenu

INVESTIGATION OF UPSETTING OF CYLINDER BY CONICAL DIES

1 Pogreške Vrste pogrešaka Pogreške zaokruživanja Pogreške nastale zbog nepreciznosti ulaznih podataka

Proces Drella i Yana i potraga za te²kim esticama na hadronskim sudariva ima

O MATLAB-U Što je MATLAB? MATLAB je naročito dobar za. Elektrotehnika. Kako se i gdje sve Matlab koristi u tehnici?

Vektori u ravnini i prostoru. Rudolf Scitovski, Ivan Vazler. 10. svibnja Uvod 1

Procjena funkcije gustoće

pretraživanje teksta Knuth-Morris-Pratt algoritam

An Algorithm for Computation of Bond Contributions of the Wiener Index

Sveučilište Josipa Jurja Strossmayera u Osijeku Odjel za matematiku

Keywords: anticline, numerical integration, trapezoidal rule, Simpson s rule

Iskazna logika 1. Matematička logika u računarstvu. oktobar 2012

GENERALIZIRANI LINEARNI MODELI. PROPENSITY SCORE MATCHING.

FIZIKALNA SIMULACIJA SUDARA KONKAVNIH KRUTIH TIJELA

AKSIOME TEORIJE SKUPOVA

Ariana Trstenjak Kvadratne forme

Sortiranje podataka. Ključne riječi: algoritmi za sortiranje, merge-sort, rekurzivni algoritmi. Data sorting

Sveučilište J. J. Strossmayera u Osijeku Odjel za matematiku Preddiplomski sveučilišni studij matematike. Završni rad. Tema : Vedska matematika

NON-SPECIFIC METHODS FOR DETECTING RESIDUES OF CLEANING AGENTS DURING CLEANING VALIDATION

Jasna Kellner. snake. bee. mole. owl. branch. birds. bear. leaves. forest den. tree. sun. badger. butterfly

Rekurzivni algoritmi POGLAVLJE Algoritmi s rekurzijama

Analiza metagenomskog uzorka dobivenog sekvenciranjem koristeći ure daje treće generacije

Determination of Synchronous Generator Armature Leakage Reactance Based on Air Gap Flux Density Signal

Mjerenje snage. Na kraju sata student treba biti u stanju: Spojevi za jednofazno izmjenično mjerenje snage. Ak. god. 2008/2009

ANALYTICAL AND NUMERICAL PREDICTION OF SPRINGBACK IN SHEET METAL BENDING

Sveučilište u Zagrebu Prirodoslovno matematički fakultet

HRVATSKA MATEMATIČKA OLIMPIJADA

Mehurasto sortiranje Brzo sortiranje Sortiranje učešljavanjem Sortiranje umetanjem. Overviev Problemi pretraživanja Heš tabele.

SVEUČILIŠTE U RIJECI TEHNIČKI FAKULTET SENZOR SVJETLOSTI - GENERATOR ULAZNOG SIGNALA U MIKROKONTROLER

Konstrukcija i analiza algoritama

Primjena numeričke metode Runge-Kutta na rješavanje problema početnih i rubnih uvjeta

Diferencijska evolucija

Transcription:

ARDUINO KROZ JEDNOSTAVNE PRIMJERE - pripreme za natjecanja - PRIPREMA 7-2015 IZRADA SENZORA BOJA Paolo Zenzerović, mag. ing. el. Zagreb, 2015.

2 ARDUINO KROZ JEDNOSTAVNE PRIMJERE SENZOR ZA BOJE Eto jedne opsežnije i zaista zanimljive pripreme :) Izraditi ćemo jednostavni i jeftini senzor za detekciju boja s Arduinom. Senzor se sastoji od jedne RGB diode i jednog fotootpornika sve komponente koje smo već upoznali. Senzor je temeljen na izvornim kodu koji možete naći na sljedećem linku: http://www.instructables.com/id/using-an-rgb-led-to-detect-colours/?allsteps Senzor se temelji na fizikalnom principu da se svijetlost određene boje bolje odbija od objekta iste te boje nego od objekta druge boje (pojednostavnjeno). RGB diodom obasjamo objekt čiju boju želimo odrediti i mjerimo količinu svijetlosti koja upadne na fotootpornik te njezinim mjerenjem određujemo boju. Pogledajmo kako spojiti naš senzor boja. Ja ću u ovoj pripremi koristiti RGB diodu sa zajedničkom anodom. Zbog toga sam morao malo promjeniti izvorni kod sa gornjeg linka. Obzirom da je programski kod veći nego uobičajeni u našim pripremama neću ga prikazivati u pripremi već ga možete preuzeti na sljedećem linku: https://drive.google.com/file/d/0b_f4eh9ejjbsegdgx1nyb0vzstg/view?usp=sharing Kada ste sklop spojili prema gornjem prikazu prebacite kod s gornjeg linka u mikrokontroler i pokrenite Serial monitor alat. Pripremite nekoliko papira raznih boja. Treba vam bijeli i crni papir za kalibraciju i papiri u boji za testiranje senzora. Neka papiri budu mat, a ne sjajni. Ukoliko nemate crni papir poslužite se nekim crnim objektom koji nije sjajan. 2 ARDUINO KROZ JEDNOSTAVNE PRIMJERE

ARDUINO KROZ JEDNOSTAVNE PRIMJERE 3 Kako bi senzor mogao raspoznavati boje potrebno ga je prvo kalibrirati. Kada pokrenete Serial monitor dobiti ćete poruku da postavite bijeli objekt iznad sezora. Postavite bijeli objekt i pričekajte dok RGB dioda ne zasvjetli u svim bojama. Nakon toga dobiti ćete poruku da postavite crni objekt iznad senzora i pričekajte dok RGB dioda ponovno ne zasvjetli u svim bojama. Ovime ste odradili kalibraciju senzora. Program je očitao vrijednosti za bijelu i crnu boju i kasnije će ih koristiti za određivanje drugih boja. Malo nakon kalibracije program počinje s očitavanjem boja. Očitavanje se odvija svake 2 sekunde. Nakon svakog očitanja program će serijskim putem ispisati vrijednost pojedine osnovne boje u očitanoj boji. Ove će vrijednosti varirati OTPRILIKE od 0 do 255. Evo ispisa sa mog Serial monitor alata: Postavi bijeli objek ispred senzora Postavi crni objek ispred senzora R = 253 G = 255 B = 258 R = 253 G = 253 B = 253 R = 253 G = 252 B = 252 R = 4 G = 7 B = 6 R = 7 G = 3 B = 10 R = 7 G = 3 B = 12 R = 232 G = 109 B = 133 R = 241 G = 110 B = 134 R = 241 G = 112 B = 135 R = 84 G = 178 B = 166 R = 87 G = 178 B = 163 R = 88 G = 179 B = 167 R = 64 G = 99 B = 124 R = 66 G = 100 B = 129 R = 67 G = 101 B = 130 R = 163 G = 217 B = 232 R = 168 G = 222 B = 238 R = 174 G = 224 B = 238 BIJELO BIJELO BIJELO CRNO CRNO CRNO CRVENO CRVENO CRVENO ZELENO ZELENO ZELENO PLAVO PLAVO PLAVO PRAZAN SENZOR PRAZAN SENZOR PRAZAN SENZOR Ja sam za probu koristio 150 gramski mat papir u bojama. Nakon kalibracije napravio sam tri uzorka bijele boje, zatim tri uzorka crne, zatim crvene, pa zelene i plave. U posljednja tri uzorka nije bilo objekta ispred senzora. Tekst koji je gore upisan ljubičastom bojom nisam dobivao Serijskim putem već sam ga ručno dopisao kako biste se lakše snašli u vrijednostima. Iz podataka je vidljivo da senzor vrlo dobro raspoznaje osnovne boje. ARDUINO KROZ JEDNOSTAVNE PRIMJERE 3

4 ARDUINO KROZ JEDNOSTAVNE PRIMJERE Obzirom da je kod nešto veći i kompliciraniji malo sam ga pojednostavnio za naše potrebe. Pojednostavnjeni kod koji dalje možete koristiti i kojeg ćemo dalje pojasniti možete preuzeti na sljedećem linku: https://drive.google.com/file/d/0b_f4eh9ejjbsqjluqjm1zwpwdk0/view?usp=sharing Pogledajmo što se nalazi u programu: int ledarray[] = {2,3,4; //UPIŠI IZVODE NA KOJE JE SPOJENA RGB DIODE int fotootpornik = A0; //UPIŠI IZVOD NA KOJI JE SPOJEN FOTOOTPORNIK //INICIJALIZACIJA VARIJABLI - NE DIRATI float colourarray[] = {0,0,0; float whitearray[] = {0,0,0; float blackarray[] = {0,0,0; int avgread; int red, green, blue; //KRAJ INICIJALIZACIJE VARIJABLI - NE DIRATI U početnom djelu iskorišteno je polje kako bi se definiralo gdje je spojena RGB dioda. Ukoliko R izvod diode spojite na izvod broj 2, G izvod na broj 3 i B izvod na broj 4 mikrokontrolera onda ne morate mijenjati prvu naredbu. Ukoliko RGB diodu želite spojniti na druge izvode onda promjenite brojeve u prvoj naredbi. Setup dio: void setup(){ //POSTAVLJANJE IZVODA SENZORA - NE DIRATI pinmode(ledarray[0],output); pinmode(ledarray[1],output); pinmode(ledarray[2],output); digitalwrite(ledarray[0], HIGH); digitalwrite(ledarray[1], HIGH); digitalwrite(ledarray[2], HIGH); //KRAJ POSTAVLJANJA IZVODA SENZORA - NE DIRATI Serial.begin(9600); //INICIJALIZACIJA SERIJSKE KOMUNIKACIJE setbalance(); //KALIBRACIJA SENZORA - OBAVEZNA U setup dijelu smo osim djela za postavljanje izvoda na koje je spojena RGB dioda i i sključivanje svih segmenata diode započeli serijsku komunikaciju. Na kraju smo pozvali funkciju setbalance. Nju je potrebno pozvati jednom na početku rada i ona služi za kalibraciju senzora. Kalibraciju napravite kako je prethodno objašnjeno. 4 ARDUINO KROZ JEDNOSTAVNE PRIMJERE

ARDUINO KROZ JEDNOSTAVNE PRIMJERE 5 Loop dio: void loop(){ checkcolour(); //očitaj boju Serial.print("R = "); Serial.print(red); Serial.print(" G = "); Serial.print(green); Serial.print(" B = "); Serial.println(blue); delay(2000); Unutar loop dijela programa očitavamo boju i ispisujemo rezultat svake dvije sekunde. Kako bismo to učinili pozivamo funkciju checkcolour. Ta funkcija očita boju i pohrani vrijednosti u varijable red, green i blue. Nakon toga možemo ih jednostavni ispisati serijskim putem kako god želimo. Osim početnog, setup i loop dijela na kraju programa postavljenje su funkcije koje služe za rad senzora. //FUNKCIJE ZA RAD SENZORA - NE DIRATI void setbalance(){ Serial.println("Postavi bijeli objekt ispred senzora"); delay(5000); for(int i = 0;i<=2;i++){ digitalwrite(ledarray[i],low); getreading(5); whitearray[i] = avgread; digitalwrite(ledarray[i],high); Serial.println("Postavi crni objek ispred senzora"); delay(5000); for(int i = 0;i<=2;i++){ digitalwrite(ledarray[i],low); getreading(5); blackarray[i] = avgread; digitalwrite(ledarray[i],high); delay(5000); ARDUINO KROZ JEDNOSTAVNE PRIMJERE 5

6 ARDUINO KROZ JEDNOSTAVNE PRIMJERE void checkcolour(){ for(int i = 0;i<=2;i++){ digitalwrite(ledarray[i],low); getreading(5); colourarray[i] = avgread; float greydiff = whitearray[i] - blackarray[i]; colourarray[i] = (colourarray[i] - blackarray[i])/(greydiff)*255; digitalwrite(ledarray[i],high); red = int(colourarray[0]); green = int(colourarray[1]); blue = int(colourarray[2]); void getreading(int times){ int reading; int tally=0; for(int i = 0;i < times;i++){ reading = analogread(fotootpornik); tally = reading + tally; delay(10); avgread = (tally)/times; //KRAJ FUNKCIJA ZA RAD SENZORA - NE DIRATI Ove funkcije načelno nije potrebno modificirati, ali za one znatiželjne ukratko ćemo objasniti svaku funkciju: Funkcija setbalance: Ova funkcija služi za kalibraciju senzora. Funkcija očitava stanja fotootpornika za bijeli uzorak te potom za crni uzorak. Vrijednosti se spremaju u dva zasebna polja i služe za određivanje graničnih vrijednosti za rad senzora. Vrijeme koje senzor čeka između javljanja korisniku da postavi uzorak i samog očitanja postavljeno je na 5 sekundi ali ga je moguće mijenjati promjenom dvaju naredbi delay(5000). Osim toga nakon očitanja obje boje senzor čeka dodatnih 5 sekundi. Ovo je moguće promjeniti mijenjanjem posljenje delay naredbe u toj funkciji. Funkcija checkcolour: Služi za očitanje boje. Pozovite ju svaki put kada želite očitati boju na senzoru boja. Funkcija getreading: Služi za očitanje napona na fotootporniku više puta, kako bi se vrijednost usrednjila i kako bi se smanjila mogućnost pogreške. Nemojte ju sami pozivati 6 ARDUINO KROZ JEDNOSTAVNE PRIMJERE

ARDUINO KROZ JEDNOSTAVNE PRIMJERE 7 Kada želite koristiti senzor za boje u vašem projektu dovoljno je da u njega iskopirate dijelove koji su nužni za njegovo funkcioniranje inicijalizaciju varijabli, postavljanje izvoda, te korištene funkcije. Također obavezno pozovite funkciju za kalibraciju u setup dijelu i nakon toga koristite funkciju za detekciju boja u loop dijelu. Ukoliko Vam je jednostavnije možete krenuti raditi s već gotovim kodom (drugi link u ovoj pripremi) i samo nadopisati dodatan kod koji vam treba :) Zadatak: Modificirajte program za detekciju boja na način da osim što ispisuje vrijednosti crvene, zelene i plave boje da ispiše je li objekt koji je očitan crveni, zeleni ili plavi. Potrebno je prvo pokrenuti ovaj program i provesti kalibraciju. Potom ćemo objekte čije boje želimo odrediti skenirati i zapisati ćemo rezultate koje dobivamo. Evo mojih rezultata: Postavi bijeli objekt ispred senzora Postavi crni objek ispred senzora R = 225 G = 62 B = 68 R = 75 G = 172 B = 153 R = 44 G = 68 B = 93 Prvi rezultat odnosi se na crveni uzorak, drugi na zeleni i treći na plavi. Primjećujemo da je vrijednost očitane boje najveća za upravo onu boju koja je očitana. Sada je samo potrebno napraviti nekoliko if uvjeta kako bismo odlučili koje je boje objekt: Mijenja se samo loop dio pa ću njega prikazati: - void loop(){ checkcolour(); //očitaj boju Serial.print("R = "); Serial.print(red); Serial.print(" G = "); Serial.print(green); Serial.print(" B = "); Serial.print(blue); Serial.print("\t\t"); if (red>green && red>blue) { Serial.println("CRVENA"); else if (green>red && green>blue) { Serial.println("ZELENA"); else if (blue>green && blue>red) { Serial.println("PLAVA"); delay(2000); ARDUINO KROZ JEDNOSTAVNE PRIMJERE 7

8 ARDUINO KROZ JEDNOSTAVNE PRIMJERE Pogledajmo rezultate: Postavi bijeli objekt ispred senzora Postavi crni objek ispred senzora R = 230 G = 61 B = 74 CRVENA postavljenja crvena - OK R = 84 G = 184 B = 173 ZELENA postavljena zelena - OK R = 61 G = 99 B = 133 PLAVA postavljena plava - OK R = 256 G = 257 B = 260 PLAVA postavljena crna - GREŠKA R = 255 G = 257 B = 259 PLAVA postavljena crna - GREŠKA R = 256 G = 257 B = 259 PLAVA postavljena crna - GREŠKA R = 16 G = 17 B = 22 PLAVA postavljena bijela - GREŠKA R = 16 G = 17 B = 26 PLAVA postavljena bijela - GREŠKA Program radi dobro dok na senzor dolaze samo uzorci poznate boje crvene, zelene ili plave. Kada na senzor postavimo neku drugu boju senzor javlja pogrešnu boju. Kako ovome doskočiti? U ovoj ćemo se pripremi ograničiti na rješenje da dodamo vrijednosti za sve boje koje ćemo koristiti u IF petlju. Zadatak: Nadogradite prethodni zadatak tako da raspoznaje bijelu, crnu, crvenu, zelenu i plavu boju. void loop(){ checkcolour(); //očitaj boju Serial.print("R = "); Serial.print(red); Serial.print(" G = "); Serial.print(green); Serial.print(" B = "); Serial.print(blue); Serial.print("\t\t"); if (red>200 && green>200 && blue>200) { Serial.println("BIJELA"); else if (red<20 && green<20 && blue<20) { Serial.println("CRNA"); else if (red>green && red>blue) { Serial.println("CRVENA"); else if (green>red && green>blue) { Serial.println("ZELENA"); else if (blue>green && blue>red) { Serial.println("PLAVA"); delay(2000); Moguće je da zbog svjetlosnih uvjeta i udaljenosti vaših papira od senzora kao i samih papira vrijednosti koje dobivate nisu iste kao u pripremi. Dovoljno je da shvatite princip rada i promjenite vrijednosti u if else if strukturi. 8 ARDUINO KROZ JEDNOSTAVNE PRIMJERE