wojt3k_h Napisano Październik 19, 2020 Udostępnij Napisano Październik 19, 2020 witam mam program działa tylko jest problem bo dysza rozpylająca jest ok 2 cm od czujnika" HC-SR04" wszystko skierowane pionowo w dół. Podsuwam dłoń czujnik czyta że coś się znajduje w odległości mniejszej niż zadana, następuje załączenie pompy tylko ze jak jest wystrzał cieczy to tak jakby sczytywał ze dalej jest dłoń na czujniku i tak zaczyna się zapętlać i tak strzela tryska co jest w programie nie tak prosił bym o pomoc #define potentiometer A0 #define echopin 11 // echo pin #define trigpin 12 // Trigger pin int read_pot =0; unsigned long set_time =0; unsigned long rememTime; float distance_cm; unsigned long ultra_time; int set_cm = 20; int motor = 2; // wyjście silnik int flag=0; void setup(){ Serial.begin(9600); pinMode(potentiometer, INPUT); pinMode (trigpin, OUTPUT); pinMode (echopin, INPUT); pinMode(motor, OUTPUT); delay(200); } void loop(){ ultrasonicRead(); read_pot = analogRead(potentiometer); set_time = map(read_pot, 0, 1023, 1UL, 50UL); Serial.print("Distance :"); Serial.println(distance_cm); Serial.print("Time:"); Serial.println(set_time); if(distance_cm<set_cm && flag==0) { digitalWrite(motor,HIGH); Serial.println("Motor On"); rememTime = millis(); flag=1; } if(distance_cm > set_cm) { flag=0; } if((millis()- rememTime) > set_time) { digitalWrite(motor,LOW); Serial.println("Motor Off"); } delay(100); } void ultrasonicRead() { digitalWrite(trigpin, LOW); delayMicroseconds(2); digitalWrite(trigpin, HIGH); delayMicroseconds(10); ultra_time = pulseIn (echopin, HIGH); distance_cm = ultra_time / 29 / 2; } Cytuj Link do komentarza Share on other sites More sharing options...
szczawiosław Październik 20, 2020 Udostępnij Październik 20, 2020 Ciągły odczyt z czujnika. Wykrycie dłoni powinno "zablokować" odczyty z czujnika do czasu zabrania dłoni (może być to stała wartość którą po prostu zmierzysz). Cytuj Link do komentarza Share on other sites More sharing options...
marek1707 Październik 20, 2020 Udostępnij Październik 20, 2020 Napisz dokładniej, czy problem polega na tym, że: gdy już zabierzesz dłoń to czujnik wciąż ją "widzi" i odpala silnik, albo.. gdy trzymasz dłoń pod dozownikiem to urządzenie wielokrotnie włacza pompkę a powinno tylko raz? Pierwsze wskazuje na jakiś problem ze sprzętem (zakłócanie pracy czujnika przez silnik lub przez strumień tego czegoś co wypływa z dozownika), drugie raczej na braki w algorytmie. Cytuj Link do komentarza Share on other sites More sharing options...
Anonim Październik 23, 2020 Udostępnij Październik 23, 2020 Przepraszam,że się wtrącam ale problem nie jest w programie.Problem jest w zjawiskach fizycznych.Proszę przeczytać załączony pdf.Po przeczytaniu wszystko będzie jasne i klarowne. M-15.pdf Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
matrix0606 Październik 23, 2020 Udostępnij Październik 23, 2020 (edytowany) Żeby rozwiązać ten problem należało by po odczytaniu czujnika włączyć dyszę na określony czas, po tym czasie wyłączyć i odczekać określony czas i dopiero znowu sprawdzać czy czujnik został zasłonięty. Jednym słowem mogło by to wyglądać tak: 1. Sprawdzanie zasłonięcia czujnika 2. Jeśli czujnik zasłonięty to 3. Włączona dysza na określony czas 4. Po czasie z pkt 3 dysza wyłączona 5. Przerwa - czas oczekiwania (pewnie 1sek nawet starczy) 6. Sprawdzanie czy czujnik zasłonięty 7. Jeśli czujnik zasłonięty wracanie do pkt 3 Edytowano Październik 23, 2020 przez matrix0606 Cytuj Link do komentarza Share on other sites More sharing options...
wojt3k_h Październik 25, 2020 Autor tematu Udostępnij Październik 25, 2020 przepraszam dawno mnie nie było bo późno wracałem, dzięki dla niektórych to chwilka napisać taki kod a mógł by ktoś wskazać co dopisać żeby odblokowywało kod po zabraniu dłoni Cytuj Link do komentarza Share on other sites More sharing options...
matrix0606 Październik 25, 2020 Udostępnij Październik 25, 2020 (edytowany) Po pierwsze: - nie wiem czy dobrze przeanalizowałem część kodu ale według mnie ten kawałek kodu nigdy Ci się nie wykona. if((millis()- rememTime) > set_time) { digitalWrite(motor,LOW); Serial.println("Motor Off"); } delay(100); } a jeśli się wykona to powiedz mi dlaczego ? Bo ja uważam jak wyżej. Po drugie: - odczyt czujnika masz prawdopodobnie w funkcji: void ultrasonicRead() więc w tejże funkcji ja bym dopisał to co niżej na końcu, z tymże nie wiem jak działa Ci część sprzętowa więc nie daję sobie włosów obciąć że to będzie działać jak należy. void ultrasonicRead() { digitalWrite(trigpin, LOW); delayMicroseconds(2); digitalWrite(trigpin, HIGH); delayMicroseconds(10); ultra_time = pulseIn (echopin, HIGH); distance_cm = ultra_time / 29 / 2; do { //nie robisz nic }while(digitalRead(echopin)); //ten kawałek kodu - czyli nic - będzie się wykonywało póki na wejściu echopin będzie stan wysoki delay(100); } Edytowano Październik 25, 2020 przez matrix0606 Cytuj Link do komentarza Share on other sites More sharing options...
wojt3k_h Listopad 15, 2020 Autor tematu Udostępnij Listopad 15, 2020 (edytowany) po wstawieniu kodu z while pompka załącza się sama z przerwami Dnia 25.10.2020 o 13:51, matrix0606 napisał: więc w tejże funkcji ja bym dopisał to co niżej na końcu, z tymże nie wiem jak działa Ci część sprzętowa więc nie daję sobie włosów obciąć że to będzie działać jak należy. void ultrasonicRead() { digitalWrite(trigpin, LOW); delayMicroseconds(2); digitalWrite(trigpin, HIGH); delayMicroseconds(10); ultra_time = pulseIn (echopin, HIGH); distance_cm = ultra_time / 29 / 2; do { //nie robisz nic }while(digitalRead(echopin)); //ten kawałek kodu - czyli nic - będzie się wykonywało póki na wejściu echopin będzie stan wysoki delay(100); } Edytowano Listopad 15, 2020 przez wojt3k_h Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!