Ülesanne #1

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

Ülesanne #2

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

Ülesanne #3

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

Parking

Video

https://drive.google.com/file/d/1YgP0mvGhp2ftuOuMtU2WgloY1jam13b-/view?usp=sharing

Kirjeldus

Luua automaatne parkimistõkkepuu, mis tuvastab sõiduki lähenemise ja avab tõkkepuu automaatselt, kasutades erinevaid sensoreid. Süsteemi eesmärk on muuta parkimine mugavamaks, täpsemaks ja turvalisemaks, jälgides samal ajal ka parkimisala täituvust.

Komponendid

  • Arduino UNO plaat (1tk)
  • Arendusplaat (1tk)
  • Juhtmed (12tk)
  • 220 Ω Takisti (2tk)
  • Servo mootor (1tk)
  • Ultraheli kaugusandur (1tk)

Uuritud funktsioonid

pinMode(echoPin1, INPUT);Seab pinni echoPin1 sisendrežiimi, et vastuvõtta signaali andurilt.
pinMode(trigPin1, OUTPUT);Seab pinni trigPin1 väljundrežiimi, et saata ultraheliimpulss.
digitalWrite(trigPin, HIGH);Lülitab pini trigPin kõrgele tasemele (HIGH), et alustada impulsi saatmist.
delayMicroseconds(10);Ootab 10 mikrosekundit – see on soovitatav impulsi kestvus HC-SR04 anduri jaoks.
digitalWrite(trigPin, LOW);Lülitab pini trigPin madalale tasemele (LOW), lõpetades impulsi saatmise.
pulseIn(echoPin, HIGH, 25000);Mõõdab aega (mikrosekundites), kui kaua pin echoPin on kõrgel tasemel (HIGH). Kaugus saadakse, jagades tulemuse 57,5-ga (sentimeetrites).
millis()Tagastab aja (millisekundites) alates Arduino käivitamisest. Kasutatakse ajastamiseks ja viivituste mõõtmiseks.

Selgitus

Kohe alguses ühendame teegi servo juhtimiseks ja seadistame tihvtid ultraheliandurile, servoajamile ja RGB LED-ile.

#include <Servo.h>

const int trigPin1 = 10;
const int echoPin1 = 9;

Servo barrierServo;
const int servoPin = 6;

const int redPin = 13;
const int greenPin = 11;

Määratakse vahemaad, mille juures tõkkepuu tuleb avada või sulgeda. Samuti antakse siin muutujad, mis on vajalikud süsteemi seisundi juhtimise loogika jaoks (kas objekt on leitud, kas slagbaum on avatud, kui kaua see on avatud).

const int distanceThresholdOpen = 30;
const int distanceThresholdClose = 25;

bool entryDetected = false;
unsigned long barrierOpenTime = 0;
const unsigned long openDuration = 3000;
bool barrierIsOpen = false;

Funktsioonis setup() toimub seeriaühenduse initsialiseerimine, tihvtide seadmine vajalikesse režiimidesse ja servo-juhi sidumine oma tihvtiga. Tõkkepuu sulgub süsteemi käivitamisel kohe.

void setup() {
  Serial.begin(9600);

  pinMode(trigPin1, OUTPUT);
  pinMode(echoPin1, INPUT);

  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);

  barrierServo.attach(servoPin);
  closeBarrier();
}

Põhisilmus loop() loetakse kõigepealt kaugus objektist andurini ja tulemus väljastatakse silumiseks pordimonitorile.

void loop() {
  int distance1 = readDistance(trigPin1, echoPin1);

  Serial.print("Entry: ");
  Serial.print(distance1);
  Serial.println(" cm");

Kui objekt on seatud künnisest lähemal ja seda pole varem fikseeritud, avaneb tõkkepuu ja fikseeritakse avamismoment.

  if (distance1 < distanceThresholdOpen && !entryDetected) {
    openBarrier();
    entryDetected = true;
    barrierOpenTime = millis();
  }

Kui objekt liigub kaugemale kui määratud künnis ja tõkkepuu on avatud — tõkkepuu suletakse.

  if (distance1 > distanceThresholdClose && entryDetected && barrierIsOpen) {
    closeBarrier();
    entryDetected = false;
  }

Kui tõkkepuu on avatud liiga kaua (rohkem kui 3 sekundit) ja kedagi pole läheduses, sulgub tõkkepuu automaatselt.

  if (barrierIsOpen && millis() - barrierOpenTime > openDuration && distance1 > distanceThresholdClose) {
    closeBarrier();
    entryDetected = false;
  }
}

Funktsioon readDistance() saadab ultraheliimpulsi ja mõõdab selle tagastamise aega, et arvutada objekti kaugus.

int readDistance(int trigPin, int echoPin) {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  long duration = pulseIn(echoPin, HIGH, 25000);
  return duration * 0.034 / 2;
}

openBarrier() ja closeBarrier() kontrollivad servo asukohta ja muudavad LED-i värvi, et näidata tõkkepuu olekut. Samuti värskendavad nad barrierIsOpen loogilist väärtust.

void openBarrier() {
  barrierServo.write(90);
  digitalWrite(redPin, LOW);
  digitalWrite(greenPin, HIGH);
  Serial.println("Barrier opened");
  barrierIsOpen = true;
}

void closeBarrier() {
  barrierServo.write(0);
  digitalWrite(greenPin, LOW);
  digitalWrite(redPin, HIGH);
  Serial.println("Barrier closed");
  barrierIsOpen = false;
}

Kood

#include <Servo.h>

// ultrahelianduri trig- ja echopinid
const int trigPin1 = 10;
const int echoPin1 = 9;

// servo ja selle juhtimispini määramine
Servo barrierServo;
const int servoPin = 6;

// RGB LED pinid (ainult punane ja roheline kanal)
const int redPin = 13;
const int greenPin = 11;

// kaugusläved toiminguteks
const int distanceThresholdOpen = 30;
const int distanceThresholdClose = 25;

// süsteemi olekumuutujad
bool entryDetected = false;
unsigned long barrierOpenTime = 0;
const unsigned long openDuration = 3000;
bool barrierIsOpen = false;
void setup() {
  Serial.begin(9600); // serial-ühenduse seadistamine
  pinMode(trigPin1, OUTPUT); // trig-pini määramine väljundiks
  pinMode(echoPin1, INPUT); // echo-pini määramine sisendiks
  pinMode(redPin, OUTPUT); // punase LEDi määramine väljundiks
  pinMode(greenPin, OUTPUT); // rohelise LEDi määramine väljundiks
  barrierServo.attach(servoPin); // servo ühendamine
  closeBarrier(); // algolek – tõkkepuu on suletud
}
void loop() {
  int distance1 = readDistance(trigPin1, echoPin1); // kauguse mõõtmine
  Serial.print("Entry: ");
  Serial.print(distance1);
  Serial.println(" cm");
  // kui objekt tuvastatakse ja see polnud varem tuvastatud
  if (distance1 < distanceThresholdOpen && !entryDetected) {
    openBarrier(); // tõkkepuu avamine
    entryDetected = true; // märgitakse siseneja
    barrierOpenTime = millis(); // avamise aja salvestamine
  }
  // kui objekt on eemaldunud ja tõkkepuu on avatud
  if (distance1 > distanceThresholdClose && entryDetected && barrierIsOpen) {
    closeBarrier(); // tõkkepuu sulgemine
    entryDetected = false; // märge eemaldatakse
  }
  // automaatne sulgemine, kui määratud aeg on möödas ja objekti pole
  if (barrierIsOpen && millis() - barrierOpenTime > openDuration && distance1 > distanceThresholdClose) {
    closeBarrier(); // tõkkepuu sulgemine
    entryDetected = false; // märge eemaldatakse
  }
}

// funktsioon ultraheliandurilt kauguse saamiseks
int readDistance(int trigPin, int echoPin) {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  long duration = pulseIn(echoPin, HIGH, 25000); // signaali kestuse lugemine
  return duration * 0.034 / 2; // aja teisendamine sentimeetriteks
}

// tõkkepuu avamise protseduur koos näidikuga
void openBarrier() {
  barrierServo.write(90); // servo pööramine
  digitalWrite(redPin, LOW); // punase tule kustutamine
  digitalWrite(greenPin, HIGH); // rohelise tule süütamine
  Serial.println("Barrier opened");
  barrierIsOpen = true;
}

// tõkkepuu sulgemise protseduur koos näidikuga
void closeBarrier() {
  barrierServo.write(0); // servo tagasipööramine
  digitalWrite(greenPin, LOW); // rohelise tule kustutamine
  digitalWrite(redPin, HIGH); // punase tule süütamine
  Serial.println("Barrier closed");
  barrierIsOpen = false;
}