Skocz do zawartości

Pomocna odpowiedź

Napisano

Witam,

Zaciekawiony ostatnim wpisem na forum na temat lampki sterowanej gestami, postanowiłem, że ja również wykonam taki projekt. Niestety ze względu na brak niektórych komponentów, mój projekt wyglądać będzie trochę inaczej. I napotkałem następujący problem:

Czujnik HC-SR04 co pół sekundy wykonuję pomiar. Gdy odległość będzie mniejsza od 30cm, arduino ma dać prąd na odpowiednim wyjściu, i włączyć przekaźnik. Następnie ma czekać znowu na na mniej niż 30 cm i go wyłączyć. I nie wiem w jaki sposób to zrobić. Napsałem kod, używając if ale gdy odległość wynosi mniej niż 30 zapalają się, i za chwilę gasną.

Podpowiedzcie, jak należy to zrobić?

Miałem dokładnie ten sam pomysł co Ty . Udało mi się napisać kod który włącza i wyłącza lampkę przez tranzystor. Całość działa tak że gdy czujnik wykryje coś w podanej odległości  to zapala lampkę następnym razem ją gasi. 

Kod:

#define trigPin 12
#define echoPin 11
#define led 13
#define przycisk 10
bool stan = 0;
bool stanP = 0;
int odleglosc = 15;
void setup() {
  Serial.begin (9600);
  pinMode(przycisk,INPUT_PULLUP);
  pinMode(trigPin, OUTPUT); 
  pinMode(echoPin, INPUT); 
  pinMode(led,OUTPUT);
}
 
void loop() { 
  
  if(digitalRead(przycisk) == LOW && stanP == 0){
   odleglosc = 70;
    stanP = 1;
    delay(500);
  }else if(digitalRead(przycisk) == LOW && stanP == 1){
   odleglosc = 15;
    stanP = 0;
    delay(500);
  }
  


  long czas, dystans;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
 
  czas = pulseIn(echoPin, HIGH);
  dystans = czas / 58;


 
   if(dystans < odleglosc && stan == 0){
    digitalWrite(led,HIGH);
   stan = 1;
   delay(300);
  }
   else if(dystans < odleglosc && stan == 1){
    digitalWrite(led,LOW);
    stan = 0;
    delay(300);
  }

}

Jeśli masz jakieś pytania do kodu to pytaj.🙂

  • Lubię! 1

Ja również zrobiłem sobie lampkę ale dotykową na ESP32, bo ma piny z wbudowanym czujnikiem dotyku. Żarówkę przerobiłem na prąd stały, żeby mieć PWM i móc ją ściemniać.

Lampka przy krótkim dotyku zapala się lub gaśnie, przy przytrzymaniu "płynnie" jaśnieje. Fajne jako lampka nocna, bo można na oślep ją wymacać i zapala się delikatnie nie oślepiając.

 

#define LED_IN1 15 //PIN MINUSA
#define LED_IN2 2 //PIN PLUSA
int touchAvrg;
int onoff;
int i;
int a;
const int threshold = 16;
const int freq = 5000;     //Wartości dla
const int ledChannel = 0;  //PWM na ESP32
const int resolution = 8;  //Bo na ESP32 nie działa zwykłe AnalogWrite

void setup() {
  ledcSetup(ledChannel, freq, resolution);
  ledcAttachPin(LED_IN2, ledChannel);
  pinMode(LED_IN1, OUTPUT);
  digitalWrite(LED_IN1, LOW);
  onoff = 0;
}

void loop() {
  touchAvrg = 0;
  for(int a=0; a< 20; a++){ // Zbieranie wartości dla uśrednienia 20 wyników z pomiarów z PINu dotykowego
    touchAvrg += touchRead(4);
  }
  touchAvrg = touchAvrg / 20;
  if (touchAvrg < threshold) {
    delay(250);
    if (touchRead(4) < threshold) {
      i = 0;
      while (touchRead(4) < threshold && i < 255) { //Dłuższe przytrzymanie lampki stopniowo podnosi jej jasność
        ledcWrite(ledChannel, i);
        delay(20);
        i++;
      }
      onoff = 1;
    }
    else {
    switch (onoff) { //Krótkie dotknięcie lampki zapala ją z minimalną mocą lub gasi
      case 0:
          ledcWrite(ledChannel, 30);
          onoff = 1;
          break;
      case 1:
          ledcWrite(ledChannel, 0);
          onoff = 0;
          i = 0;
          break;
    }
  }
}
}

 

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