Ilona Wrzesień 28, 2020 Udostępnij Wrzesień 28, 2020 Jako laika w temacie nurtuje mnie jedno pytanie. Dlaczego fotorezystor podłączony jest do arduino jako dzielnik napięcia? W moim naiwnym rozumowaniu wygląda to tak. Arduino pracuje z napięciem 5V (pomijamy jakieś małe wachania). Podpinam fotorezystor bezpośrednio do +5V i pinu analogowego. Fotorezystor w swych skrajnych zakresach podaje na pin analogowy albo 0V albo 5V. Po co więc jest dzielnik napięcia?
Gieneq Wrzesień 28, 2020 Udostępnij Wrzesień 28, 2020 @Ilona witam na forum 1 godzinę temu, Ilona napisał: Fotorezystor w swych skrajnych zakresach podaje na pin analogowy albo 0V albo 5V. I tu Cię zaskoczę, fotorezystor w Twojej konfiguracji zawsze podaje 5V, ponieważ niewielkie zmian rezystancji nic tu nie zmieniają. Arduino rejestruje zmiany napięcia czyli potrzebny jest dzielnik napięcia 1
Treker (Damian Szymański) Wrzesień 28, 2020 Udostępnij Wrzesień 28, 2020 @Ilona pamiętaj, że fotorezystor działa podobnie jak rezystor - a rezystor ogranicza prąd, a nie napięcie. Dopiero korzystając z prawa Kirchhoffa, po zbudowanie dzielnika napięcia możemy właśnie wykorzystać rezystory do zmiany napięcia. Zerknij na poniższe dwa filmy: 1
Ilona Październik 19, 2020 Udostępnij Październik 19, 2020 (edytowany) @Treker Przespałam się z tym problemem i ogarnęłam sprawę. Teraz potrafiłabym to wyjaśnić takiemu laikowi jak ja, nawet lepiej niż robią to znawcy tematu Edytowano Październik 19, 2020 przez Ilona
badbit Październik 19, 2020 Udostępnij Październik 19, 2020 Cześć wszystkim. Namęczyłem się z zadaniem 4.6. Działa, ale znając życie, błędy czy niedopatrzenia są więc proszę o sugestie. void setup() { pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); Serial.begin(9600); } // zmienne do odczytu wartosci z fotorezystorow int fotoLewy; int fotoPrawy; void loop() { for (int i = 2; i <= 6; i++){ digitalWrite(i, LOW); // gaszenie diod } fotoLewy = analogRead(A4); fotoPrawy = analogRead(A5); // usredniona wartosc odczytow z fotorezystorow, bo u mnie byly spore roznice int sredniaFoto = (fotoLewy + fotoPrawy) / 2; int jednaDioda; // przechowa wartosc potrzebna do zaswiecenia jednej diody jednaDioda = sredniaFoto/3; // kazdy fotorezystor ma "swoje" 2 diody plus jedna "wspolna" // wiec beda trzy przedzialy i w zaleznosci... int roznicaOdczytow = fotoLewy - fotoPrawy; // ...od roznicy odczytow z fotorezystorow... // ...obliczymy numer diody do zapalenia int ktoraDioda = roznicaOdczytow / jednaDioda; if (ktoraDioda == 0) digitalWrite(4, HIGH); // srodkowa dioda if (ktoraDioda == 1) digitalWrite(5, HIGH); // pierwsza w lewo od srodkowej if (ktoraDioda > 1) digitalWrite(6, HIGH); // skrajna lewa if (ktoraDioda == -1) digitalWrite(3, HIGH); // pierwsza w prawo od srodkowej if (ktoraDioda < -1) digitalWrite(2, HIGH); // skrajna prawa } Czy w ogóle mój tok myślenia jest opdowiedni? 1
Gieneq Październik 20, 2020 Udostępnij Październik 20, 2020 (edytowany) @badbit fajnie że kombinujesz z różnicą sygnałów, idziesz w dobrą stronę. Choć nie do końca rozumiem po co ta średnia, chyba lepiej działać na staych wartościach (progach), bo nie jestem pewny czy możesz teraz ustalić przybliżoną odległość (czy jest coś blisko/daleko). Możesz spróbować obliczyć dla każdej diody odległość (cos jak odległość 2 punktów na płaszczyźnie i na tej podstawie dla każdej diody wyznaczyć świecenie (a nawet jasność jak dasz PWM). Możesz też pozbyć się warunków jak zapakujesz dane w tablice - o tym możesz poczytać w sieci, albo przeszukać komentarze pod tym wątkiem Edytowano Październik 20, 2020 przez Gieneq 1
badbit Październik 22, 2020 Udostępnij Październik 22, 2020 @Gieneq Dzięki za odpowiedź. Chciałem, żeby nie było " na sztywno"; żeby max wartość była obliczana w zależności od naświetlenia. Muszę sprawdzić, bo to faktycznie może bez sensu.
Achtenbob Listopad 2, 2020 Udostępnij Listopad 2, 2020 Cześć, Mam stałe skoki napięcia na Fotorezystorze czy to jest normalne? Wartości skaczą mi w zakresie 150-400 przechodząc powoli od 150 do 400 i odwrotnie przy normalnym świetle. Po zasłonięciu fotorezystora niewiele się zmienia, wartości skaczą wtedy 100-350. Co może być powodem? #define zielonaD 7 int wartoscFoto = 0; void setup() { pinMode(zielonaD, OUTPUT); digitalWrite(zielonaD, LOW); Serial.begin(9600); } void loop() { wartoscFoto = analogRead(A5); if (wartoscFoto < 200) { digitalWrite(zielonaD, HIGH); } else { digitalWrite(zielonaD, LOW); } Serial.println(wartoscFoto); delay(50); } Pozdrawiam
Treker (Damian Szymański) Listopad 3, 2020 Udostępnij Listopad 3, 2020 @Achtenbob nie powinieneś mieć aż takich skoków. Sprawdź dla pewności czy problemem nie jest płytka stykowa (może gdzieś jest słabe połączenie). Oprócz tego, jeśli masz miernik to sprawdź proszę czy rezystor działa poprawnie tj. czy zmienia się jego opór względem oświetlenia. 1
Achtenbob Listopad 3, 2020 Udostępnij Listopad 3, 2020 Ok, wszystko teraz działa. Sprawdziłem sobie miernikiem ciągłości przewodów i okazało się że było kilka wadliwych, teraz wszystko działa. Dzięki. 1
Stark Listopad 12, 2020 Udostępnij Listopad 12, 2020 Witajcie, do dzisiaj nie znalazłem odpowiedzi na zadane przeze mnie tutaj pytanie 21 sierpnia. Ponawiam więc pytanie - dlaczego pętla wykonuje się dwa razy? Odnośnik do postu:
Treker (Damian Szymański) Listopad 12, 2020 Udostępnij Listopad 12, 2020 @Stark wybacz brak odpowiedzi - musiało nam umknąć Problem wynika prawdopodobnie z ustawień Twojego terminala - miałeś tam wybraną opcję, że na końcu danych wysyłany jest znak nowej linii. Jeśli ustawisz tam, aby terminal nie dodawał żadnych znaków na końcu linii to problem zniknie. 1
Stark Listopad 12, 2020 Udostępnij Listopad 12, 2020 @Treker super, dziękuję! Oczywiście nic się nie stało - otrzymałem wtedy odpowiedzi na mój post, jednak nie otrzymałem odpowiedzi na to konkretne pytanie. Czy mógłbyś przybliżyć w jaki sposób to działa? Rozumiem to tak, że pobierana zostaje wartość, którą wpisałem tj. dana liczba po czym wykonuje się pętla i zostaje pobrana kolejna wartość tj. nic przez to, że nastąpiło przejście do kolejnej linii?
Treker (Damian Szymański) Listopad 12, 2020 Udostępnij Listopad 12, 2020 @Stark tak, mniej więcej tak to działa, bo w tym przypadku to przejście do nowej linii jest traktowane jako coś odebranego przez UART 1
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ę »