Teema 7

7.1 Katse Mootori kasutamine

Komponentid:

  1. L293D või SN754410 mootori draiver
  2. lülitid 2tk
  3. 10kOhm takistid 2tk
  4. potentsiomeeter

Eesmärk

Eelmises projektis kasutasime transistori, et kontrollida mootorit, millega suutsime kontrollida vaid mootori kiirust. Selles projektis võtame kasutusele H-silla, et saaksime kontrollida mootori pöörlemissuunda. Kuna tegemist on suure sammuga robotiehitusele, siis lisame skeemi lüliti, mis paneb mootori tööle, lüliti mis muudab pöörlemissuunda ja muuttakisti mootori kiiruse muutmiseks.

Skeem

c++ kood

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 

 } 

} 

Nüüd kui skeemi üles laed, siis töötab mootor ühtepidi ja kui nupule vajutad, siis teistpidi. Täiendame seda veel ühe lülitusega, mis käivitab mootori ja potentsiomeetriga, mis muudab mootori kiirust.

Skeem

c++ kood

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

Komponentid:

  1. Juhe 4x
  2. Ultraheli andur

Ultrahelianduri HC-SR04 ühendamine Arduinoga

Ultraheli sensor on andur (sonar), mis mõõdab heliimpulsi abil kaugust eesoleva takistuseni. Nimelt mõõdetakse heliimpulsi saatmisest vastuvõtmiseni (kaja) kuluv aeg. Arvesse tuleb võtta veel heli levimise kiirus 340m/s  ning tulemus jagada kahega.

Abiks: abiks: 1cm läbimiseks kulub 29μs. Signaali mõõtmiseks kasuta Arduino pulseIn() funktsiooni 

Antud andur töötab 5V peal, mõõtenurk on kuni 15° ja mõõdetav distants 2-450cm. Tegemist on suhteliselt odava anduriga ning selle täpsus on 0,3cm.

Ühendamiseks Arduinoga ühendame Echo pesaga 8 ja Trig pesaga 7.

kuidas elus rakendada?

Näiteks on see kasulik automaatsete uste väljatöötamisel poe sissepääsu juures

Skeem

koodi näide

#define ECHO_PIN 8

#define TRIG_PIN 7

void setup() {

  pinMode(ECHO_PIN, INPUT);

  pinMode(TRIG_PIN, OUTPUT);

  Serial.begin(960);

}

void loop() {

  digitalWrite(TRIG_PIN,HIGH);

  digitalWrite(TRIG_PIN,LOW);

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

  Serial.println(distance);

}

https://www.tinkercad.com/things/1SoBVhN5ZTv-magnificent-uusam/editel?sharecode=7Rdyj7ZEvSadAIn9H3E1bkW8YZBcIi0w-ApSgM9_YNI

Ülesanne 7.1 Rahakarp või Prügikast

Komponendid: 

  1. Ultraheli kaugusandur, 
  2. Servo,
  3. LCD ekraan,
  4. LED(RGB Led)
  5. Paber või papp

Eesmärk: Loo automatiseeritud hoiupõrsasprojekt

Kirjeldus: Tänu liikumisandurile tuvastab hoiupõrsas liikumise ja avab servomootori abil mündipesa. Näiteks teeb ta suu lahti või ulatab käe.

Skeem

c++ kood

#include <Servo.h>

#define ECHO_PIN 9
#define TRIG_PIN 8
int ServoPin = 11;
Servo servo;

void setup()
{
  pinMode(ECHO_PIN, INPUT); // Устанавливаем режим входа для ECHO_PIN
  pinMode(TRIG_PIN, OUTPUT); // Устанавливаем режим выхода для TRIG_PIN
  servo.attach(ServoPin); // Подключаем сервомотор к пину ServoPin
  Serial.begin(9600); // Инициализируем последовательную связь с скоростью 9600 бит/сек
  servo.write(0); // Устанавливаем сервомотор в исходное положение (0 градусов)
}

void loop()
{
  digitalWrite(TRIG_PIN, HIGH); // Посылаем импульс на TRIG_PIN
  delayMicroseconds(10); // Задержка 10 микросекунд
  digitalWrite(TRIG_PIN, LOW); // Завершаем импульс на TRIG_PIN

  int distance = pulseIn(ECHO_PIN, HIGH) / 58; // Измеряем расстояние в сантиметрах, используя длительность импульса на ECHO_PIN и деление на 58

  if (distance < 50)
  {
    servo.write(180); // Если расстояние меньше 50 см, поворачиваем сервомотор на 180 градусов
    delay(5000); // Ждем 5 секунд
    servo.write(0); // Возвращаем сервомотор в исходное положение (0 градусов)
    delay(5000); // Ждем еще 5 секунд
  }
  else if (distance > 50)
  {
    servo.write(0); // Если расстояние больше 50 см, поворачиваем сервомотор в исходное положение (0 градусов)
  }
}

https://www.tinkercad.com/things/kWe1LMhSyeZ-magnificent-gaaris-allis/editel?sharecode=lqRfUz9t8t_NFJLOpMU9tnmVrR4sEnui_zg0AU7Q7Lw

Valmis projekt, mis on kokku pandud tahvlile ja asetatud kasti, mis on hoiupõrsas

Video

Selle projekti käigus õppisin töötama liikumisanduriga, kleeplindiga ja sain aru, et käed kasvavad valest kohast, käsitsi võltsingute jaoks)

Kasutanud funktsioonid:

  1. pinMode() – Määrab pinile töörežiimi (sisend või väljund) antud pinile.
  2. servo.attach() – Ühendab servo mootori antud piniga.
  3. Serial.begin() – Algatab järjestikuse suhtluse kiirusega 9600 bitti sekundis.

Ülesanne 7.2 Auto parkimisanduriga

Töö eesmärk:

On luua masin, mis tänu andurile loeb, et ees on surve ja keerab ringi

Skeem:

c++ kood

const int trigPin = 3;
const int echoPin = 2;
int dist_check1, dist_check2, dist_check3;
long duration, distance, distance_all;
int dist_result;
//MOTORS VARIABLES
const int mot1f = 6;
const int mot1b = 5;
const int mot2f = 11;
const int mot2b = 10;
int mot_speed = 225; //motors speed
int k = 0; //BRAKE
//LOGICS VARIABLES
const int dist_stop = 25;
//const int dist_slow = 40;
const int max_range = 800;
const int min_range = 0;
int errorLED = 13;
//INITIALIZATION
void setup() {
// Serial.begin(9600);
// bluetoothSerial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(errorLED, OUTPUT);
}
//BASIC PROGRAM CYCLE
void loop() {
delay(1000);
goto start;
start:
int result = ping(); //Check distance
if (result <= min_range){ //Check min range
digitalWrite(errorLED, 1);
delay(500);
}
if (result == max_range || result > max_range){ //Check max range
digitalWrite(errorLED, 1);
delay(500);
}
if (result == dist_stop || result < dist_stop){ //Check stop range
digitalWrite(errorLED, 0);
motors_back();
delay(1000);
motors_stop();
delay(200);
motors_left();
delay(300);
motors_stop();
delay(200);
}
if (result > dist_stop){ //If all is OK, go forward
motors_forward();
delay(100);
}
goto start;
}
////***********************FUNCTIONS*******************************\\\\
int ping(){ //CHECK DISTANCE FUNCTION (3x)
digitalWrite(trigPin, 0);
delayMicroseconds(2);
digitalWrite(trigPin, 1);
delayMicroseconds(10);
digitalWrite(trigPin, 0);
duration = pulseIn(echoPin, 1);
distance = duration/58;
dist_check1 = distance;
digitalWrite(trigPin, 0);
delayMicroseconds(2);
digitalWrite(trigPin, 1);
delayMicroseconds(10);
digitalWrite(trigPin, 0);
duration = pulseIn(echoPin, 1);
distance = duration/58;
dist_check2 = distance;
digitalWrite(trigPin, 0);
delayMicroseconds(2);
digitalWrite(trigPin, 1);
delayMicroseconds(10);
digitalWrite(trigPin, 0);
duration = pulseIn(echoPin, 1);
distance = duration/58;
dist_check3 = distance;
int dist_check_sum;
dist_check_sum = dist_check1 + dist_check2 + dist_check3;
dist_result = dist_check_sum/3;
return dist_result;
}
void motors_forward(){ //MOTORS FORWARD FUNCTION
analogWrite(mot1f, mot_speed);
analogWrite(mot2f, mot_speed);
digitalWrite(mot1b, 0);
digitalWrite(mot2b, 0);
}
void motors_back(){ //MOTORS BACK FUNCTION
digitalWrite(mot1f, 0);
digitalWrite(mot2f, 0);
analogWrite(mot1b, mot_speed);
analogWrite(mot2b, mot_speed);
}
void motors_stop() { //MOTORS STOP FUNCTION
digitalWrite(mot1f, 1);
digitalWrite(mot2f, 1);
digitalWrite(mot1b, 1);
digitalWrite(mot2b, 1);
}
void motors_left() { //MOTORS LEFT FUNCTION
analogWrite(mot1f, mot_speed);
digitalWrite(mot2f, 0);
digitalWrite(mot1b, 0);
analogWrite(mot2b, mot_speed);
}
void motors_right() { //MOTORS RIGHT FUNCTION
digitalWrite(mot1f, 0);
analogWrite(mot2f, mot_speed);
analogWrite(mot1b, mot_speed);
digitalWrite(mot2b, 0);
}
void motors_foward_left() { //FORWARD LEFT FUNCTION
k = mot_speed*0.8;
analogWrite(mot1f, mot_speed);
analogWrite(mot2f, k);
digitalWrite(mot1b, 0);
digitalWrite(mot2b, 0);
}
void motors_foward_right() { //FORWARD RIGHT FUNCTION
k = mot_speed*0.8;
analogWrite(mot1f, k);
analogWrite(mot2f, mot_speed);
analogWrite(mot1b, 0);
analogWrite(mot2b, 0);
}
void motors_back_left() { //BACK LEFT FUNCTION
k = mot_speed*0.8;
digitalWrite(mot1f, 0);
digitalWrite(mot2f, 0);
analogWrite(mot1b, k);
analogWrite(mot2b, mot_speed);
}
void motors_back_right() { //BACK RIGHT FUNCTION
k = mot_speed*0.8;
digitalWrite(mot1f, 0);
digitalWrite(mot2f, 0);
analogWrite(mot1b, mot_speed);
analogWrite(mot2b, k);
}

Aitäh tähelepanu eest!

Leave a Reply

Sinu e-postiaadressi ei avaldata. Nõutavad väljad on tähistatud *-ga