Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
et:projects:explorer [2011/05/24 14:11] raivo.sellet:projects:explorer [2020/07/20 09:00] (current) – created - external edit 127.0.0.1
Line 3: Line 3:
 Lihtne labürindis orienteeruja, mis baseerub Robootika Kodulaboril ja RP05 lintidega robotplatvormil. Lihtne labürindis orienteeruja, mis baseerub Robootika Kodulaboril ja RP05 lintidega robotplatvormil.
  
 +{{:projects:rp05:rp05_maze.jpg|}}
  
 ===== Versioon 1 - Lihtne lahendus ===== ===== Versioon 1 - Lihtne lahendus =====
  
-[[projects:rp05:robot_v1.hex|Kompileeritud HEX]]+{{:projects:rp05:robot_v1.hex|Kompileeritud HEX}}
  
 {{:et:projects:saaremaa.jpg?500|}} {{:et:projects:saaremaa.jpg?500|}}
Line 12: Line 13:
 <code c> <code c>
 // //
- 
 // Roboti näidisprogramm v1. // Roboti näidisprogramm v1.
- 
 // //
  
 #include <stdio.h> #include <stdio.h>
- 
 #include <homelab/pin.h> #include <homelab/pin.h>
- 
 #include <util/delay.h> #include <util/delay.h>
- 
 #include <homelab/module/sensors.h> #include <homelab/module/sensors.h>
- 
 #include <homelab/module/lcd_gfx.h> #include <homelab/module/lcd_gfx.h>
- 
 #include <homelab/module/motors.h> #include <homelab/module/motors.h>
- 
    
- 
 // //
- 
 // Ultraheli anduri ja multiplekseri viigud // Ultraheli anduri ja multiplekseri viigud
- 
 // //
- 
 pin multiplekser = PIN(G,0); pin multiplekser = PIN(G,0);
- 
 pin pin_trigger = PIN(F, 2); pin pin_trigger = PIN(F, 2);
- 
- 
  
 // Nuppude viigud // Nuppude viigud
- 
- 
- 
 pin buttons[3] = { PIN(C, 2), PIN(C, 1), PIN(C, 0) }; pin buttons[3] = { PIN(C, 2), PIN(C, 1), PIN(C, 0) };
- 
- 
  
 // //
- 
 // Põhiprogramm // Põhiprogramm
- 
 // //
- 
 int main(void) int main(void)
- 
 {   {  
- 
  unsigned short distance;  unsigned short distance;
- 
  char text[16];  char text[16];
- 
  bool lipp = 0;  bool lipp = 0;
- 
- 
- 
  // Multiplekseri seadistamine  // Multiplekseri seadistamine
- 
  pin_setup_output(multiplekser);  pin_setup_output(multiplekser);
- 
  pin_set(multiplekser);  pin_set(multiplekser);
- 
- 
- 
  // Nuppude seadistamine sisendiks  // Nuppude seadistamine sisendiks
- 
- 
- 
  for (int i = 0; i < 3; i++) pin_setup_input(buttons[i]);  for (int i = 0; i < 3; i++) pin_setup_input(buttons[i]);
- 
-  
- 
  // Mootorite seadistamine  // Mootorite seadistamine
- 
  dcmotor_init(0);  dcmotor_init(0);
- 
  dcmotor_init(1);  dcmotor_init(1);
- 
- 
- 
  // LCD ekraani algseadistamine  // LCD ekraani algseadistamine
- 
  lcd_gfx_init();  lcd_gfx_init();
- 
-  
- 
  // Ekraani puhastamine  // Ekraani puhastamine
- 
  lcd_gfx_clear();  lcd_gfx_clear();
- 
-  
- 
  // Taustavalgustuse tööle lülitamine  // Taustavalgustuse tööle lülitamine
- 
  lcd_gfx_backlight(true);  lcd_gfx_backlight(true);
- 
-  
- 
  // Programmi nime kuvamine  // Programmi nime kuvamine
- 
  lcd_gfx_goto_char_xy(1, 1);  lcd_gfx_goto_char_xy(1, 1);
- 
  lcd_gfx_write_string("Robot_v1");  lcd_gfx_write_string("Robot_v1");
- 
-  
- 
  // Väike paus  // Väike paus
- 
  _delay_ms(100);  _delay_ms(100);
- 
-  
- 
   // Lõputu tsükkel   // Lõputu tsükkel
- 
  while (true)  while (true)
- 
  {  {
- 
  // Mõõtmine  // Mõõtmine
- 
  distance = ultrasonic_measure_srf05(pin_trigger);  distance = ultrasonic_measure_srf05(pin_trigger);
- 
- 
- 
  // Kontrollime nuppu ja salvestame nupuvajutuse  // Kontrollime nuppu ja salvestame nupuvajutuse
- 
- 
- 
  if(!pin_get_value(buttons[0])) lipp = 0; // Vajutades 0 nuppu läheb lipp madalaks  if(!pin_get_value(buttons[0])) lipp = 0; // Vajutades 0 nuppu läheb lipp madalaks
- 
  if(!pin_get_value(buttons[1])) lipp = 1; // Vajutades 1 nuppu läheb lipp kõrgeks  if(!pin_get_value(buttons[1])) lipp = 1; // Vajutades 1 nuppu läheb lipp kõrgeks
- 
-  
- 
  // Mõõtmine õnnestus ?  // Mõõtmine õnnestus ?
- 
  if (distance > 0)  if (distance > 0)
- 
  {   {
- 
  // Kauguse tekstiks teisendamine  // Kauguse tekstiks teisendamine
- 
  sprintf(text, "%d cm   ", distance);  sprintf(text, "%d cm   ", distance);
- 
  }  }
- 
  // Mõõtmisel tekkis viga ?  // Mõõtmisel tekkis viga ?
- 
  else  else
- 
  {  {
- 
  // Vea tekst  // Vea tekst
- 
  sprintf(text, "Viga    ");  sprintf(text, "Viga    ");
- 
  }   }
- 
  // Teksti kuvamine LCD teise rea alguses  // Teksti kuvamine LCD teise rea alguses
- 
  lcd_gfx_goto_char_xy(2, 2);  lcd_gfx_goto_char_xy(2, 2);
- 
  lcd_gfx_write_string(text);  lcd_gfx_write_string(text);
- 
- 
  
  // Kauguse kontorllimine  // Kauguse kontorllimine
- 
  // Kui nuppu on vajutatud ja distants on alla teatud väärtuse siis keerame paremale  // Kui nuppu on vajutatud ja distants on alla teatud väärtuse siis keerame paremale
- 
  if (lipp&&(distance<25))  if (lipp&&(distance<25))
- 
  {  {
- 
  dcmotor_drive(0, 1);       // 0 mootor edasi  dcmotor_drive(0, 1);       // 0 mootor edasi
- 
  dcmotor_drive(1,-1);       // 1 mootor tagasi  dcmotor_drive(1,-1);       // 1 mootor tagasi
- 
  sprintf(text,"paremale "); // kirjutame kontrolliks text massiivi paremale  sprintf(text,"paremale "); // kirjutame kontrolliks text massiivi paremale
- 
  _delay_ms(300);            // ootame keeramist, ooteaja pikkus valitakse katseliselt  _delay_ms(300);            // ootame keeramist, ooteaja pikkus valitakse katseliselt
- 
  distance = ultrasonic_measure_srf05(pin_trigger); // Kordame mõõtmist  distance = ultrasonic_measure_srf05(pin_trigger); // Kordame mõõtmist
- 
  // Kui distants oli endiselt alla teatud väärtuse keerame otsa ringi, ehk algsest asendist vasakule  // Kui distants oli endiselt alla teatud väärtuse keerame otsa ringi, ehk algsest asendist vasakule
- 
  if ( distance<25)  if ( distance<25)
- 
  {  {
- 
  dcmotor_drive(0,-1);       // 0 mootor tagasi  dcmotor_drive(0,-1);       // 0 mootor tagasi
- 
  dcmotor_drive(1, 1);       // 1 mootor edasi  dcmotor_drive(1, 1);       // 1 mootor edasi
- 
  sprintf(text,"vasakulse"); // kirjutame text massiivi vasakule  sprintf(text,"vasakulse"); // kirjutame text massiivi vasakule
- 
  _delay_ms(600);    // ootame keeramist, ooteaja pikkus valitakse katseliselt  _delay_ms(600);    // ootame keeramist, ooteaja pikkus valitakse katseliselt
- 
  distance = ultrasonic_measure_srf05(pin_trigger); // Kordame mõõtmist  distance = ultrasonic_measure_srf05(pin_trigger); // Kordame mõõtmist
- 
  // Kui distants on endiselt alla teatud väärtuse jääme seisma  // Kui distants on endiselt alla teatud väärtuse jääme seisma
- 
  if(distance<25)  if(distance<25)
- 
  {  {
- 
  dcmotor_drive(0, 0);  dcmotor_drive(0, 0);
- 
  dcmotor_drive(1, 0);  dcmotor_drive(1, 0);
- 
  sprintf(text,"sein");  sprintf(text,"sein");
- 
  }  }
- 
  }  }
- 
  }  }
- 
  // Kui takistust pole sõidame otse edasi  // Kui takistust pole sõidame otse edasi
- 
  else if(lipp)  else if(lipp)
- 
  {  {
- 
  dcmotor_drive(0,1);  dcmotor_drive(0,1);
- 
  dcmotor_drive(1,1);  dcmotor_drive(1,1);
- 
  sprintf(text, "otse");  sprintf(text, "otse");
- 
  }  }
- 
  // Kui nupp 0 on alla vajutatud jääme seisma  // Kui nupp 0 on alla vajutatud jääme seisma
- 
  else  else
- 
  {  {
- 
  sprintf(text,"seisab");  sprintf(text,"seisab");
- 
  dcmotor_drive(0,0);  dcmotor_drive(0,0);
- 
  dcmotor_drive(1,0);  dcmotor_drive(1,0);
- 
  }  }
- 
  // Teksti kuvamine LCD teise rea alguses  // Teksti kuvamine LCD teise rea alguses
- 
  lcd_gfx_goto_char_xy(3, 3);  lcd_gfx_goto_char_xy(3, 3);
- 
  lcd_gfx_write_string(text);  lcd_gfx_write_string(text);
- 
-  
  
  sprintf(text, "lipp %d", lipp);  sprintf(text, "lipp %d", lipp);
- 
  lcd_gfx_goto_char_xy(2, 4);  lcd_gfx_goto_char_xy(2, 4);
- 
  lcd_gfx_write_string(text);  lcd_gfx_write_string(text);
- 
   
- 
-  
- 
  // Väike paus  // Väike paus
- 
  _delay_ms(50);  _delay_ms(50);
- 
  }  }
- 
 } }
 </code> </code>
Line 288: Line 139:
 ===== Versioon 2 - Targem lahendus ===== ===== Versioon 2 - Targem lahendus =====
  
-[[projects:rp05:robot_v3.hex|Kompileeritud HEX]]+{{:projects:rp05:robot_v3.hex|Kompileeritud HEX}}
  
  
 <code c> <code c>
 // //
- 
 // Roboti näidisprogramm v3. // Roboti näidisprogramm v3.
- 
 // //
- 
 #include <stdio.h> #include <stdio.h>
- 
 #include <homelab/pin.h> #include <homelab/pin.h>
- 
 #include <util/delay.h> #include <util/delay.h>
- 
 #include <homelab/module/sensors.h> #include <homelab/module/sensors.h>
- 
 #include <homelab/module/lcd_gfx.h> #include <homelab/module/lcd_gfx.h>
- 
 #include <homelab/module/motors.h> #include <homelab/module/motors.h>
- 
    
- 
 // //
- 
 // Ultraheli anduri ja multiplekseri viigud // Ultraheli anduri ja multiplekseri viigud
- 
 // //
- 
 pin multiplekser = PIN(G,0); pin multiplekser = PIN(G,0);
- 
 pin pin_trigger = PIN(F, 0); pin pin_trigger = PIN(F, 0);
- 
- 
- 
 // Nuppude viigud // Nuppude viigud
- 
- 
- 
 pin buttons[3] = { PIN(C, 2), PIN(C, 1), PIN(C, 0) }; pin buttons[3] = { PIN(C, 2), PIN(C, 1), PIN(C, 0) };
- 
- 
- 
 // //
- 
 // Põhiprogramm // Põhiprogramm
- 
 // //
- 
 int main(void) int main(void)
- 
 {   {  
- 
  unsigned short distance;  unsigned short distance;
- 
  char text[16];  char text[16];
- 
  bool lipp = 0;  bool lipp = 0;
- 
- 
- 
  // Loome servo positsioonide massiivi, kus on eelnevalt kindlaks tehtud ääred ja keskasend  // Loome servo positsioonide massiivi, kus on eelnevalt kindlaks tehtud ääred ja keskasend
- 
  // { parem äär, keskasend, vasak äär, keskasend}  // { parem äär, keskasend, vasak äär, keskasend}
- 
  // NB! asendieid võivad olla nihkes, ning vastavalt servo paigaldusele valesti.  // NB! asendieid võivad olla nihkes, ning vastavalt servo paigaldusele valesti.
- 
- 
- 
  int positsioon[4] = {-178,-40,110,-40 };  int positsioon[4] = {-178,-40,110,-40 };
- 
- 
- 
  // Loome suundade mälumassiivi kuhu hiljem hakkame tõeväärtusi kirjutama  // Loome suundade mälumassiivi kuhu hiljem hakkame tõeväärtusi kirjutama
- 
  // 0 - sel suunal on takistus , 1 - takistus puudub  // 0 - sel suunal on takistus , 1 - takistus puudub
- 
- 
- 
  int suund[4] = { 0, 0, 0, 0};  int suund[4] = { 0, 0, 0, 0};
- 
- 
- 
  // Multiplekseri seadistamine  // Multiplekseri seadistamine
- 
  pin_setup_output(multiplekser);  pin_setup_output(multiplekser);
- 
  pin_set(multiplekser);  pin_set(multiplekser);
- 
- 
- 
  // Nuppude seadistamine sisendiks  // Nuppude seadistamine sisendiks
- 
- 
- 
  for (int i = 0; i < 3; i++) pin_setup_input(buttons[i]);  for (int i = 0; i < 3; i++) pin_setup_input(buttons[i]);
- 
-  
- 
  // Mootorite seadistamine  // Mootorite seadistamine
- 
  dcmotor_init(0);  dcmotor_init(0);
- 
  dcmotor_init(1);  dcmotor_init(1);
- 
- 
- 
  // Servo seadistamine  // Servo seadistamine
- 
- 
- 
  servomotor_init(0);  servomotor_init(0);
- 
- 
- 
  // LCD ekraani algseadistamine  // LCD ekraani algseadistamine
- 
  lcd_gfx_init();  lcd_gfx_init();
- 
-  
- 
  // Ekraani puhastamine  // Ekraani puhastamine
- 
  lcd_gfx_clear();  lcd_gfx_clear();
- 
-  
- 
  // Taustavalgustuse tööle lülitamine  // Taustavalgustuse tööle lülitamine
- 
  lcd_gfx_backlight(true);  lcd_gfx_backlight(true);
- 
-  
- 
  // Programmi nime kuvamine  // Programmi nime kuvamine
- 
  lcd_gfx_goto_char_xy(1, 1);  lcd_gfx_goto_char_xy(1, 1);
- 
  lcd_gfx_write_string("Robot_v3");  lcd_gfx_write_string("Robot_v3");
- 
-  
- 
  // Väike paus  // Väike paus
- 
  _delay_ms(100);  _delay_ms(100);
- 
-  
- 
   // Lõputu tsükkel   // Lõputu tsükkel
- 
  while (true)  while (true)
- 
  {  {
- 
  // Mõõtmine  // Mõõtmine
- 
  distance = ultrasonic_measure_srf05(pin_trigger);  distance = ultrasonic_measure_srf05(pin_trigger);
- 
-  
- 
  // Kontrollime nuppu ja salvestame nupuvajutuse  // Kontrollime nuppu ja salvestame nupuvajutuse
- 
- 
- 
  if(!pin_get_value(buttons[0])) lipp = 0; // Vajutades 0 nuppu läheb lipp madalaks  if(!pin_get_value(buttons[0])) lipp = 0; // Vajutades 0 nuppu läheb lipp madalaks
- 
  if(!pin_get_value(buttons[1])) lipp = 1; // Vajutades 1 nuppu läheb lipp kõrgeks  if(!pin_get_value(buttons[1])) lipp = 1; // Vajutades 1 nuppu läheb lipp kõrgeks
- 
-  
- 
  // Mõõtmine õnnestus ?  // Mõõtmine õnnestus ?
- 
  if (distance > 0)  if (distance > 0)
- 
  {   {
- 
  // Kauguse tekstiks teisendamine  // Kauguse tekstiks teisendamine
- 
  sprintf(text, "%d cm   ", distance);  sprintf(text, "%d cm   ", distance);
- 
  }  }
- 
  // Mõõtmisel tekkis viga ?  // Mõõtmisel tekkis viga ?
- 
  else  else
- 
  {  {
- 
  // Vea tekst  // Vea tekst
- 
  sprintf(text, "Viga    ");  sprintf(text, "Viga    ");
- 
  }   }
- 
  // Teksti kuvamine LCD teise rea alguses  // Teksti kuvamine LCD teise rea alguses
- 
  lcd_gfx_goto_char_xy(2, 2);  lcd_gfx_goto_char_xy(2, 2);
- 
  lcd_gfx_write_string(text);  lcd_gfx_write_string(text);
- 
- 
- 
  // Kontrollime kas sisselülitamise nuppu on vajutatud  // Kontrollime kas sisselülitamise nuppu on vajutatud
- 
  if(lipp)  if(lipp)
- 
  {  {
- 
  // Kordustsüklis hakkame positsiooni ja suuna massiive kontrollima  // Kordustsüklis hakkame positsiooni ja suuna massiive kontrollima
- 
  for(int i = 0; i<4;i++)  for(int i = 0; i<4;i++)
- 
  {  {
- 
  // Liigutame servomootorit positsiooni massiivist võetud väärtuse võrra  // Liigutame servomootorit positsiooni massiivist võetud väärtuse võrra
- 
  servomotor_position(0, positsioon[i]);  servomotor_position(0, positsioon[i]);
- 
- 
- 
  // Ootame servo liikumist  // Ootame servo liikumist
- 
  _delay_ms(250);  _delay_ms(250);
- 
- 
- 
  // Salvestame ultraheli kauguse näidu  // Salvestame ultraheli kauguse näidu
- 
  distance = ultrasonic_measure_srf05(pin_trigger);  distance = ultrasonic_measure_srf05(pin_trigger);
- 
- 
- 
  // Tingimusel et antud suund oli vaba kirjutame suuna massiivile vastavasse lahtrisse 1.  // Tingimusel et antud suund oli vaba kirjutame suuna massiivile vastavasse lahtrisse 1.
- 
  // Distantsi kaugus määrata katseliselt.  // Distantsi kaugus määrata katseliselt.
- 
  if(distance>25) suund[i] = 1;  if(distance>25) suund[i] = 1;
- 
- 
- 
  // Kui sel suunal oli takistus kirjutame sinna 0  // Kui sel suunal oli takistus kirjutame sinna 0
- 
  else suund[i] = 0;  else suund[i] = 0;
- 
- 
- 
  // Kontrollime mälust, kas otse olevad suunad on vabad  // Kontrollime mälust, kas otse olevad suunad on vabad
- 
  if (suund[1] | suund[3])  if (suund[1] | suund[3])
- 
  {  {
- 
  dcmotor_drive(0, 1);  // 0 mootor otse  dcmotor_drive(0, 1);  // 0 mootor otse
- 
  dcmotor_drive(1, 1);  // 1 mootor otse  dcmotor_drive(1, 1);  // 1 mootor otse
- 
    // Eelnev sõltub sellest kuidas mootorid on ühendatud    // Eelnev sõltub sellest kuidas mootorid on ühendatud
- 
  sprintf(text,"otse"); // Kirjutame text massiivi 'otse' hilisemaks kontrolliks.  sprintf(text,"otse"); // Kirjutame text massiivi 'otse' hilisemaks kontrolliks.
- 
  }  }
- 
  // Kontrollime mälust, kas parem suund on takistuseta  // Kontrollime mälust, kas parem suund on takistuseta
- 
  else if(suund[0])  else if(suund[0])
- 
  {  {
- 
  dcmotor_drive(0,-1);   // 0 mootor tagasi  dcmotor_drive(0,-1);   // 0 mootor tagasi
- 
  dcmotor_drive(1, 1);   // 1 mootor edasi  dcmotor_drive(1, 1);   // 1 mootor edasi
- 
  sprintf(text,"parem"); // Kirjutame text massiivi parem  sprintf(text,"parem"); // Kirjutame text massiivi parem
- 
  _delay_ms(300);        // Ootame keeramist, pausi pikkus määrata katseliselt  _delay_ms(300);        // Ootame keeramist, pausi pikkus määrata katseliselt
- 
  }  }
- 
  // Kontrollime mälust, kas vasak suund on takistuseta  // Kontrollime mälust, kas vasak suund on takistuseta
- 
  else if(suund[2])  else if(suund[2])
- 
  {  {
- 
  dcmotor_drive(0, 1);   // 0 mootor edasi  dcmotor_drive(0, 1);   // 0 mootor edasi
- 
  dcmotor_drive(1,-1);   // 1 mootor tagasi  dcmotor_drive(1,-1);   // 1 mootor tagasi
- 
  sprintf(text,"vasak"); // Kirjutame text massiivi vasak  sprintf(text,"vasak"); // Kirjutame text massiivi vasak
- 
  _delay_ms(300);        // Ootame keeramist  _delay_ms(300);        // Ootame keeramist
- 
  }  }
- 
  // Kui ükski suund pole vaba jäävad mootorid seisma  // Kui ükski suund pole vaba jäävad mootorid seisma
- 
  else  else
- 
  {  {
- 
  dcmotor_drive(0, 0);  dcmotor_drive(0, 0);
- 
  dcmotor_drive(1, 0);  dcmotor_drive(1, 0);
- 
  sprintf(text,"sein");  sprintf(text,"sein");
- 
  }  }
- 
- 
- 
  }  }
- 
  }  }
- 
  // Kui 0 nupp on vajutatud siis jätab mootorid seisma  // Kui 0 nupp on vajutatud siis jätab mootorid seisma
- 
  else  else
- 
  {  {
- 
  sprintf(text,"seisab");  sprintf(text,"seisab");
- 
  dcmotor_drive(0,0);  dcmotor_drive(0,0);
- 
  dcmotor_drive(1,0);  dcmotor_drive(1,0);
- 
  }  }
- 
  // Teksti kuvamine LCD-le  // Teksti kuvamine LCD-le
- 
  lcd_gfx_goto_char_xy(2, 3);  lcd_gfx_goto_char_xy(2, 3);
- 
  lcd_gfx_write_string(text);  lcd_gfx_write_string(text);
- 
-  
- 
  sprintf(text, "suund %d,%d,%d,%d", suund[0],suund[1],suund[2],suund[3]);  sprintf(text, "suund %d,%d,%d,%d", suund[0],suund[1],suund[2],suund[3]);
- 
  lcd_gfx_goto_char_xy(2, 4);  lcd_gfx_goto_char_xy(2, 4);
- 
  lcd_gfx_write_string(text);  lcd_gfx_write_string(text);
- 
-  
- 
-  
- 
  // Väike paus  // Väike paus
- 
  _delay_ms(50);  _delay_ms(50);
- 
  }  }
- 
 } }
- 
 </code> </code>
et/projects/explorer.1306246262.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
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