Skocz do zawartości

Robot z kursu - pilot i omijanie przeszkód


Don_Rosco

Pomocna odpowiedź

Dzień dobry, 
Próbuje wykonać projekt na bazie kursów:
https://forbot.pl/blog/kurs-budowy-robotow-arduino-wstep-spis-tresci-id18935

Zainteresowała mnie łączność IR, którą chciałem połączyć z dołączonymi do kursu czujnikami np. aby po wciśnięciu przycisku na pilocie, robot zaczął cofać, a w momencie zetknięcia się czujnika z przeszkodą wyhamował. Problem tkwi w tym, że zatrzymuje się tylko kiedy trzymam przycisk na pilocie i równocześnie czujnik jest wciśnięty. Czy da się jakoś to zmienić?

Pozdrawiam

#define L_SIDE_SENSOR A0
#define R_SIDE_SENSOR A1


#include <RC5.h>
 
#define L_PWM 5
#define L_DIR 4
#define R_PWM 6
#define R_DIR 9
#define PWM_MAX 165
 
#define BUZZER 10
#define LED 13
#define TSOP_PIN 3
 
RC5 rc5(TSOP_PIN); 
byte address; 
byte command;
byte toggle;
 
void setup() {
  
  pinMode(L_DIR, OUTPUT);
  pinMode(R_DIR, OUTPUT);
  pinMode(L_PWM, OUTPUT);
  pinMode(R_PWM, OUTPUT);
 
  //Konfiguracja pozostalych elementow
  pinMode(BUZZER, OUTPUT);
  digitalWrite(BUZZER, 0); //Wylaczenie buzzera  
  pinMode(LED, OUTPUT); 
  digitalWrite(LED, 0); //Wylaczenie diody
 
  Serial.begin(9600);
}
 void stopMotors() {
  analogWrite(L_PWM, 0); //Wylaczenie silnika lewego
  analogWrite(R_PWM, 0); //Wylaczenie silnika prawego
 }
  void leftMotor(int V) {
  if (V > 0) { //Jesli predkosc jest wieksza od 0 (dodatnia)
    V = map(V, 0, 100, 0, PWM_MAX);
    digitalWrite(L_DIR, 0); //Kierunek: do przodu
    analogWrite(L_PWM, V); //Ustawienie predkosci 
  } else {
    V = abs(V); //Funkcja abs() zwroci wartosc V  bez znaku
    V = map(V, 0, 100, 0, PWM_MAX);
    digitalWrite(L_DIR, 1); //Kierunek: do tyłu
    analogWrite(L_PWM, V); //Ustawienie predkosci    
  }
}
 
void rightMotor(int V) {
  if (V > 0) { //Jesli predkosc jest wieksza od 0 (dodatnia)
    V = map(V, 0, 100, 0, PWM_MAX);
    digitalWrite(R_DIR, 0); //Kierunek: do przodu
    analogWrite(R_PWM, V); //Ustawienie predkosci 
  } else {
    V = abs(V); //Funkcja abs() zwroci wartosc V  bez znaku
    V = map(V, 0, 100, 0, PWM_MAX);
    digitalWrite(R_DIR, 1); //Kierunek: do tyłu
    analogWrite(R_PWM, V); //Ustawienie predkosci    
  }
}


  
  void loop() {
if (rc5.read(&toggle, &address, &command)){
     switch(command) {
      case 2: 
        leftMotor(-40);
        rightMotor(-40);
        if(digitalRead(L_SIDE_SENSOR) == LOW ||digitalRead(R_SIDE_SENSOR)==LOW) {
          stopMotors();
        }
      break;
     }
   }

 }

 

Link do komentarza
Share on other sites

@Don_Rosco witam na forum 🙂

Wszystko działa poprawnie, bo Twój program właśnie tak został napisany. W tej chwili wszystko wykonuje się tylko, gdy przycisk jest wciśnięty. Oczywiście możesz łatwo to zmienić nie wiem tylko jak dokładnie chcesz, aby to działało. Czy robot po wciśnięciu przycisku ma cofać tak długo, aż najedzie na przeszkodę, wtedy ma się zatrzymać i to koniec?

  • Lubię! 1
Link do komentarza
Share on other sites

@Don_Rosco w takim razie musisz trochę rozbudować program, bo w tej chwili faktycznie robot ma jechać tylko, gdy przycisk jest wciśnięty. Najprościej możesz to zrobić za pomocą pętli while. Zrób tak, że po wciśnięciu przycisku robot zaczyna jechać w pętli while, z której wychodzi, gdy jeden z czujników dotknie przeszkody,

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.