arduino u razvojna ploča # 2 › content › files › 2 › ardschool_02.pdf · to the sensor to...

8
AdSchool 02 Novembar 2016., v1.0 autor: Dalibor Dobrilović Napomena: ovo je radni materijal za laboratorijske vežbe i kurseve. Materijal je u pripremi i eksperimentalnoj primeni. Moguće je da sadrži veliki broj grešaka i netačnih navoda. Ne snosimo odgovornost za bilo kakvu štetu koja je usledila nakon primene ovog materijala. ArdSchool 02 Arduino UNO razvojna ploča #2 Cilj vežbe Cilj vežbe je da upozna učenike sa osnovnim karakteristikama i mogućnostima razvojne ploče Arduino / Genuino UNO Rev3. Cilj vežbe je i da upozna učenike sa open-source hardver platformama i principima. Uvodna objašnjenja Arduino/Genuino UNO Rev3 je open-source hardver mikrokontrolerska ploča namenjena za razvoj prototip aplikacija. Ova platforma se može upotrebiti za razvoj IoT i WSN aplikacija i sistema. Osnovne karakteristike ove plače, potrebne za naredne vežbe, su postojanje 6 analognih input pinova koj su na slici 1. predstavljeni oznakama A0-A5, 14 digitalnih input pinova predstavljenih oznakama D0-D13, 3 ground pina predstavljenih oznakom GND i dva pina za napajanje senszora predstavljenih oznakama 3.3.V i 5V u zavisnosti od izlaznog napona koji obezbeđuju. (Slika 1.). Slika 1. Prikaz osnovnih pinova i njihovih oznaka na Arduino/Genuino UNO Rev3 mikrokontrolerskoj ploči (slika je realizovana uz pomoć open-source programa Fritzing) Ploča je bazirana na mikrokontroleru Atmel ATMega382PU. Na slici 1. je prikazan i USB port koji služi i za napajanje mikrokontrolerske ploče i za upload kompajliranih programa (eng. scatch) iz Arduino IDE okruženja na nju (Slika 1.). Takođe je prikazana i DC port za napajanje ploče. Na slici 2. je prikazana i protoploča (eng. protoboard ili breadboard) ili podnožje za modelovanje elektronksih kola. Na slici se vidi da se protoploča sastoji iz nekoliko segmenata. Dva spoljna segmenta sa po dve grupe horizontalnih kontaktnih tačaka pored kojih se nalazi plava i crvena linija

Upload: others

Post on 25-Jun-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Arduino U razvojna ploča # 2 › Content › files › 2 › ArdSchool_02.pdf · to the sensor to initiate a reading, then listens for a pulse to return. The length of the returning

AdSchool 02 Novembar 2016., v1.0

autor: Dalibor Dobrilović

Napomena: ovo je radni materijal za laboratorijske vežbe i kurseve. Materijal je u pripremi i eksperimentalnoj

primeni. Moguće je da sadrži veliki broj grešaka i netačnih navoda. Ne snosimo odgovornost za bilo kakvu štetu

koja je usledila nakon primene ovog materijala.

ArdSchool

02

Arduino UNO razvojna ploča #2

Cilj vežbe Cilj vežbe je da upozna učenike sa osnovnim karakteristikama i mogućnostima razvojne ploče Arduino / Genuino UNO Rev3. Cilj vežbe je i da upozna učenike sa open-source hardver platformama i principima.

Uvodna objašnjenja Arduino/Genuino UNO Rev3 je open-source hardver mikrokontrolerska ploča namenjena za razvoj prototip aplikacija. Ova platforma se može upotrebiti za razvoj IoT i WSN aplikacija i sistema. Osnovne karakteristike ove plače, potrebne za naredne vežbe, su postojanje 6 analognih input pinova koj su na slici 1. predstavljeni oznakama A0-A5, 14 digitalnih input pinova predstavljenih oznakama D0-D13, 3 ground pina predstavljenih oznakom GND i dva pina za napajanje senszora predstavljenih oznakama 3.3.V i 5V u zavisnosti od izlaznog napona koji obezbeđuju. (Slika 1.).

Slika 1. Prikaz osnovnih pinova i njihovih oznaka na Arduino/Genuino UNO Rev3 mikrokontrolerskoj ploči (slika je realizovana uz pomoć open-source programa Fritzing)

Ploča je bazirana na mikrokontroleru Atmel ATMega382PU. Na slici 1. je prikazan i USB port koji služi i za napajanje mikrokontrolerske ploče i za upload kompajliranih programa (eng. scatch) iz Arduino IDE okruženja na nju (Slika 1.). Takođe je prikazana i DC port za napajanje ploče. Na slici 2. je prikazana i protoploča (eng. protoboard ili breadboard) ili podnožje za modelovanje elektronksih kola. Na slici se vidi da se protoploča sastoji iz nekoliko segmenata. Dva spoljna segmenta sa po dve grupe horizontalnih kontaktnih tačaka pored kojih se nalazi plava i crvena linija

Page 2: Arduino U razvojna ploča # 2 › Content › files › 2 › ArdSchool_02.pdf · to the sensor to initiate a reading, then listens for a pulse to return. The length of the returning

AdSchool 02 Novembar 2016., v1.0

autor: Dalibor Dobrilović

Napomena: ovo je radni materijal za laboratorijske vežbe i kurseve. Materijal je u pripremi i eksperimentalnoj

primeni. Moguće je da sadrži veliki broj grešaka i netačnih navoda. Ne snosimo odgovornost za bilo kakvu štetu

koja je usledila nakon primene ovog materijala.

služe za dovođenje napajanja za modelovani sklop (Vcc i GND) i oni imaju ukupno dva puta po 100 kontaktnih tačaka.

Dva segmenta sa po 63 grupe od po 5 vertikalnih kontaktnih tačaka, označenih slovima od A do J, imaju ukupno 630 kontaktnih tačaka.

Slika 2. Protoploča (slika je realizovana uz pomoć open-source programa Fritzing)

Ploča ima 830 kontaktnih tačaka. Kontakti između kontaktnih tačaka su prikazani na slici 3. Postoje i manje kontaktne ploče sa 400, odnosno 180 tačaka i dr.

Slika 3. Protoploča sa prikazom kontakata između kontaktnih tačaka

(slika je realizovana uz pomoć open-source programa Fritzing)

Modelovanje senzorske stanice – povezivanje ultrazvučnog senzora Korak 1.1 Na slici je prikazano povezivanje ultrazvučnog senzora za merenje udaljenosti objekata HC-SR04. Povezivanje se vrši direktnim umetanjem senzora na protoploču, dok je na slici 4. prikazano povezivanje senzora sa pločom posredstvom žice. Povezivanje posredstvom žice je učinjeno da bi slika bila preglednija i da bi bolje pokazala tačke u koje je potrebno umetnuti senzor. Kao što je ranije napomenuto, povezivanje se vrši direktnim umetanjem senzora u protoploču. Okvirna specifikacija senzora: Napajanje: 5V DC Potrošnja (Quiescent current): <2mA Efektivni ugao: <15°

Page 3: Arduino U razvojna ploča # 2 › Content › files › 2 › ArdSchool_02.pdf · to the sensor to initiate a reading, then listens for a pulse to return. The length of the returning

AdSchool 02 Novembar 2016., v1.0

autor: Dalibor Dobrilović

Napomena: ovo je radni materijal za laboratorijske vežbe i kurseve. Materijal je u pripremi i eksperimentalnoj

primeni. Moguće je da sadrži veliki broj grešaka i netačnih navoda. Ne snosimo odgovornost za bilo kakvu štetu

koja je usledila nakon primene ovog materijala.

Domet: 2cm – 400 cm Rezolucija: 1 cm Ultrazvučna frekvencija: 40 kHz

Slika 4. Povezivanje ultrazvučnog senzora HC-SR04 Senzor se povezuje sa Arduinom na sledeći način:

Arduino/Genuino UNO Rev3 Senzor HC-SR04 Boja 5V Vcc Crvena D4 Trig Plava D2 Echo Žuta GND GND Crna

Korak 1.2. Arduino program ili sketch se sastoji iz dva dela. Setup je deo koji sadrži kod koji se izvršava jedan put, po startovanju mikrokontrolerske ploče. Loop deo je deo koji se konstantno ponavlja u toku rada mikrokontrolerske ploče. Prvo je potrebno definisati Trig i Echo pin. Trig pin se koristi za odlazni signal, a Echo pin za dolazni signal. To se vrši komandama koje se smeštaju pre setup dela, ili linije koja sadrži void setup():

const int trigPin = 4;

const int echoPin = 2;

Korak 1.3. Potrebno je izvršiti deklaraciju promenljivih koje će u sebi čuvati vrednosti za trajanje signala, razdaljinu u centimetrima i inčima. Promenljive su tipa long. One se koriste za brojeve i dužine su 32 bita (4 bajta), što znači da mogu da primaju vrednosti od -2,147,483,648 do 2,147,483,647. Deklaracija promenljivih se vrši sledećim linijama koda:

long duration, inches, cm;

Page 4: Arduino U razvojna ploča # 2 › Content › files › 2 › ArdSchool_02.pdf · to the sensor to initiate a reading, then listens for a pulse to return. The length of the returning

AdSchool 02 Novembar 2016., v1.0

autor: Dalibor Dobrilović

Napomena: ovo je radni materijal za laboratorijske vežbe i kurseve. Materijal je u pripremi i eksperimentalnoj

primeni. Moguće je da sadrži veliki broj grešaka i netačnih navoda. Ne snosimo odgovornost za bilo kakvu štetu

koja je usledila nakon primene ovog materijala.

Korak 1.4. Inicijalizacija serijskog porta se vrši komandom, koja se unosi u setup()delu:

Serial.begin(9600);

Ova komanda podešava brzinu serijskog porta na 9600 baud-a. Ovo je bitno, budući da će senzorska stanica prikazivati senzorske podatke poslate na računar preko USB kable na serisjki port računara. Korak 1.5. Sve naredne izmene unose se u loop delu ili posle void loop()linije koda. Merenje daljine na senzoru se pokreće HIGH impulsom na D4 pinu u trajanju od 10 µs. Da bi se dobio ispravan HIGH impuls potrebno je upotrebiti LOW impuls u trajanju od 2 s. Zatim se daje HIGH impuls u trajanju od 10 s, pa se ponovo daje LOW impuls do daljeg. Pre tih komandi se komandom pinMode(trigPin, OUTPUT)podešava D4 pin na OUTPUT mode. To se vrši sledećim linijama koda:

// The sensor is triggered by a HIGH pulse of 10 or more microseconds.

// Give a short LOW pulse beforehand to ensure a clean HIGH pulse:

pinMode(trigPin, OUTPUT);

digitalWrite(trigPin, LOW);

delayMicroseconds(2); // LOW impuls u trajanju od 2 s digitalWrite(trigPin, HIGH);

delayMicroseconds(10); // LOW impuls u trajanju od 10 s digitalWrite(trigPin, LOW); // LOW impuls do daljeg

Korak 1.6. Sada se vrši podešavanje D2 pina na INPUT mod. A nakon toga, se meri vreme trajanja povratnog HIGH impulsa. To se vrši sledećim linijama koda:

// Read the signal from the sensor: a HIGH pulse whose

// duration is the time (in microseconds) from the sending

// of the ping to the reception of its echo off of an object.

pinMode(echoPin, INPUT);

duration = pulseIn(echoPin, HIGH);

Korak 1.7. Sledeće dve komandne linije vrše proračun razdaljine u inčima i centrimetrima i dodelu te vrednosti odgovarajućim promenljivama. Proračun razdaljine se dobija pozivom funkcija microsecondsToInches() i microsecondsToCentimeters() a parametar koji se

prosleđuje je duration:

// convert the time into a distance

inches = microsecondsToInches(duration);

cm = microsecondsToCentimeters(duration);

Korak 1.8. Slede linije koda koje vrše prikaz koji se prosleđuje na serijski port računara na koji je povezan Arduino/Genuino. Prikaz se vrši uz pomoć komande Serial.print():

Serial.print(inches);

Serial.print("in, ");

Serial.print(cm);

Page 5: Arduino U razvojna ploča # 2 › Content › files › 2 › ArdSchool_02.pdf · to the sensor to initiate a reading, then listens for a pulse to return. The length of the returning

AdSchool 02 Novembar 2016., v1.0

autor: Dalibor Dobrilović

Napomena: ovo je radni materijal za laboratorijske vežbe i kurseve. Materijal je u pripremi i eksperimentalnoj

primeni. Moguće je da sadrži veliki broj grešaka i netačnih navoda. Ne snosimo odgovornost za bilo kakvu štetu

koja je usledila nakon primene ovog materijala.

Serial.print("cm");

Serial.println();

Korak 1.9. Na kraju se vrši podešavanje čekanja u trajanju od 100 ms:

delay(100);

Korak 1.10. Funkcija za proračun razdaljine u inčima na osnovu trajanja HIGH impulsa na Echo pinu vrši delenje trajanja merenja u µs sa 74 i potom sa 2, budući da je 73,748 µs, tj. približno 74 µs, potrebno za prelazak jednog inča (brzina zvuka je 1130 ft/s). Ta vrednost je dodatno deljena sa dva jer je put pređen od senzora i ka senzoru, tako da je udaljenost objekta polovina prvobitno dobijene veličine. To se vrši sledećim linijama koda:

long microsecondsToInches(long microseconds)

{

// According to Parallax's datasheet for the PING))), there are

// 73.746 microseconds per inch (i.e. sound travels at 1130 feet per

// second). This gives the distance travelled by the ping, outbound

// and return, so we divide by 2 to get the distance of the obstacle.

// See: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf

return microseconds / 74 / 2;

}

Korak 1.11. Funkcija za proračun razdaljine u cm na osnovu trajanja HIGH impulsa na Echo pinu vrši deljenje trajanja merenja u µs sa 29 i potom sa 2, slično kao u prethodnom slučaju, sa tom razlikom budući da je 29 µs, potrebno za 1 cm jer je brzina zvuka 340 m/s. Ta vrednost je dodatno deljena sa kao i u prethodnom slučaju. Ta vrednost je dodatno deljena sa dva jer je put pređen od senzora i ka senzoru, tako da je udaljenost objekta polovina prvobitno dobijene veličine. To se vrši sledećim linijama koda:

long microsecondsToCentimeters(long microseconds)

{

// The speed of sound is 340 m/s or 29 microseconds per centimeter.

// The ping travels out and back, so to find the distance of the

// object we take half of the distance travelled.

return microseconds / 29 / 2;

}

Kompletan program za senzorsku stanicu sa ultrazvučnim senzorom Kada je sve završeno, Arduino/Genuino program potreban za prikaz senzorski podataka treba da izgleda ovako: /* HC-SR04 Sensor

https://www.dealextreme.com/p/hc-sr04-ultrasonic-sensor-distance-measuring-module-133696

This sketch reads a HC-SR04 ultrasonic rangefinder and returns the

distance to the closest object in range. To do this, it sends a pulse

to the sensor to initiate a reading, then listens for a pulse

to return. The length of the returning pulse is proportional to

the distance of the object from the sensor.

The circuit:

* VCC connection of the sensor attached to +5V

* GND connection of the sensor attached to ground

* TRIG connection of the sensor attached to digital pin 2

* ECHO connection of the sensor attached to digital pin 4

Original code for Ping))) example was created by David A. Mellis

Page 6: Arduino U razvojna ploča # 2 › Content › files › 2 › ArdSchool_02.pdf · to the sensor to initiate a reading, then listens for a pulse to return. The length of the returning

AdSchool 02 Novembar 2016., v1.0

autor: Dalibor Dobrilović

Napomena: ovo je radni materijal za laboratorijske vežbe i kurseve. Materijal je u pripremi i eksperimentalnoj

primeni. Moguće je da sadrži veliki broj grešaka i netačnih navoda. Ne snosimo odgovornost za bilo kakvu štetu

koja je usledila nakon primene ovog materijala.

Adapted for HC-SR04 by Tautvidas Sipavicius

This example code is in the public domain.

*/

const int trigPin = 4;

const int echoPin = 2;

// establish variables for duration of the ping,

// and the distance result in inches and centimeters:

long duration, inches, cm;

void setup() {

// initialize serial communication:

Serial.begin(9600);

}

void loop()

{

// The sensor is triggered by a HIGH pulse of 10 or more microseconds.

// Give a short LOW pulse beforehand to ensure a clean HIGH pulse:

pinMode(trigPin, OUTPUT);

digitalWrite(trigPin, LOW);

delayMicroseconds(2);

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);

// Read the signal from the sensor: a HIGH pulse whose

// duration is the time (in microseconds) from the sending

// of the ping to the reception of its echo off of an object.

pinMode(echoPin, INPUT);

duration = pulseIn(echoPin, HIGH);

// convert the time into a distance

inches = microsecondsToInches(duration);

cm = microsecondsToCentimeters(duration);

Serial.print(inches);

Serial.print("in, ");

Serial.print(cm);

Serial.print("cm");

Serial.println();

delay(100);

}

long microsecondsToInches(long microseconds)

{

// According to Parallax's datasheet for the PING))), there are

// 73.746 microseconds per inch (i.e. sound travels at 1130 feet per

// second). This gives the distance travelled by the ping, outbound

// and return, so we divide by 2 to get the distance of the obstacle.

// See: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf

return microseconds / 74 / 2;

}

long microsecondsToCentimeters(long microseconds)

{

// The speed of sound is 340 m/s or 29 microseconds per centimeter.

// The ping travels out and back, so to find the distance of the

// object we take half of the distance travelled.

return microseconds / 29 / 2;

}

Modelovanje senzorske stanice – povezivanje MQ-3 gasnog senzora Lista MQ sensora Tip Namena MQ-2 osetljiv na metan, butan, LPG, dim, tj. na zapaljive i sagorive gasove. MQ-3 osetljiv na alkohol, etanol, dim MQ-4 osetljiv na metan, CNG gas

Page 7: Arduino U razvojna ploča # 2 › Content › files › 2 › ArdSchool_02.pdf · to the sensor to initiate a reading, then listens for a pulse to return. The length of the returning

AdSchool 02 Novembar 2016., v1.0

autor: Dalibor Dobrilović

Napomena: ovo je radni materijal za laboratorijske vežbe i kurseve. Materijal je u pripremi i eksperimentalnoj

primeni. Moguće je da sadrži veliki broj grešaka i netačnih navoda. Ne snosimo odgovornost za bilo kakvu štetu

koja je usledila nakon primene ovog materijala.

MQ-5 osetljiv na prirodni gas, LPG MQ-6 osetljiv na LPG, butan MQ-7 osetljiv na Carbon Monoxide MQ-8 osetljiv na hidrogen MQ-9 osetljiv na Carbon Monoxide, zapaljive gasove. MQ131 osetljiv na ozon MQ135 Namenjen za monitoring kvaliteta vazduha, osetljiv na benzen, alkohol, dim.

Korak 2.1 Na početku je potrebno izvršiti povezivanje MQ-3 ili sličnog senzora iz prikazane tabele prema slici 5. Senzor vrši merenje prisustva gasa. Okvirna specifikacija MQ-3 senzora: https://www.sparkfun.com/datasheets/Sensors/MQ-3.pdf

Slika 5. Povezivanje senzora MQ-3 za merenje nivoa gasa

Senzor se povezuje sa Arduinom na sledeći način, uz napomenu da je na slici 5. Prikazan tip MQ-3 senzora sa breakout pločom, tako je potrebno povezati samo 3 kratkospojnika Vcc (crvena), signal (plava) i GND (crna), kao što je dato u tabeli:

Arduino/Genuino UNO Rev3 Senzor DHT11 Boja 5V Vcc Crvena* A1 Signal Zelena GND GND Crna*

*Budući da Arduino/Genuino UNO ima ograničen broj Vcc i GND pinova, povezivanje i napajanje većeg broja senzora je moguće preko horizontalnih kontaktnih tačaka prikazanih na slici 1. i slici 2.

Page 8: Arduino U razvojna ploča # 2 › Content › files › 2 › ArdSchool_02.pdf · to the sensor to initiate a reading, then listens for a pulse to return. The length of the returning

AdSchool 02 Novembar 2016., v1.0

autor: Dalibor Dobrilović

Napomena: ovo je radni materijal za laboratorijske vežbe i kurseve. Materijal je u pripremi i eksperimentalnoj

primeni. Moguće je da sadrži veliki broj grešaka i netačnih navoda. Ne snosimo odgovornost za bilo kakvu štetu

koja je usledila nakon primene ovog materijala.

Zadatak 2.1

a) Napisati Arduino program koji očitava vrednost MQ senzora, šalje očitane vrednosti na serijski port. Napomena: za očitavanje senzora koristiti naredbu int nazivPromenljive = analogRead(2);. Napomena: za slanje vrednosti na serijski port koristi naredbe Serial.print("Gas level: "); i Serial.print(nazivPromenljive);

b) Napisati Arduino program koji očitava vrednost MQ senzora, šalje očitane vrednosti na

serijski port i uključuje crvenu diodu ako je očitana vrednost veća od 70% maksimalne vrednosti (maksimalna vrednost je 1023). Za ovaj zadatak projektu je potrebno dodati i LED diodu sa otpornikom kao u vežbi ArdSchool1. Takođe je potrebno izračunati procenat očitane vrednosti nivoa gasa i to prikazati na računaru preko serijskog porta. Kod izračunavanja procenta potrebno je koristi promenljive tipa float, a i obratiti pažnju na konverziju promenljivih tip int u float, npr: float gasPercent =

((float)sensorGasValue / 1023)*100;

Kompletan program za senzorsku stanicu sa gasnim i svetlosnim senzorom Na kraju vežbe, Arduino program bi trebao da izgleda na sledeći način: (Samostalan rad koji ujedno predstavlja i rešenje ovog zadataka)