Gentleman Robo

Introducere

Într-o lume în care tradițiile se estompează și stilurile de viață se schimbă rapid, am decis să aduc o picătură din nostalgia vechilor maniere în era tehnologiei avansate. Hai să fim sinceri, în ziua de azi, rareori mai vezi un băiat care își deschide umbrela pentru o fată când plouă. Așa că am hotărât să fac ceva în legătură cu asta - am creat un robot care face exact asta!

Pornind de la dorința de a aduce împreună tehnologia și rafinamentul, am dezvoltat o mașină autonomă cu un twist inedit: este echipată cu senzori infraroșu care îi conferă “vederea” necesară pentru a urmări o linie prestabilită, iar atunci când se întâlnește cu apă, se transformă într-un adevărat gentleman.

Da, ai auzit bine! Cu un senzor special de apă și un servomotor, mașina mea ridică o umbrelă într-o manieră elegantă și afișează un mesaj corespunzător pe un ecran LCD. Este un spectacol al tehnologiei și al stilului, întruchipând ideea că utilitatea poate merge mână în mână cu eleganța.

Descriere generală

Schemă bloc

Descriere

1. Motor Control Driver with L298N:

  • Descriere: Acesta este responsabil pentru controlul mișcării a două motoare DC conectate la roțile mașinii. Este compus din tranzistoare și diode care permit controlul direcției și vitezei motoarelor.
  • Interacțiune:Prin intermediul unor semnale de la Arduino Uno, determină direcția și viteza de rotație a motoarelor pentru a face mașina să meargă înainte, înapoi sau să se oprească.

2. Infrared Sensors:

  • Descriere: Acești senzori de infraroșu sunt plasați pe partea stângă și dreaptă a mașinii și sunt folosiți pentru a detecta o linie neagră pe sol. Ei servesc ca “ochii” mașinii, permitându-i să urmeze linia.
  • Interacțiune: Senzorii de infraroșu trimit semnale către Arduino Uno atunci când detectează linia neagră. Aceste semnale sunt folosite pentru a ghida mișcarea mașinii în direcția dorită.

3. Water Sensor:

  • Descriere: Acest senzor de apă este conectat la un pin analogic al Arduino Uno și este folosit pentru a detecta prezența apei.
  • Interacțiune: Atunci când senzorul de apă detectează apă, trimite un semnal către Arduino Uno. Acest semnal declanșează acțiunea unui servo motor.

5. Servo Motor:

  • Descriere: Servo motorul este utilizat pentru a acționa o umbrelă.
  • Interacțiune: La detectarea apei de către senzorul de apă, Arduino Uno trimite un semnal către servo motor pentru a iniția mișcarea de ridicare a umbrelei.

6. Arduino Uno:

  • Descriere: Arduino Uno servește ca și “creier” al mașinii, controlând toate modulele și execuția codului programat.
  • Interacțiune: Arduino Uno primește semnale de la senzorii de infraroșu și de apă și controlează modulul driver de comandă motor cu L298N și servo motorul în funcție de aceste semnale.

7. LCD Module :

  • Descriere: Acest modul LCD este utilizat pentru a afișa un mesaj corespunzător atunci când este detectată prezența apei.
  • Interacțiune: Când senzorul de apă detectează apă, Arduino Uno poate trimite un semnal către modulul LCD pentru a afișa un avertisment despre prezența apei.

Hardware Design

Listă de piese:
  • ARDUINO UNO R3 ATMEGA328P
  • 2 senzori infraroșu
  • Senzor nivel apă
  • Modul LCD 1602 + modul I2C
  • Șasiu transparent mașină inteligentă
  • Modul driver de comanda motor cu L298N OKY3195
  • Servomotor SG90
  • Breadboard 830 puncte MB102
Schemă electrică

Am început proiectarea circuitului prin împărțirea pinilor pe fiecare componentă utilizată. Împărțirea acestora este următoarea:

  • Pinul A3 este destinat citirii valorii senzorului de apă.
  • Pinii A4 și A5 i-am păstrat pentru comunicația I2C cu LCD-ul.
  • Pinii 2-7 sunt destinați controlului motoarelor prin driverul L298N.
  • Pinii 8 și 9 sunt alocați senzorilor infraroșii care detectează direcția pe care trebuie să o urmeze robotul.
  • Pinul 10 este alocat pentru servomotor.
  • Pinul de 5V este utilizat pentru alimentarea atât a senzorului de temperatură, cât și a modulului LCD, ambele fiind conectate pe breadboard.
  • Pinii de GND sunt distribuiți astfel: unul este alocat pentru modulul LCD, iar celălalt pentru toate conexiunile GND de pe breadboard (senzorii infraroșii, servomotorul, controlul motoarelor prin driverul L298N și senzorul de temperatură).

Software Design

Codul a fost scris în Arduino IDE.

Am utilizat bibliotecile “Servo.h”, “Wire.h” și “LiquidCrystal_I2C.h” pentru controlul servomotorului, comunicație I2C și afișarea pe LCD.

Am definit viteza motorului prin constanta “MOTOR_SPEED”.

#define MOTOR_SPEED 250

Următorul pas în dezvoltarea software a fost definirea pinilor pentru motoare (mot1, mot3, mot2, mot4), senzorii infraroșii (left, right) și pinul pentru senzorul de apă (waterSensorPin).

Am inițializat obiectul Servo pentru controlul servomotorului și am afișat un mesaj de pornire pe LCD.

void setup() {

Serial.begin(9600);
myservo.attach(10);
delay(1000);
myservo.write(90);
delay(1000);
myservo.write(0);
pinMode(waterSensorPin, INPUT);
pinMode(mot1, OUTPUT);
pinMode(mot3, OUTPUT);
pinMode(mot2, OUTPUT);
pinMode(mot4, OUTPUT);
pinMode(left, INPUT);
pinMode(right, INPUT);
// Initialize the LCD and print a welcome message
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Hi! I'm Nelutu:)");
delay(2000);
lcd.clear();

}

În bucla principală, am apelat funcția “water()” pentru a detecta apa și a afișa mesaje corespunzătoare pe LCD și se citesc datele de la senzorii infraroșii pentru a determina direcția de mers a robotului.

void loop() {

water();
Left = digitalRead(left);
Right = digitalRead(right);
delay(20);
Serial.print("Left: ");
Serial.print(Left);
delay(10);
Serial.print(" Right: ");
Serial.println(Right);
if (Left == 0 && Right == 0) 
{
  Serial.println("Chose front");
  FRONT();
}
else if (Left == 1 && Right == 1) {
  Serial.println("Chose stop");
  STOP();
}
else if (Left == 0 && Right == 1) {
  Serial.println("Chose left");
  LEFT();
}
else if (Right == 0 && Left == 1) {
  Serial.println("Chose right");
  RIGHT();
}

}

În funcția “water()“ nu numai citesc valoarea senzorului de apă, dar și, dacă această valoare depășește un anumit prag, inițiez un set de acțiuni. Printre aceste acțiuni se numără afișarea unui mesaj pe ecranul LCD pentru a semnala începerea ploii (“Oh, no! Rain!”) și, de asemenea, ridicarea servomotorului care controlează umbrela, astfel încât robotul să fie protejat de ploaie.

void water() {

int sensorValue = analogRead(waterSensorPin);
delay(20);
Serial.print("Water sensor :");
Serial.println(sensorValue);
if (sensorValue > threshold) {
  if (waterDetected == false) {
    lcd.setCursor(0,0);
    lcd.print("Oh, no! Rain!");
    myservo.write(90);
  }
  waterDetected = true;
} else {
  if (waterDetected == true) {
    lcd.clear();
    myservo.write(0);
  }
  waterDetected = false;
}

}

Funcțiile “FRONT()“, “LEFT()“, “RIGHT()“ și “STOP()“ sunt responsabile de controlul mișcării robotului. Ele primesc informații de la senzorii infraroșii pentru a determina dacă există obstacole în cale sau pentru a identifica direcția dorită de deplasare. În funcție de aceste informații, funcțiile controlează motoarele robotului pentru a-l face să meargă înainte, să vireze la stânga, să vireze la dreapta sau să oprească complet mișcarea.

void FRONT() {

analogWrite(mot1, MOTOR_SPEED);
analogWrite(mot3, MOTOR_SPEED);
analogWrite(mot2, MOTOR_SPEED);
analogWrite(mot4, MOTOR_SPEED);

}

void LEFT(void) {

analogWrite(mot1, MOTOR_SPEED);
analogWrite(mot3, MOTOR_SPEED);
analogWrite(mot2, 0);
analogWrite(mot4, 0);

}

void RIGHT(void) {

analogWrite(mot1, 0); 
analogWrite(mot3, 0); 
analogWrite(mot2, MOTOR_SPEED);
analogWrite(mot4, MOTOR_SPEED);

}

void STOP(void) {

analogWrite(mot1, 0);
analogWrite(mot3, 0);
analogWrite(mot2, 0);
analogWrite(mot4, 0);

}

Rezultate Obţinute

La pornirea Gentleman Robo, pe ecran este afișat următorul mesaj:

robo_inceput.jpeg

La detectarea apei, umbrela se ridică și pe ecran apare următorul mesaj:

robo_dectare_apa.jpeg

Concluzii

În concluzie, a fost o adevărată plăcere să lucrez la acest proiect, unde am avut oportunitatea de a combina cunoștințele de hardware cu cele de software și de a fi creativă în găsirea soluțiilor pentru controlul robotului. Integrarea senzorilor, a motorului și a servomotorului, împreună cu logica software pentru detectarea ploii și direcționarea mișcării, a fost o experiență minunată și edificatoare. Sper să mai am oportunitatea să lucrez la astfel de proiecte în viitor!

Download

Arhiva conține schema electrică și codul scris în Arduino IDE.

bogdan_alexandra_arhiva_pm.zip

Bibliografie/Resurse

Link-uri utile

[1] https://www.youtube.com/watch?v=xVC0X_PE_XE

[2] https://www.youtube.com/watch?v=I7IFsQ4tQU8

Resurse

1. Arduino Libraries

2. Servo Library Documentation

3. LiquidCrystal_I2C Library Documentation

4. Wire Library Documentation

5. Datasheet L298N Motor Driver

6. Datasheet senzor de apa

pm/prj2024/vstoica/alexandra.bogdan02.txt · Last modified: 2024/05/27 06:26 by alexandra.bogdan02
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0