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);
}
}