Skocz do zawartości

Kurs budowy robotów - #6 - Światłolub (sterowanie latarką)


Pomocna odpowiedź

Dnia 16.06.2023 o 17:50, LaKukaraczan napisał:

Niestety czujniki pomimo pracy w identycznych warunkach pokazują zupełnie różne wartości. Zamieniałem je miejscami, najwidoczniej problem leży po stronie jednego czujnika. Jaką rezystancję mają fotorezystory zamontowane w czujnikach? Spróbuję wlutować nowy.  

Przyczyna odnaleziona. Wylutowałem fotorezystory z czujników, już na pierwszy rzut oka się różnią. Pomiary multimetrem to potwierdziły - otrzymałem czujniki z fotorezystorami o różnej rezystancji. Pomiary zostały dokonane w identycznych warunkach. Załączam zdjęcia. 

prawy.jpglewy.jpg

foto.jpg

@LaKukaraczan dziękuję za zgłoszenie i przepraszam za kłopot. Taka sytuacja nie powinna mieć miejsca. Sprawdzimy ten temat. Jeśli chcesz uruchomić układ szybko to możesz uratować tę sprawę programowo za pomocą funkcji map (skalując odpowiednio odczyty z czujników). Niezależnie od tego odezwij się do sprzedawcy (zapewne do Botlandu) i zgłoś reklamację. Otrzymasz nowe czujniki 🙂 

  • 1 rok później...

Cześć,

Tutaj moje rozwiązanie do zadania 6.1 oraz filmik:
 

#define L_SIDE_SENSOR A0
#define R_SIDE_SENSOR A1

#define L_PWM 5
#define L_DIR 4
#define R_PWM 6
#define R_DIR 9
#define PWM_MAX 165

#define BUZZER 10

#define R_LIGHT_SENSOR A0
#define L_LIGHT_SENSOR A1

#define boardLED 13


bool isStandby = true;
bool isArmed = false;
void setup() {

  // Define engines
  pinMode(L_DIR, OUTPUT);
  pinMode(R_DIR, OUTPUT);
  pinMode(L_PWM, OUTPUT);
  pinMode(R_PWM, OUTPUT);
  

  // Define buzzer
  pinMode(BUZZER, OUTPUT);
  digitalWrite(BUZZER, 0); // Turn off buzzer

  randomSeed(analogRead(5)); // Generator initialization

  // Define 13 led
  pinMode(boardLED, OUTPUT);


}

void loop() {
  int leftRead = analogRead(L_LIGHT_SENSOR);
  int rightRead = analogRead(R_LIGHT_SENSOR);
  int difference = leftRead - rightRead;

  standbyLED();

  if ((difference > 400 || difference < -400)){
      for (int i = 0; i < 3; i++){
        digitalWrite(BUZZER, HIGH);
        delay(300);
        digitalWrite(BUZZER, LOW);
        delay(300);
      }

      isArmed = true;
      isStandby = false;
  }

 if (isArmed){

   if (difference > 50){ // If difference is more than 50
     leftMotor(30);  // Turn right
     rightMotor(-30);
    } else if (difference < -50){ // If difference is less than 50
     leftMotor(-30); // Turn left
     rightMotor(30);
     } else{
     leftMotor(30);
     rightMotor(30);
     }
 }

}



void leftMotor(int V){
    if(V > 0) {// If a number is positive
    V = map(V, 0, 100, 0, PWM_MAX);
    digitalWrite(L_DIR, 0); // Set direction
    analogWrite(L_PWM, V); // Set velocity
  } else {
    V = abs(V); // return a positive number
    V = map(V, 0, 100, 0, PWM_MAX);
    digitalWrite(L_DIR, 1); // Set direction backward
    analogWrite(L_PWM, V); // Set velocity
  }
}

void rightMotor(int V){
  if (V > 0){
    V = map(V, 0, 100, 0, PWM_MAX);
    digitalWrite(R_DIR, 1);
    analogWrite(R_PWM, V+11);  // Add 9 to even the engines velocity
  } else{
    V = abs(V);
    V = map(V, 0, 100, 0, PWM_MAX);
    digitalWrite(R_DIR, 0);
    analogWrite(R_PWM, V+11); // Add 9 to even the engines velocity
  }
}

void stopMotors() {
  analogWrite(L_PWM, 0);
  analogWrite(R_PWM, 0);
}

void standbyLED(){
  if (isStandby){
    digitalWrite(boardLED, HIGH);
    delay(50);
    digitalWrite(boardLED, LOW);
    delay(50);
  }
}

https://streamable.com/pvzrdi?src=player-page-share

  • Lubię! 1

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...