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