Ostatnio dużo gram z Raspberry Pi. Ale mam problem.
Kiedy ustawiam pin wejściowy, aby sprawdzić, czy elektryczność jest do niego wysyłana, czy nie, daje to raczej niestabilne odpowiedzi.
Kilka uwag, które poczyniłem w celu wyjaśnienia mojego problemu:
Kiedy podłączam obwód, a prąd przepływa do pinu wejściowego, wartość, którą mi daje, jest zawsze PRAWDA lub 1.
Kiedy przerywam obwód przez usunięcie diody LED, która jest jego częścią (kiedy wartość wejściowa powinna wynosić 0), daje mi to losowe wartości, przesuwając się między 0 a 1.
Kiedy usuwam wszystkie kable z mojego Pi, daje mi to stałą wartość 0
Jeśli mam wszystkie kable GPIO usunięte, to daje mi wartość 0, ale jeśli po prostu dotknę pinu wejściowego kawałkiem elektrody prowadzącej metal (prowadząc do niczego na drugim końcu), zacznie się od losowych wartości. Nie podaje mi losowych wartości, chyba że mam też coś podłączonego do styku wyjściowego. Nigdzie nie musi prowadzić, wystarczy dotknąć pinu wyjściowego. A jakiś inny kawałek metalu musi dotykać styku wejściowego. Brak połączenia między nimi.
Zastanawiam się, dlaczego zaczyna mi dawać losowe wartości, gdy pin wejściowy GPIO dotyka dowolnego metalu.
I jeszcze bardziej interesujące, dlaczego daje mi spójne 1 lub PRAWDZIWE, kiedy faktycznie wysyłam do niego prąd?
Odpowiedzi:
Problem
To prawda, ale co się stanie, gdy masa zostanie podłączona do pinu wejściowego GPIO? Wartość, którą by dawała, zawsze byłaby fałszywa .
Gdy nic nie jest podłączone, pin jest w stanie „pływającym”, a wyjście nie jest przewidywalne. jest w stanie nieokreślonym, nie jest ani 0, ani 1, a wykryta wartość może dziwnie się zmieniać, stąd losowe wyniki. W elektronice jest to znane jako trzeci stan .
Więcej szczegółów z artykułu z Wikipedii :
Ogólne rozwiązanie
Rozwiązaniem jest rezystor obniżający . Pomyśl o tym jako o dodatkowym składniku, który nic nie robi, gdy linia otrzymuje 0 lub 1. Ale kiedy linia jest bezczynna, nagle zaczyna działać i daje 0.
Rozwiązanie Raspberry Pi
Na szczęście dla ciebie Rpi ma wbudowane menu rozwijane, musisz aktywować go programowo. Oto skrypt Pythona:
Dygresja
Nie podłączaj zasilania bezpośrednio do styku, ponieważ byłoby to niebezpieczne! Upewnij się, że w obwodzie jest wystarczająca rezystancja. Nigdy też nie podłączaj zasilania 5 V bezpośrednio do GPIO, ponieważ akceptuje tylko 3,3 V.
źródło