This is an old revision of the document!


Masina Linie

Introducere

Proiectul consta in creearea unei masini care va putea sa urmareasca o linie. Ideea de la care am pornit este ca voiam sa fac un proiect de tip masina, motivatia fiind ca mi se parea interesant sa fac un proiect de tip masina

Descriere generală

Hardware Design

Componente:

  • arduino uno
  • 2 x senzori IR
  • 2 x motoare DC
  • driver motor dc
  • baterie 9V

Poze masina:

Software Design

am folosit tinkercad ca sa simulez anumite functii cum ar fii la leduri si buton (intreruperile si timerele)

int on = 0;
int time = 0;
int light = 0;
int mode = 0;

ISR(INT0_vect) {
  on = !on ;
}

ISR(TIMER1_COMPA_vect) {
  // cod întrerupere 
  time++;
  if(time == 2)
  {
     if(mode == 0)
    {	
      light+=50;
    }
    else
    {
      light-=50;
    }
    if(light <= -1)
    {
      light = 0;
      mode = 0;
    }
    if(light >= 250)
    {
      light = 249;
      mode = 1;
    }
    analogWrite(12,light);
    analogWrite(11,250-light);
    time = 0;
  }
  //Serial.println(x); 
}

void configure_timer1() {
  // exemplu de configurare pentru Timer 1 în mod CTC
  // care va genera întreruperi cu frecvența de 2Hz
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;
  OCR1A = 31249;            // compare match register 16MHz/256/2Hz-1
  TCCR1B |= (1 << WGM12);   // CTC mode
  TCCR1B |= (1 << CS12);    // 256 prescaler 
}
 
void init_timer1() {
  TIMSK1 |= (1 << OCIE1A);  // enable timer compare interrupt
}

void setup_interrupts() {
 
  cli();
  
  // input
  DDRD &= ~(1 << PD2);
  // input pullup
  PORTD |= (1 << PD2);
  EICRA |= (1 << ISC01); 
 
  EIMSK |= (1 << INT0);
  // activare intreruperi	

  sei();
}

int motor11 = 3;
int motor12 = 4;
int motor21 = 5;
int motor22 = 6;
int senzor1 = 7;
int senzor2 = 8;
int senzor3 = 9;
int senzor4 = 10;
int countdown = 0;
void moveForward()
{
  digitalWrite(motor11,HIGH);
  digitalWrite(motor12,LOW);
  digitalWrite(motor21,HIGH);
  digitalWrite(motor22,LOW);
}

void moveLeft()
{
  digitalWrite(motor11,HIGH);
  digitalWrite(motor12,LOW);
  digitalWrite(motor21,LOW);
  digitalWrite(motor22,HIGH);
}

void moveRight()
{
  digitalWrite(motor11,LOW);
  digitalWrite(motor12,HIGH);
  digitalWrite(motor21,HIGH);
  digitalWrite(motor22,LOW);
}

void Stop()
{
  digitalWrite(motor11,LOW);
  digitalWrite(motor12,LOW);
  digitalWrite(motor21,LOW);
  digitalWrite(motor22,LOW);
}

void change_side()
{
  int aux = motor11;
  motor11 = motor12;
  motor12 = aux;
  aux = motor21;
  motor21 = motor22;
  motor22 = aux;
}

void setup() {
  // put your setup code here, to run once:
  pinMode(motor11,OUTPUT);
  pinMode(motor12,OUTPUT);
  pinMode(motor21,OUTPUT);
  pinMode(motor22,OUTPUT);
  pinMode(senzor1,INPUT);
  pinMode(senzor2,INPUT);
  pinMode(senzor3,INPUT);
  pinMode(senzor4,INPUT);
  change_side();

  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);

  Serial.begin(9600);

  configure_timer1();
  init_timer1();
  setup_interrupts();
  on = 0;
}

void loop() {
  // put your main code here, to run repeatedly:
  while(on == 0)
  {
    Stop();
    delay(2000);
  }
  
  int x = digitalRead(senzor3);
  int y = digitalRead(senzor4);

  if((x == 0 || y == 0) && countdown == 0)
  {
    countdown = 5000;
    
    if(y == 0)
    {
      change_side();
      Stop();
      delay(2000);
      int l = digitalRead(senzor2);
      while(x != 0 || l == 0)
      {
        moveRight();
        x = digitalRead(senzor3);
        l = digitalRead(senzor1);
      }
      Stop();
      change_side();
      delay(3000);
    }
  }
  
  if(countdown != 0)
  {
    countdown--;
  }

  int r = digitalRead(senzor2);
  int l = digitalRead(senzor1);
  
  if( l != 0)
  {
    moveRight();
  }
  else if(r != 0)
  {
    moveLeft();
  }
  else
  {
    moveForward();
  }
  
}

Rezultate Obţinute

Care au fost rezultatele obţinute în urma realizării proiectului vostru.

Concluzii

Asadar si prin urmare grecii fac comert pe mare. Asadar si fara deci, nu este vorba despre greci

Download

O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).

Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.

Jurnal

todo

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

pm/prj2023/alexau/mihai.ilinca.1684870637.txt.gz · Last modified: 2023/05/23 22:37 by mihai.ilinca
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