2023./ 2024.

Autonomno vozilo – popis pribora, alata i materijala

1.     a) Materijal, oprema i alat potrebni za izradu zadatka (donose natjecatelji):

Mikroupravljačko sučelje prema vlastitom izboru,

Programator (ako je potrebno),

  Računalo s instaliranim softverskim paketom za programiranje odabranog sučelja,

  Eksperimentalna pločica za prototipiranje, 400 kontakata

  Punjiva baterija AA, 12 komada,

  Punjač za AA baterije,

  Spojne žice za spajanje komponenti – raznih duljina (5 cm, 10 cm, 15 cm), 40 kom,

  Produžni kabel s minimalno 3 utičnice, minimalne duljine 3 m,

  Mala sjekača kliješta za elektroniku,

  Križni odvijač, PH1 i PH2,

  Viljuškasti ključ M7 i M8,

  Ravni odvijač,

  Akumulatorska bušilica,

  Svrdlo 3 mm,

  Lemilica s priborom,

  Kliješta za uklanjanje izolacije s električnih vodiča.

1.     b) Materijal, oprema i alat potrebni za izradu zadatka (osigurava organizator):

Postolje autonomnog vozila,

DC Motor shield,

DC motor, 2 kom,

Kućište za baterije,

Nosač ultrazvučnog senzora,

Nosač IC senzora, 2 kom,

Ultrazvučni senzor,

IC senzor za praćenje linije,10.  Fotootpornik,

Otpornik 10 KΩ,

Svjetleća dioda 5 mm, crvena, 2 kom,

  Svjetleća dioda 5 mm, bijela, 2 kom,

  Svjetleća dioda 5 mm, žuta, 2 kom,

Otpornik 330 Ohma, 6 komada,

Tipkalo,

Ljepljiva traka,

Elementi za sastavljanje vozila.

  Zadatak

  Rješenje:

int foto=A0;            //  fotootpornik

int ICL=A1;             //  lijevi IC senzor

int ICD=A2;             //  desni IC senzor

int tipk=A5;            //  tipkalo

const int trigPin = 2;  //  Izvod UZV senzora za okidanje signala

const int echoPin = 3;  //  Izvod UZV senzora za očitavanje signala

int LM_1=4;             //  Prvi izvod lijevog motora spojen na izlaz 1 upravljačke pločice motora 

int LM_2=5;             //  Drugi izvod lijevog motora spojen na izlaz 2 upravljačke pločice motora

int DM_1=6;             //  Prvi izvod desnog motora spojen na izlaz 3 upravljačke pločice motora

int DM_2=7;             //  Drugi izvod desnog motora spojen na izlaz 4 upravljačke pločice motora

int M1_EN=9;            //  Kontrola brzine lijevog motora

int M2_EN=10;            //  Kontrola desnog motora

int desniPS=8;         //  Desni pokazivač smjera; prva žuta svjetleća dioda

int lijeviPS=11;        //  Lijevi pokazivač smjera; druga žuta svjetleća dioda

int zadnje=12;          //  Zadnje svjetlo; obje crvene svjetleće diode

int glavno=13;          //  Glavno prednje svjetlo; obje bijele svjetleće diode

 

float trajanje;         //  Očitanje s UZV senzora

float udaljenost;       //  Izračunata vrijednost udaljenosti u centimetrima 

 

void setup() {  

  pinMode(tipk,INPUT_PULLUP); //  Za očitavanje digitalne vrijednosti s analognog izlaza mora se postaviti mod izlaza!

  pinMode(trigPin, OUTPUT);  

  pinMode(echoPin, INPUT); 

  pinMode(LM_1,OUTPUT);

  pinMode(LM_2,OUTPUT);

  pinMode(DM_1,OUTPUT);

  pinMode(DM_2,OUTPUT);

  pinMode(M1_EN,OUTPUT);

  pinMode(M2_EN,OUTPUT);

  pinMode(desniPS,OUTPUT);

  pinMode(lijeviPS,OUTPUT);

  pinMode(zadnje,OUTPUT);

  pinMode(glavno,OUTPUT); 

  Serial.begin(9600);  

  while(digitalRead(tipk)==1){

  }

  digitalWrite(desniPS,HIGH);

  digitalWrite(lijeviPS,HIGH);

  digitalWrite(zadnje,HIGH);

  digitalWrite(glavno,HIGH);

  delay(1000);

  digitalWrite(desniPS,LOW);

  digitalWrite(lijeviPS,LOW);

  digitalWrite(zadnje,LOW);

  digitalWrite(glavno,LOW);

  delay(3000);

}  

void loop() {

  digitalWrite(zadnje,LOW);

  foto_st();

  digitalWrite(lijeviPS,LOW);

  digitalWrite(desniPS,LOW);

  

  if((digitalRead(ICL)==1)&&(digitalRead(ICD)==1)){

    Naprijed();

  }

  if((digitalRead(ICL)==1)&&(digitalRead(ICD)==0)){

    Desno();

  }

  if((digitalRead(ICL)==0)&&(digitalRead(ICD)==1)){

    Lijevo();

  }

  if((digitalRead(ICL)==0)&&(digitalRead(ICD)==0)){

   Stop();

  }

}

 

void Naprijed(){

  foto_st();

  UZV();

  if(udaljenost<20){

    digitalWrite(lijeviPS,LOW);

    digitalWrite(desniPS,LOW);

    analogWrite(M1_EN, 0); 

    analogWrite(M2_EN, 0);

    digitalWrite(LM_1, LOW);

    digitalWrite(LM_2, LOW);

    digitalWrite(DM_1, LOW);

    digitalWrite(DM_2, LOW); 

    delay(1000);

    Okreni();

  }

  digitalWrite(lijeviPS,LOW);

  digitalWrite(desniPS,LOW);

  analogWrite(M1_EN, 80); 

  analogWrite(M2_EN, 80);

  digitalWrite(LM_1, HIGH);

  digitalWrite(LM_2, LOW);

  digitalWrite(DM_1, LOW);

  digitalWrite(DM_2, HIGH);

}

 

void Natrag(){

  foto_st();

  digitalWrite(lijeviPS,LOW);

  digitalWrite(desniPS,LOW);

  analogWrite(M1_EN, 80); 

  analogWrite(M2_EN, 80);

  digitalWrite(LM_1, LOW);

  digitalWrite(LM_2, HIGH);

  digitalWrite(DM_1, HIGH);

  digitalWrite(DM_2, LOW);

}

 

void Lijevo(){

  foto_st();

  digitalWrite(lijeviPS,HIGH);

  digitalWrite(desniPS,LOW);

  analogWrite(M1_EN, 80); 

  analogWrite(M2_EN, 80);

  digitalWrite(LM_1, LOW);

  digitalWrite(LM_2, HIGH);

  digitalWrite(DM_1, LOW);

  digitalWrite(DM_2, HIGH);

}

 

void Desno(){

  foto_st();

  digitalWrite(lijeviPS,LOW);

  digitalWrite(desniPS,HIGH);

  analogWrite(M1_EN, 80); 

  analogWrite(M2_EN, 80);

  digitalWrite(LM_1, HIGH);

  digitalWrite(LM_2, LOW);

  digitalWrite(DM_1, HIGH);

  digitalWrite(DM_2, LOW);

}

 

void Stop(){

  foto_st();

  while((digitalRead(ICL)==0)&&(digitalRead(ICD)==0)){

    digitalWrite(lijeviPS,LOW);

    digitalWrite(desniPS,LOW);

    analogWrite(M1_EN, 0); 

    analogWrite(M2_EN, 0);

    digitalWrite(LM_1, LOW);

    digitalWrite(LM_2, LOW);

    digitalWrite(DM_1, LOW);

    digitalWrite(DM_2, LOW);

    digitalWrite(zadnje,HIGH);

    exit(0);

  }

}

void UZV(){

  foto_st();

  digitalWrite(trigPin, LOW);  

  delayMicroseconds(2);  

  digitalWrite(trigPin, HIGH);  

  delayMicroseconds(10);  

  digitalWrite(trigPin, LOW);  

  trajanje = pulseIn(echoPin, HIGH);  

  udaljenost = (trajanje*.0343)/2;  

  Serial.print("Udaljenost: ");  

  Serial.println(udaljenost);  

  return udaljenost;

}  

 

void Okreni(){

  foto_st();

  digitalWrite(lijeviPS,LOW);

  digitalWrite(desniPS,HIGH);

  analogWrite(M1_EN, 80); 

  analogWrite(M2_EN, 80);

  digitalWrite(LM_1, HIGH);

  digitalWrite(LM_2, LOW);

  digitalWrite(DM_1, HIGH);

  digitalWrite(DM_2, LOW);

  delay(100);

  while(digitalRead(ICD)==1){

    digitalWrite(lijeviPS,LOW);

    digitalWrite(desniPS,HIGH);

    analogWrite(M1_EN, 80); 

    analogWrite(M2_EN, 80);

    digitalWrite(LM_1, HIGH);

    digitalWrite(LM_2, LOW);

    digitalWrite(DM_1, HIGH);

    digitalWrite(DM_2, LOW);

  }

}

 

void foto_st(){

  if (analogRead(foto)<970){

    digitalWrite(glavno,HIGH);

  }

  else{

    digitalWrite(glavno,LOW);

  }

}

vrh stranice