Skocz do zawartości

Projekt do nauki najmłodszych - Wykrywacz przeszkód


Pomocna odpowiedź

Napisano

 Przedstawiony przeze mnie dzisiejszy projekt może i nie należy to najbardziej skomplikowany za to przysłużył się w celu edukacji najmłodszych. 
Dziś z pomocą dziewięciolatka został skonstruowany mały wykrywacz przeszkód w oparciu o ESP32. Za detekcję posłużył czujnik przeszkód na podczerwień. Jako sygnalizację przeszkody, użyliśmy brzęczyka i diody LED, które współgrały ze sobą w taki sposób, że 3 piknięcia brzęczyka odpowiadały trzem błyskom diody LED. Młody miał ogrom frajdy w łączeniu na płytce stykowej, a ja miałem radochę, że rośnie nam elektronik.


 image.thumb.png.08d1292389e539f103b29eac90ae25ae.png

Zdj. 1 Cały układ na płytce stykowej

image.thumb.png.e9a736f9db46db64d978e8602a1f1a99.png

Zdj. 2 Użyty mikrokontroler

image.thumb.png.262f01e1da89b4bb53294bb16937ae54.png

Zdj.3 Czujnik na podczerwień

image.thumb.png.49983b09cfabf58aacb69f8196eeca3c.png

Zdj.4 Dioda z rezystorem 

Aby całość ze sobą współpracowała, stworzyłem kod w aplikacji ArduinoIDE.

// Definicja pinów
const int PIN_CZUJNIKA = 17;  
const int PIN_BUZZERA = 21;  
const int PIN_LED = 22;       

void setup() {
  Serial.begin(115200);
  
  // Konfiguracja pinów
  pinMode(PIN_CZUJNIKA, INPUT);
  pinMode(PIN_BUZZERA, OUTPUT);
  pinMode(PIN_LED, OUTPUT);
  
  // Stan początkowy: wszystko wyłączone
  digitalWrite(PIN_BUZZERA, LOW);
  digitalWrite(PIN_LED, LOW);
}

void loop() {
  // Odczyt stanu czujnika (LOW = wykryto przeszkodę)
  int stanCzujnika = digitalRead(PIN_CZUJNIKA);

  if (stanCzujnika == LOW) {
    Serial.println("Przeszkoda! Alarm wizualny i dźwiękowy...");

    // Pętla wykonująca 3 sygnały (Buzzer + LED)
    for (int i = 0; i < 3; i++) {
      // WŁĄCZ buzzer i diodę
      digitalWrite(PIN_BUZZERA, HIGH); 
      digitalWrite(PIN_LED, HIGH);
      
      delay(100); // Czas trwania sygnału
      
      // WYŁĄCZ buzzer i diodę
      digitalWrite(PIN_BUZZERA, LOW);  
      digitalWrite(PIN_LED, LOW);
      
      delay(100); // Przerwa między sygnałami
    }

    
    while (digitalRead(PIN_CZUJNIKA) == LOW) {
      delay(50);
    }
    
    Serial.println("Droga wolna.");
  }
}

 

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