Automatyczne włączenie pinu przy napięciu niższym niż 11V - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica) +--- Wątek: Automatyczne włączenie pinu przy napięciu niższym niż 11V (/watek-automatyczne-w%C5%82%C4%85czenie-pinu-przy-napi%C4%99ciu-ni%C5%BCszym-ni%C5%BC-11v) Strony:
1
2
|
Automatyczne włączenie pinu przy napięciu niższym niż 11V - Pankracy - 24-12-2018 Witam Mam problem z następującym programem: ---------------------------------------------------------------------------------- int odczytanaWartosc = 0; void setup() { pinMode(8, OUTPUT); } void loop() { odczytanaWartosc = analogRead(A4); delay(3000); if (odczytanaWartosc < 717) { //wartość mniejsza od 11V, z dzielnikiem 3,51V digitalWrite(8, HIGH); //Włączenie delay(25200000); //Włączony przez 7h digitalWrite(8, LOW); } } ---------------------------------------------------------------------------------- Program ma podać napięcie na pinie cyfrowym 8, w momencie gdy na analogowym pinie 4 będzie wartość mniejsza niż 717, a więc niższa niż 3,51V (11V na wejściu). W celu obniżenia badanego napięcia skonstruowałem dzielnik oparty o rezystory 10k i 4,7k. Niestety, pomimo niespełnionego warunku, wyjście 8 podaje napięcie . Aby się upewnić czy nie robię gdzieś błędu z podłączeniem, postanowiłem zewrzeć pin A4 z pinem 5V sekcji zasilającej Arduino. Jak dobrze rozumuję, wartość mierzona na pinie analogowym powinna wynosić 1024. Niestety pin 8 jest ciągle włączony. Jest w stanie mi ktoś podpowiedzieć co jest nie tak z tym programem ? Do stworzenia programu posiłkowałem się poradnikiem o budowie woltomierza Pozdrawiam i dzięki za odpowiedź RE: Automatyczne włączenie pinu przy napięciu niższym niż 11V - es2 - 24-12-2018 Gdy sie czyta dane z ADC, o ile to możliwe, wynika należy uśredniać. Kod: delay(25200000); Wyślij na uart wartość którą przyjmuje "odczytanaWartosc " i dowiesz się, czy ADC pracuje poprawnie czy nie. Podobnie wyślijj na UART jakiś komunikat gdy wykona sie warunek ale koniecznie przetd tym dziwnie dużym delay. RE: Automatyczne włączenie pinu przy napięciu niższym niż 11V - Pankracy - 24-12-2018 Otworzyłem monitor portu szeregowego. Wartości utrzymują stałą wartość wynoszącą 1023. RE: Automatyczne włączenie pinu przy napięciu niższym niż 11V - es2 - 24-12-2018 (24-12-2018, 02:38)Pankracy napisał(a): Otworzyłem monitor portu szeregowego. Teraz sprawdź jakie napięcie masz na wejściu ADC. RE: Automatyczne włączenie pinu przy napięciu niższym niż 11V - Pankracy - 24-12-2018 Na porcie jest napięcie 5V, pociągnąłem je bezpośrdenio z płytki. Przy przełączeniu na 3,3V wartości wynoszą 675. RE: Automatyczne włączenie pinu przy napięciu niższym niż 11V - es2 - 24-12-2018 (24-12-2018, 02:51)Pankracy napisał(a): Na porcie jest napięcie 5V, pociągnąłem je bezpośrdenio z płytki. Czyli ADC pracuje prawidłowo. RE: Automatyczne włączenie pinu przy napięciu niższym niż 11V - kaczakat - 24-12-2018 Pokaż schemat jak podłączyłeś te rezystory, a jak wpisujesz jakąkolwiek liczbę to ona będzie int, czyli w zakresie 32000, jak chcesz większą liczbę to napisz delay(25200000UL); Używanie takich dużych wartości w delay i tak może być bez sensu, sam sobie przetestuj do jakiej wartości ma to sens. Daj czas procesorowi na uruchomienie, dodaj delay(10); przed pomiarem. Wartość odczytuj kilka razy i wyciągaj średnią. Lepiej jednak zapoznać się z innymi sposobami zarządzania czasem, polecam kurs i millis: https://forbot.pl/blog/kurs-arduino-srodowisko-jak-zaczac-programowac-id936 . RE: Automatyczne włączenie pinu przy napięciu niższym niż 11V - es2 - 24-12-2018 (24-12-2018, 03:15)kaczakat napisał(a): Daj czas procesorowi na uruchomienie, dodaj delay(10); przed pomiarem.AVR na lampach jest i musi sie nagrzać? (24-12-2018, 03:15)kaczakat napisał(a): Używanie takich dużych wartości w delay i tak może być bez sensuPisałem już o tym, po co powtażać zwłaszcza jak tego się nie uzasadnia? (24-12-2018, 03:15)kaczakat napisał(a): Wartość odczytuj kilka razy i wyciągaj średnią.O tym też pisałem. Jak się potocznie nazywa osobę, która powtarza po innych? RE: Automatyczne włączenie pinu przy napięciu niższym niż 11V - Pankracy - 24-12-2018 Dodałem uśrednianie. Teraz program wygląda następująco: -------------------------------------------------------------------------- int odczytanaWartosc = 0; int OW1 = 0; int OW2 = 0; int OW3 = 0; int OW4 = 0; int OW5 = 0; void setup() { pinMode(8, OUTPUT); } void loop() { OW1 = analogRead(A4); delay(10); OW2 = analogRead(A4); delay(10); OW3 = analogRead(A4); delay(10); OW4 = analogRead(A4); delay(10); OW5 = analogRead(A4); delay(10); odczytanaWartosc = (OW1+OW2+OW3+OW4+OW5)/5 ; if (odczytanaWartosc < 717) { //wartość mniejsza od 11V, z dzielnikiem 3,51V digitalWrite(8, HIGH); //Włączenie delay(10000); //Włączony przez 10s digitalWrite(8, LOW); } } ---------------------------------------------------------------------------- Sprawdziłem czy to uśrednianie daje radę i w monitorze portu wskakują wartości 5115 jak nie mam dzielnika "5". Z dzielnikiem normalnie wartości 1023 wskakują. W moim programie natomiast niczego to nie zmienia: -Jak mam zwarte piny A4 i 5V to pin8 jest w stanie wysokim. -Natomiast jak rozłączę je na chwilę, to pin8 wyłącza się na 10s. -Jak zamieniam "<" z ">" to co 10s na ułamek sekundy pin8 podaje napięcie(przy zwartych A4 i 5V) RE: Automatyczne włączenie pinu przy napięciu niższym niż 11V - es2 - 24-12-2018 Uśrednianie zrobiłeś beznadziejnie. Co do Cytat:-Jak mam zwarte piny A4 i 5V to pin8 jest w stanie wysokim.to wynika, że warunek Kod: if (odczytanaWartosc < 717) Jeszcze raz napiszę: Cytat:Wyślij na uart wartość którą przyjmuje "odczytanaWartosc " (...) przy czym, za "if (odczytanaWartosc < 717)" wyświetlaj "odczytanaWartosc " a nie tylko informację, ze warunek wykonał się. Pokaż co wyświetlił terminal gdy na A4 podajesz 5V oraz co gdy zewrzesz z GND. |