Ruleta digitala

Introducere

Ruleta digitala masoara distanta pana la un obiect folosind senzori ultrasonici si o afiseaza
pe un LCD. De multe ori am avut nevoie de o masuratoare a unui obiect si cred ca e o metoda
mai interesanta de a o face si mai precisa.

Descriere generala

Proiectul va folosi un Arduino UNO si am ales sa folosesc senzori ultrasonici un buton care sa
faca conversia din inch in centimetri. De asemenea, cu cat se apropie mai mult de
senzori aprind in functie de intervalul de distanta led-ul corespunzator,
iar daca se aprinde becul rosu, setat la distanta cea mai mica, buzzer-ul emite un sunet puternic.


Hardware Design

Componente:

  • Arduino UNO
  • Breadboard
  • Fire
  • Un buton
  • Senzori ultrasonici
  • 3 LED-uri
  • Un ecran LCD
  • Rezistente


Software Design

Codul proiectului

Codul proiectului

#include <LiquidCrystal_I2C.h>

#include <Wire.h> 

LiquidCrystal_I2C lcd(0x23, 16, 2);

int trigger=12;
int echo=11;
int timp;
int distanta;

int red=2;
int yellow=3;
int green=4;

int butonPin=6;
int butonNew=0;
int butonOld=0;
int state=0;
int valbuton;

int dist3=20;
int dist2=10;
int dist1=3;

int buzzer=8;
int buzzeralim=A0;
void setup() {
  pinMode(trigger,OUTPUT);
  pinMode(echo,INPUT);
  pinMode(red,OUTPUT);
  pinMode(yellow,OUTPUT);
  pinMode(green,OUTPUT);

  pinMode(butonPin,INPUT);
  pinMode(buzzer, OUTPUT);
  Serial.begin(9600);

  lcd.begin();

  lcd.backlight();
  lcd.print("Initializare");
}

void loop() {
  butonstate();
  Serial.println(distanta);
  leduri(distanta, dist3, dist2, dist1);
  afisare();
  
  
}

void afisare(){
  lcd.clear();
  lcd.print("Distanta:");
  lcd.setCursor(9,0);
  lcd.print(distanta);
  lcd.setCursor(13,0);
  if (state==0){
    lcd.print("cm");
  }
  else{
    lcd.print("in");
  }
  delay(300);
}

int senzor(){
  digitalWrite(trigger,LOW);
  delayMicroseconds(10);
  digitalWrite(trigger,HIGH);
  delayMicroseconds(10);
  digitalWrite(trigger,LOW);
  timp=pulseIn(echo,HIGH);
  delay(25);
  if (state == 0) {
    return 0.0173*timp;
  } else {
    return 0.0173 * timp /2.54;
  }
}

void leduri(int distanta, int dist3, int dist2, int dist1){ 
  if(distanta>dist3){
     digitalWrite(green,HIGH);
     delay(300);
     digitalWrite(green,LOW);
     delay(300);
  }
  else if(distanta>dist2){
    //digitalWrite(buzzer,HIGH);
     digitalWrite(yellow,HIGH);
     delay(300);
     digitalWrite(yellow,LOW);
     delay(300);
  }
  else if(distanta>dist1){
     digitalWrite(red,HIGH);
     delay(300);
     digitalWrite(red,LOW);
     delay(300);
     analogWrite(buzzeralim,150);
     digitalWrite(buzzer, LOW);
     tone(buzzer, 450);
     delay(100);
     noTone(buzzer);
     digitalWrite(buzzer,HIGH);
  }
  else{
    digitalWrite(buzzer,HIGH);
    digitalWrite(green,LOW);
    digitalWrite(yellow,LOW);
    digitalWrite(red,LOW);
  }
}

void butonstate(){
  butonNew=digitalRead(butonPin);
  distanta = senzor();
    if (butonOld==0 && butonNew==1){
      if(state==0){
        state=1;
        dist3=20/ 2.54;
        dist2=10/ 2.54;
        dist1=3/ 2.54;
      }
      else{
        state=0;
        dist3=20;
        dist2=10;
        dist1=3;
      }
    }
    butonOld=butonNew;
    
}

Am realizat partea de coding in Arduino IDE. In functia senzor() calculez distanta de la senzor
la obiect, pe care o transform in functie de modul setat din buton in centimetri sau in inch.
Pentru a da o nota mai rezonabila buzzer-ului am folosit functia tone(), iar pentru a-l face sa
bipaie am folosit un delay mic si apoi functia notone().

Rezultate obtinute

Concluzii

Am implementat ce mi-am propus si functioneaza totul cum am sperat. Sunt multumit si a fost
la fel de simplu pe cat ma asteptam.

Jurnal

  • 25.04 : Creare pagina ocw
  • 20.05 : Realizare proiect
  • 02.06 : Filmat poriectul si finalizat pagina ocw

Bibliografie/Resurse

pm/prj2021/alazar/ruleta_digitala.txt · Last modified: 2021/06/03 19:15 by petru.temelie
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