Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Piny wejścia/wyjścia ogólnego przeznaczenia (GPIO) mogą być skonfigurowane do odbierania sygnałów elektrycznych jako wejście. Na najbardziej podstawowym poziomie jest to przydatne do scenariuszy wykrywających otwieranie/zamykanie obwodu. Takie obwody mogą zawierać przyciski, przełączniki dźwigniowe, przełączniki kontaktronowe, wyłączniki ciśnieniowe i inne urządzenia, które reprezentują wartości binarne (włącz/wyłącz) poprzez zamknięcie obwodu.
W tym samouczku użyjesz .NET i pinów GPIO urządzenia Raspberry Pi do monitorowania otwierania i zamykania obwodu.
Wymagania wstępne
- Komputer z jedną płytą (ARMv7 lub nowszy) oparty na architekturze ARM (SBC)
- Przewody skoczkowe
- Płytka stykowa (opcjonalnie)
- Moduł rozszerzający GPIO dla Raspberry Pi (opcjonalnie)
- .NET SDK 10 lub nowszy
Uwaga
Ten samouczek został napisany przy założeniu, że docelowe urządzenie to Raspberry Pi. Jednak ten samouczek może być używany dla dowolnego systemu Linux opartego na protokole SBC, który obsługuje .NET, takich jak Orange Pi, ODROID i nie tylko.
Upewnij się, że SSH jest włączone na Twoim urządzeniu. Dla Raspberry Pi, zobacz Konfigurowanie serwera SSH w dokumentacji Raspberry Pi.
Przygotowywanie sprzętu
Użyj składników sprzętowych do skompilowania obwodu, jak pokazano na poniższym diagramie:
Obrazek powyżej przedstawia bezpośrednie połączenie między pinem uziemienia a pinem 21.
Tip
Schemat przedstawia płytkę stykową i wyprowadzenie GPIO w celach ilustracyjnych, ale nie krępuj się po prostu podłączyć przewodem zworkowym na Raspberry Pi pin uziemienia i pin 21.
W razie potrzeby zapoznaj się z następującym diagramem przypinania:
Obraz dzięki uprzejmości Raspberry Pi Foundation.
Tworzenie aplikacji
Wykonaj następujące kroki w preferowanym środowisku projektowym:
Utwórz nową aplikację konsoli .NET przy użyciu interfejsu wiersza polecenia .NET lub Visual Studio. Nadaj mu nazwę InputTutorial.
dotnet new console -o InputTutorial cd InputTutorialDodaj pakiet System.Device.Gpio do projektu. Użyj .NET CLI z katalogu projektu lub Visual Studio.
dotnet package add System.Device.Gpio --version 4.0.1Zastąp zawartość pliku Program.cs następującym kodem:
using System.Device.Gpio; using System.Threading.Tasks; const int Pin = 21; const string Alert = "ALERT 🚨"; const string Ready = "READY ✅"; using var controller = new GpioController(); controller.OpenPin(Pin, PinMode.InputPullUp); Console.WriteLine( $"Initial status ({DateTime.Now}): {(controller.Read(Pin) == PinValue.High ? Alert : Ready)}"); controller.RegisterCallbackForPinValueChangedEvent( Pin, PinEventTypes.Falling | PinEventTypes.Rising, OnPinEvent); await Task.Delay(Timeout.Infinite); static void OnPinEvent(object sender, PinValueChangedEventArgs args) { Console.WriteLine( $"({DateTime.Now}) {(args.ChangeType is PinEventTypes.Rising ? Alert : Ready)}"); }W poprzednim kodzie:
- Deklaracja using tworzy wystąpienie
GpioController. Deklaracjausinggwarantuje, że obiekt zostanie usunięty, a zasoby sprzętowe zostaną prawidłowo zwolnione.-
GpioControllerjest instancjonowane bez parametrów, co wskazuje, że powinno wykryć, na której platformie sprzętowej jest uruchomione, i używać schematu logicznego numerowania pinów.
-
- Pin GPIO 21 jest otwarty za pomocą
PinMode.InputPullUppolecenia.- Powoduje to otworzenie pinu z aktywnym rezystorem PullUp. W tym trybie, gdy wyprowadzenie jest podłączone do ziemi, zwróci wartość
PinValue.Low. Gdy wyprowadzenie jest odłączone od podstawy i obwód jest otwarty, wyprowadzenie zwraca wartośćPinValue.High.
- Powoduje to otworzenie pinu z aktywnym rezystorem PullUp. W tym trybie, gdy wyprowadzenie jest podłączone do ziemi, zwróci wartość
- Początkowy status jest zapisany do konsoli przy użyciu wyrażenia trójkowego. Bieżący stan pinu jest czytany przy użyciu
Read(). Jeśli jestPinValue.High, zapisuje ciągAlertna konsolę. W przeciwnym razie zapisujeReadyciąg. -
RegisterCallbackForPinValueChangedEvent()rejestruje funkcję wywołania zwrotnego dla zdarzeńPinEventTypes.RisingiPinEventTypes.Fallingna pinie. Te zdarzenia odpowiadają odpowiednio stanomPinValue.HighiPinValue.Lowpinów. - Funkcja wywołania zwrotnego wskazuje metodę o nazwie
OnPinEvent().OnPinEvent()używa innego wyrażenia ternarnego, które zapisuje odpowiednie ciągiAlertlubReady. - Główny wątek śpi bez końca, czekając na zdarzenia przypięcia.
- Deklaracja using tworzy wystąpienie
Kompilowanie aplikacji. Jeśli korzystasz z .NET CLI, wykonaj
dotnet build. Aby skompilować Visual Studio, naciśnij Ctrl+Shift+B.Wdróż aplikację w SBC jako samodzielną aplikację. Aby uzyskać instrukcje, zobacz Deploy .NET aplikacje do urządzenia Raspberry Pi. Upewnij się, że nadajesz plikowi wykonywalnemu uprawnienia do wykonywania przy użyciu
chmod +x.Uruchom aplikację na urządzeniu Raspberry Pi, przełączając się do katalogu wdrożenia i uruchamiając plik wykonywalny.
./InputTutorialKonsola wyświetla tekst podobny do poniższego.
Initial status (05/10/2022 15:59:25): READY ✅Odłącz pin 21 od masy. Konsola wyświetla tekst podobny do poniższego.
(05/10/2022 15:59:59) ALERT 🚨Ponownie podłącz pin 21 i uziemienie. Konsola wyświetla tekst podobny do poniższego.
(05/10/2022 16:00:25) READY ✅Zakończ program, naciskając klawisze Ctrl+C.
Gratulacje! Użyto GPIO do wykrywania sygnałów wejściowych System.Device.Gpio przy użyciu pakietu NuGet! Istnieje wiele zastosowań dla tego rodzaju danych wejściowych. Ten przykład można użyć w dowolnym scenariuszu, w którym przełącznik łączy lub przerywa obwód. Oto przykład użycia go z kontaktronem magnetycznym, który często jest używany do wykrywania otwartych drzwi lub okien.
Laserowy przełącznik
Rozszerzając nieco koncepcję z poprzedniego przykładu, przyjrzyjmy się, jak można ją zastosować do stworzenia laserowej zapory. Aby zbudować laserowy czujnik ruchu, potrzebne są następujące dodatkowe komponenty:
- Moduł nadajnika laserowego KY-008
- Moduł czujnika odbiornika laserowego (patrz uwaga poniżej)
- 2 10K Ω rezystory
Uwaga
Moduł czujnika odbiornika laserowego to ogólna nazwa stosowana do wspólnego modułu znalezionego w wielu sklepach internetowych. Urządzenie może się różnić nazwą lub producentem, ale powinno przypominać ten obraz.
Podłącz sprzęt laserowej pułapki
Połącz komponenty zgodnie ze szczegółami przedstawionymi na poniższym diagramie.
Zwróć szczególną uwagę na rezystory 10K Ω. Implementują one rozdzielacz napięcia. Wynika to z faktu, że moduł odbiornika laserowego wypuszcza 5V, aby wskazać, że wiązka została przerwana. Raspberry Pi obsługuje maksymalnie 3.3V dla wejściowego portu GPIO. Ponieważ przesłanie pełnych 5V do pinu mogłoby uszkodzić Raspberry Pi, prąd z modułu odbiorczego jest przepuszczany przez dzielnik napięcia, aby zmniejszyć napięcie do 2,5V.
Zastosuj aktualizacje kodu źródłowego
Możesz prawie użyć tego samego kodu co wcześniej, z jednym wyjątkiem. W innych przykładach użyliśmy metody PinMode.InputPullUp , aby po odłączeniu wyprowadzenia od ziemi i otwarciu obwodu wyprowadzenie zwraca wartość PinValue.High.
Jednakże w przypadku modułu odbiornika laserowego, nie wykrywamy obwodu otwartego. Zamiast tego chcemy, aby pin działał jako ujście prądu pochodzącego z modułu odbiornika laserowego. W takim przypadku otworzymy pin za pomocą PinMode.InputPullDown. W ten sposób wyprowadzenie zwraca wartość PinValue.Low , gdy nie otrzymuje prądu, a PinValue.High gdy odbiera prąd z modułu odbiornika laserowego.
controller.OpenPin(pin, PinMode.InputPullDown);
Ważne
Przed rozpoczęciem testowania laserowego tripwire upewnij się, że kod wdrożony na urządzeniu Raspberry Pi zawiera tę zmianę. Program działa bez niego, ale korzystanie z niewłaściwego trybu wejściowego grozi uszkodzeniem urządzenia Raspberry Pi!
Pobieranie kodu źródłowego
Źródło tego samouczka jest dostępne w GitHub.