Scorpo Napisano Styczeń 6, 2022 Udostępnij Napisano Styczeń 6, 2022 (edytowany) Dzień dobry, Piszę w sprawie małego układu, nad którym pracuję. Zasada działania ma być taka: czujnik przepływu cieczy YF-S402 ma wysyłać sygnał (nie interesuje mnie dokładna wartość tylko fakt, że coś przepływa) do mikrokontrolera. W momencie otrzymania sygnału z czujnika program powinien włączyć przekaźnik i buzzer (póki co w prototypie jest dioda LED niebieska i żółta). Po zatrzymaniu przepływu mikrokontroler ma wrócić do stanu początkowego (wyłączyć przekaźnik i buzzer). Dodam tylko, że nie jestem super obeznany z programowaniem, ale póki co poczyniłem coś takiego: //Program jest wgrywany przy pomocy ArduinoUno oraz "programatora" DIY na ATTiny45-20PU #include <avr/wdt.h> #define PRZEKAZNIK 0 //W obwodzie dioda LED niebieska #define BUZZER 1 //W obwodzie dioda LED żółta #define flowsensor A1 //Czujnik przepływu cieczy YF-S402 int czujnik; void setup() { wdt_disable(); //Wyłącz WatchDog pinMode(PRZEKAZNIK, OUTPUT); pinMode(BUZZER, OUTPUT); pinMode(flowsensor, INPUT); } void loop() { czujnik=analogRead(flowsensor); //Zbierz informację z pinu A1 Arduino (ATTiny pin 7) //135 - 2700 - zakres impulsów czujnika od 0,3 l/h do 6 l/h if (czujnik > 2) //Załącz w momencie, gdy przepływ będzie większy od 2V z czujnika { digitalWrite(PRZEKAZNIK, HIGH); digitalWrite (BUZZER, HIGH); delay(10); } else { digitalWrite(PRZEKAZNIK, LOW); digitalWrite(BUZZER, LOW); delay(10); } } Linijka z WD jest tam dlatego, że program jest wgrywany na ATTiny 45-20PU (wgrywam program (jak i bootloader) przez Arduino przez prosty programator DIY) i miałem problem z migającą ciągle diodą na pinie 0 Arduino (pin 5 ATTiny). Mój problem polega na tym, że o ile diody zapalają się, gdy czujnik jest w ruchu o tyle migają dosyć szybko i nie mogę uzyskać efektu ciągłego świecenia. Dodatkowo po zatrzymaniu czujnika czasami gasną, a czasami nie. Szczerze mówiąc nie mam już za bardzo pomysłu (chociaż przypadek wydaje się prosty, tylko nie umiem na to chyba "wpaść" z braku wiedzy 😉 ). Prosiłbym o jakieś sugestie jak to można naprawić (ew. czy w ogóle dobrze podszedłem do tematu z kodem). Dodam, że "programator" ma kondensator 10uF między GND i Resetem Arduino podczas wgrywania. W razie czego wstawiam też mojego pająka na płytce prototypowej (rezystory do LED mają po 1kΩ, rezystor między Reset a VCC ma 47kΩ, kondensator 10nF, dodatkowo, czego nie ma na obrazku, jest jeszcze rezystor 10kΩ między sygnałem (żółty kabelek) z czujnika a VCC- wg zaleceń producenta) : Z góry dziękuję bardzo za odpowiedzi. Pozdrawiam serdecznie! Edytowano Styczeń 6, 2022 przez Scorpo Link do komentarza Share on other sites More sharing options...
farmaceuta Styczeń 6, 2022 Udostępnij Styczeń 6, 2022 (edytowany) Ale to jest czujnik dajacy napiecie na wyjsciu? Czy czujnik hallotronowy? Jesli to drugie to pasowalo by do twojego problemu...rowniez raz gasnace a raz nie ledy tez pasuja...ogolnie kod wporzadku...sprawdz za pomoca seriala co tam uzyskujesz na tym pinie analogowym, dopiero wtedy cos mozna doradzic Edytowano Styczeń 6, 2022 przez farmaceuta Link do komentarza Share on other sites More sharing options...
Scorpo Styczeń 6, 2022 Autor tematu Udostępnij Styczeń 6, 2022 (edytowany) To jest czujnik hallotronowy. Generalnie udało mi się chyba rozwiązać problem (szukam rozwiązania od wczoraj i chwilę po napisaniu postu chyba znalazłem rozwiązanie 😄 ). Przerobiłem kod następująco: //Program jest wgrywany przy pomocy ArduinoUno oraz "programatora" DIY na ATTiny45-20PU #include <avr/wdt.h> #define PRZEKAZNIK 0 //W obwodzie dioda LED niebieska #define BUZZER 1 //W obwodzie dioda LED żółta #define flowsensor A1 //Czujnik przepływu cieczy YF-S402 int czujnik=0; void setup() { wdt_disable(); //Wyłącz WatchDog pinMode(PRZEKAZNIK, OUTPUT); pinMode(BUZZER, OUTPUT); pinMode(flowsensor, INPUT); } void loop() { czujnik=analogRead(flowsensor); //Zbierz informację z pinu A1 Arduino (ATTiny pin 7) if (czujnik > 2) { digitalWrite(PRZEKAZNIK, HIGH); digitalWrite (BUZZER, HIGH); delay(czujnik); } //Zmieniłem czas przerwy zależny od czujnika else { digitalWrite(PRZEKAZNIK, LOW); digitalWrite(BUZZER, LOW); delay(czujnik); } //Tu podobnie jak wyżej } I uzyskałem efekt, że diody zapalają (światłem ciągłym) się w momencie gdy dmuchnę w czujnik. Jak przestaje się kręcić to gasną. Została w sumie jedna rzecz- w momencie gdy czujnik jest zatrzymany diody się nie świecą. Jednak gdy wezmę go w rękę i lekko pochylę (słychać jak wirnik w środku się "obija") diody się zapalają (mimo tego, że nie dmuchałem w czujnik) i nie chcą już zgasnąć. Pomaga dopiero przedmuchanie czujnika. Czym to może być spowodowane? Edytowano Styczeń 6, 2022 przez Scorpo Link do komentarza Share on other sites More sharing options...
farmaceuta Styczeń 6, 2022 Udostępnij Styczeń 6, 2022 (edytowany) Jak hallotron to nie uzywaz analogRead a zwyklego digitalRead bo czytasz stan a nie wartosc analogowa...kolejna sprawa to taka ze czujnik moze sie zatrzymac na stanie LOW lub HIGH, wiec trzeba sprawdzac czy czujnik sie juz zatrzymal i zgadic led bez znaczenia czy masz 0 czy 1... Edytowano Styczeń 6, 2022 przez farmaceuta 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
Scorpo Styczeń 6, 2022 Autor tematu Udostępnij Styczeń 6, 2022 Dzięki za odpowiedź. Po lekkim przerobieniu wygląda to tak: //Program jest wgrywany przy pomocy ArduinoUno oraz "programatora" DIY na ATTiny45-20PU #include <avr/wdt.h> #define PRZEKAZNIK 0 //W obwodzie dioda LED niebieska #define BUZZER 1 //W obwodzie dioda LED żółta #define flowsensor 2 //Czujnik przepływu cieczy YF-S402 int czujnik=0; void setup() { wdt_disable(); //Wyłącz WatchDog pinMode(PRZEKAZNIK, OUTPUT); pinMode(BUZZER, OUTPUT); pinMode(flowsensor, INPUT); } void loop() { czujnik=digitalRead(flowsensor); //Zbierz informację z pinu 2 Arduino (ATTiny pin 7) if (czujnik == HIGH && czujnik>0) { digitalWrite(PRZEKAZNIK, HIGH); digitalWrite (BUZZER, HIGH); delay(czujnik); } else { digitalWrite(PRZEKAZNIK, LOW); digitalWrite(BUZZER, LOW); delay(czujnik); } } Po przerobieniu nadal mam ten sam problem- diody raz gasną a raz świecą po zatrzymaniu czujnika. Nie wpadłem na inny pomysł jak można by te diody zgasić (to co pisałeś w odpowiedzi). Masz może jakąś radę? Dodatkowo tak jak wcześniej diody świeciły ciągłym światłem (przy poprzednim kodzie), tak teraz mrugają w zależności od szybkości przepływu. Pozdrawiam serdecznie Link do komentarza Share on other sites More sharing options...
farmaceuta Styczeń 6, 2022 Udostępnij Styczeń 6, 2022 #include <avr/wdt.h> #define PRZEKAZNIK 0 //W obwodzie dioda LED niebieska #define BUZZER 1 //W obwodzie dioda LED żółta #define flowsensor 2 //Czujnik przepływu cieczy YF-S402 bool czujnik = 0; bool czujnik1 = 0; bool stan = 0; void setup() { wdt_disable(); //Wyłącz WatchDog pinMode(PRZEKAZNIK, OUTPUT); pinMode(BUZZER, OUTPUT); pinMode(flowsensor, INPUT); czujnik = digitalRead(flowsensor); czujnik1 = czujnik; } void loop() { czujnik=digitalRead(flowsensor); //Zbierz informację z pinu 2 Arduino (ATTiny pin 7) if (czujnik != czujnik1) { digitalWrite(PRZEKAZNIK, HIGH); digitalWrite (BUZZER, HIGH); czas = millis(); czujnik1 = czujnik; stan = 1; } if (millis() - czas > 500UL && stan == 1) { digitalWrite(PRZEKAZNIK, LOW); digitalWrite(BUZZER, LOW); stan = 0; } } Teoretycznie powinno dzialac, choc doskonalosci temu kodowi nie da sie zarzucic...lepiej bylo by liczyc ilosc impulsow w stalym interwale, wtedy wiadomo jaki przeplyw a nie tylko czy plynie, czy nie...no ale o to Ci cgodzilo poki co.. Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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ę »