int led = 6; //definiraj led = 6 int tipkalo = 10; //definiraj tipkalo = 10 const int trig = 11; // Trig na PIN11 const int echo = 12; // Echo na PIN12 float korekcija = 28.22; // utvrđeno eksperimentalno za što točnije očitanje udaljenosti int ocitanje = 0; // broj očitanja po redu; 1 - prvo, 2 - drugo, 0 - reset na početak float razlika = 0; // razlika udaljenosti prvog i drugog očitanja float a = 24.3; // duljina pravokutne menzure float b = 12.3; // širina pravokutne menzure float volumen = 0; // varijabla za obujam uronjenog tijela int brojac = 1; // varijabla za redni broj mjerenja od pokretanja programa void setup() { pinMode(led, OUTPUT); //postavi izvod led kao izlazni pinMode(tipkalo, INPUT_PULLUP); //postavi izvod tipkalo kao ulaz // tipkalom pokrećemo očitanje digitalWrite(led, LOW); //isključi led diodu - početno stanje pinMode(trig, OUTPUT); //pin za slanje signala pinMode(echo, INPUT); //pin za povrat signala delay(5000); // čeka 5 sekundi prije početka rada Serial.begin(9600); // zapocinjem serijsku komunikaciju za prikaz na zaslonu računala Serial.println("Mjerenje obujma tijela digialnom menzurom"); Serial.println(""); Serial.print("Duljina pravokutne menzure: "); Serial.print(a); Serial.println(" cm"); Serial.print("Širina pravokutne menzure: "); Serial.print(b); Serial.println(" cm"); Serial.println("Za očitanje početne razine vode jednom pritisnite tipkalo."); Serial.println("Nakon toga uronite tijelu u menzuru i za očitanje obujam ponovo pritisnite tipkalo."); Serial.println("Obujam tijela biti će ispisan na zaslonu računala. Nakon toga možete ponoviti postupak."); Serial.println(""); } void loop() { // očitanje stanja if (digitalRead(tipkalo) == LOW) { //ako je tipkalo pritisnuto digitalWrite(led, HIGH); //uključi LED diodu delay(1000); digitalWrite(led, LOW); //isključi LED diodu if (ocitanje == 1) { // ako je 1. očitanje prošlo postavlja na 2. očitanje ocitanje = 2; } if (ocitanje == 0) { // ako je 0 tada počinje prvo očitanje Serial.print("Mjerenje broj: "); Serial.println(brojac); ocitanje = 1; } float vrijeme, udaljenost; // varijable za odziv signala i udaljenost digitalWrite(trig, HIGH); // Slanje triga delayMicroseconds(10); // Odaslani trig traje 10 μs = 0.1 ms digitalWrite(trig, LOW); vrijeme = pulseIn(echo, HIGH); // Primanje reflektiranog triga udaljenost = (vrijeme/2) / korekcija; // Racunanje udaljenosti, u centimetrima // konacna udaljenost senzora od predmeta // u cm je varijabla "udaljenost" if (ocitanje == 1) { // ako je 1. očitanje sprema rezultat u varijablu udaljenost razlika = udaljenost; } Serial.print(udaljenost); // ispis na zaslonu računala Serial.print(ocitanje); Serial.println(" cm"); if (ocitanje == 2) { // ako je drugo očitanje računa razliku između drugog i prvog razlika = razlika - udaljenost; Serial.print(razlika); // i ispisuje na zaslonu računala Serial.println(" cm"); volumen = a * b * razlika; // računa obujam tijela i ispisuje na zaslonu računala Serial.print("Obujam tijela: "); Serial.print(volumen); Serial.println(" cm3"); ocitanje = 0; // te postavlja variablu na 0 za slijedeći uzorak } delay(1000); // pauza izmedu ocitanja brojac = brojac + 1; // povećava redni broj očitanja Serial.println(brojac); } delay(200); }