7.1 Katse Mootori kasutamine

int switchPin = 2; // lüliti 1 

int motor1Pin1 = 3; // viik 2 (L293D) 

int motor1Pin2 = 4; // viik 7 (L293D) 

int enablePin = 9; // viik 1(L293D) 

 void setup() { 

 // sisendid 

 pinMode(switchPin, INPUT);

 //väljundid 

 pinMode(motor1Pin1, OUTPUT); 

 pinMode(motor1Pin2, OUTPUT); 

 pinMode(enablePin, OUTPUT); 

 // aktiveeri mootor1 

 digitalWrite(enablePin, HIGH); 

} 

 void loop() { 

 // kui lüliti on HIGH, siis liiguta mootorit ühes suunas: 

 if (digitalRead(switchPin) == HIGH) 

{ 

 digitalWrite(motor1Pin1, LOW); // viik 2 (L293D) LOW 

 digitalWrite(motor1Pin2, HIGH); // viik 7 (L293D) HIGH 

 } 

 // kui lüliti on LOW, siis liiguta mootorit teises suunas: 

 else

 { digitalWrite(motor1Pin1, HIGH); // viik 2 (L293D) HIGH 

 digitalWrite(motor1Pin2, LOW); // viik 7 (L293D) LOW 

 } 

} 

Mootori kiiruse reguleerimine

int switchPin = 2; // lüliti 1 

int switchPin2 = 1; // lüliti 2 

int potPin = A0; // potentsiomeeter 

int motor1Pin1 = 3; // viik 2 (L293D) 

int motor1Pin2 = 4; // viik 7 (L293D) 

int enablePin = 9; // viik 1(L293D) 

 void setup() { 

 // sisendid 

 pinMode(switchPin, INPUT); 

 pinMode(switchPin2, INPUT); 

 //väljundid 

 pinMode(motor1Pin1, OUTPUT); 

 pinMode(motor1Pin2, OUTPUT); 

 pinMode(enablePin, OUTPUT); 

} 

 void loop() { 

 //mootori kiirus 

 int motorSpeed = analogRead(potPin); 

 //aktiveeri mootor 

 if (digitalRead(switchPin2) == HIGH)

{ 

 analogWrite(enablePin, motorSpeed); 

 } 

else 

{ analogWrite(enablePin, 0); } 

 // kui lüliti on HIGH, siis liiguta mootorit ühes suunas: 

 if (digitalRead(switchPin) == HIGH)

{

 digitalWrite(motor1Pin1, LOW); // viik 2 (L293D) LOW 

 digitalWrite(motor1Pin2, HIGH); // viik 7 (L293D) HIGH 

 } 

 // kui lüliti on LOW, siis liiguta mootorit teises suunas: 

 else 

{ 

 digitalWrite(motor1Pin1, HIGH); // viik 2 (L293D) HIGH 

 digitalWrite(motor1Pin2, LOW); // viik 7 (L293D) LOW 

 } 

}

7.2 Katse Kauguse mõõtmise anduri kasutamine

#define ECHO_PIN 8

#define TRIG_PIN 7

void setup() {

  pinMode(ECHO_PIN, INPUT);

  pinMode(TRIG_PIN, OUTPUT);

  Serial.begin(9600);

}

void loop() {

  digitalWrite(TRIG_PIN,HIGH);

  digitalWrite(TRIG_PIN,LOW);

  int distance=pulseIn(ECHO_PIN, HIGH)/50;

  Serial.println(distance);

}

#define ECHO_PIN 8

#define TRIG_PIN 7

void setup() {

  pinMode(ECHO_PIN, INPUT);

  pinMode(TRIG_PIN, OUTPUT);

  Serial.begin(960);

}

void loop() {

  Serial.println(measure()); 

}

int measure()

{

  digitalWrite(TRIG_PIN,HIGH);

  digitalWrite(TRIG_PIN,LOW);

  int distance=pulseIn(ECHO_PIN, HIGH,15000)/50;

  return constrain(distance,1,300);

}

7.3 Katse Lihtne parkimissüsteem

#define ECHO_PIN 7
#define TRIG_PIN 8
int motorPin1=3;
int distance=1;
int LedPin=13;
int duration;
const int buzzerPin = 9;
void setup() {
  pinMode(ECHO_PIN, INPUT);
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(motorPin1,OUTPUT);
  pinMode(LedPin,OUTPUT);
  pinMode(buzzerPin, OUTPUT);
  Serial.begin(9600);
}
void loop() {
  digitalWrite(TRIG_PIN,LOW);
  delay(200);
  digitalWrite(TRIG_PIN,HIGH);
  delay(200);
  digitalWrite(TRIG_PIN,LOW);
  duration = pulseIn(ECHO_PIN, HIGH);
  distance=duration/58;
  Serial.println(distance);
  if (distance>50)
  {
      analogWrite(motorPin1,100);
      digitalWrite(LedPin,0);
    noTone(buzzerPin);     
      delay(1000);}  
  else
  {
    analogWrite(motorPin1,0);
      digitalWrite(LedPin,250);
       tone(buzzerPin, 1000);
  }
}

Ülesanne 7.1 Rahakarp (Töö parides)

Töö kirjeldus



Kasutatud komponenid



Töö protsess



Uuritud funktsioonid



Kasutamisvõimalused tavaelus



Interaktiivne skeem



Skeem



Video (link)



Programm

#include <LiquidCrystal.h>
#include <Servo.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// LED-id
const int redPin = 10; 
const int bluePin = 9;
const int greenPin = 8;

// Kauguse mõõtmise andur
#define ECHO_PIN A1
#define TRIG_PIN A0

int myndid = 0;
bool kasiLahedal = false;
bool ootanRingi = false;
long timer = 0;

// Servo mootor
Servo mootor;

// Pieso helisignaali pin
const int buzzerPin = 7;

// LCD jaoks erimärgid
byte smile[8] = {
    0b00000,
    0b01010,
    0b01010,
    0b00000,
    0b10001,
    0b01110,
    0b00000,
    0b00000
};

byte smile2[8] = {
  0b00000,
  0b01010,
  0b01010,
  0b00000,
  0b11111,
  0b10001,
  0b01110,
  0b00000
};

byte tahtU[8] = {
  0b01010,
  0b00000,
  0b10001,
  0b10001,
  0b10001,
  0b10011,
  0b01101,
  0b00000
};

byte tahtO[8] = {
  0b01110,
  0b00000,
  0b01110,
  0b10001,
  0b10001,
  0b10001,
  0b01110,
  0b00000
};

byte tahtA[8] = {
  0b01010,
  0b00000,
  0b01110,
  0b00001,
  0b01111,
  0b10001,
  0b01111,
  0b00000
};

byte heart[8] = {
    0b00000,
    0b01010,
    0b11111,
    0b11111,
    0b01110,
    0b00100,
    0b00000,
    0b00000
};

byte sad[8] = {
  0b00000,
  0b01010,
  0b01010,
  0b00000,
  0b01110,
  0b10001,
  0b00000,
  0b00000
};

void setup() {
  // LED-id ja Buzzer
  pinMode(redPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
  pinMode(greenPin, OUTPUT);

  pinMode(buzzerPin, OUTPUT);
  
  // Servo mootor
  mootor.attach(13); 
  
  pinMode(ECHO_PIN, INPUT);
  pinMode(TRIG_PIN, OUTPUT);
  Serial.begin(9600);
  
  //LCD ekraan
  lcd.begin(16, 2);
  lcd.createChar(1, smile);
  lcd.createChar(2, tahtU);
  lcd.createChar(3, tahtO);
  lcd.createChar(4, tahtA);
  lcd.createChar(5, heart);
  lcd.createChar(6, smile2);
  lcd.createChar(7, sad);
  
  // Tervitustekst ja animatsioon
  lcd.setCursor(3, 0);
  lcd.print("Pane m");
  lcd.write(byte(2));
  lcd.print("nt! ");
  lcd.setCursor(0, 1);
  lcd.print("Saa r");
  lcd.write(byte(3));
  lcd.write(byte(3));
  lcd.print("mu! ");
  
  // süda - paremale
  for (int koht = 11; koht <= 15; koht++) {
    lcd.setCursor(koht, 1);
    lcd.write(byte(5)); 
    delay(300);
    lcd.setCursor(koht, 1);
    lcd.print(" "); 
  }
 
  // süda - vasakule
  for (int koht = 14; koht >= 11; koht--) {
    lcd.setCursor(koht, 1);
    lcd.write(byte(5)); 
    delay(300);
    lcd.setCursor(koht, 1);
    lcd.print(" ");
  }
  
  lcd.setCursor(11, 1); 
  lcd.write(byte(5)); 
  delay(1000);
  lcd.clear();

}

// Lühike meloodia (Super Mario Bros)
void Sound() {
  tone(buzzerPin, 784, 200); delay(200);
  tone(buzzerPin, 880, 200); delay(200);
  tone(buzzerPin, 988, 200); delay(200);
  tone(buzzerPin, 1047, 400); delay(400);
  noTone(buzzerPin);
}

void loop() {
  // Mõõdame kaugust
  digitalWrite(TRIG_PIN,HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN,LOW);
  delayMicroseconds(5);
  int distance=pulseIn(ECHO_PIN, HIGH, 15000)/57.5;
  
  Serial.println(distance);
  if (distance == 0 || distance > 400) {
    return; 
  }

  if (distance > 0 && distance <= 30) {
    // Käsi lähedal - avame kaane
    mootor.write(180);
    kasiLahedal = true;

    lcd.setCursor(0, 0);
    lcd.print("Tuvastatud!          ");
    lcd.setCursor(0, 1);
    lcd.print("Avan...");
    delay(400);  

    digitalWrite(greenPin, HIGH); 
    digitalWrite(bluePin, LOW); 
    digitalWrite(redPin, LOW); 
  }
  
  if (kasiLahedal && distance > 30) {
    // Käsi eemaldatud — lisame mündi
    delay(2000);
    mootor.write(90);
    kasiLahedal = false;
    myndid++;

    Sound(); // Esita heli
    
    lcd.clear();
    lcd.setCursor(4, 0);
    lcd.print("Ait");
    lcd.write(byte(4)); // täht Ä
    lcd.print("h! ");
    lcd.write(byte(1)); // smile
    lcd.setCursor(0, 1);
    lcd.print("M");
    lcd.write(byte(2)); // täht Ü
    lcd.print("ndid kokku: ");
    lcd.print(myndid);
    delay(3000); 
    lcd.clear(); 
    
    // Küsib - kas veel üks?
    lcd.setCursor(0, 0);
    lcd.print("Veel ");
    lcd.write(byte(2));
    lcd.print("ks? ");
    lcd.write(byte(6)); // smile2
    
    digitalWrite(bluePin, HIGH); 
    digitalWrite(greenPin, LOW);
    digitalWrite(redPin, LOW); 
    
    // Käivitame taimeri
    timer = millis();
    ootanRingi = true;
   }
  
  // Kui möödub 5 sekundit ja keegi ei lähenenud
  if (ootanRingi && millis() - timer >= 5000 && distance > 30) {
  /* See tingimus kontrollib, kas ootame uut münti, on möödunud vähemalt 5 sekundit 
    ja kedagi pole läheduses. Kui kõik need tingimused on täidetud, siis kuvatakse sõnum ekraanil */ 
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Kurb vaikus... ");
    lcd.write(byte(7));
    lcd.setCursor(4, 1);
    lcd.print("Zzz...");

    digitalWrite(bluePin, LOW);
    digitalWrite(greenPin, LOW);
    digitalWrite(redPin, HIGH);

    ootanRingi = false;
  }

  // Kui keegi lähenes enne 5 sekundit — katkestame ootamise
  if (ootanRingi && distance <= 30) {
    kasiLahedal = true;
    ootanRingi = false;
    lcd.clear();
  }
}