Spisu treści:

Arduino 1-wire Generic Client/Slave Device (czujnik): 4 kroki
Arduino 1-wire Generic Client/Slave Device (czujnik): 4 kroki

Wideo: Arduino 1-wire Generic Client/Slave Device (czujnik): 4 kroki

Wideo: Arduino 1-wire Generic Client/Slave Device (czujnik): 4 kroki
Wideo: 1-Wire – Through the Looking Glass (Scope) and Down the Rabbit Hole (Bit Level) 2024, Listopad
Anonim
Arduino 1-wire Generic Client/Slave Device (czujnik)
Arduino 1-wire Generic Client/Slave Device (czujnik)

Przeczytaj wprowadzenie i krok 2 mojego instruktażu o tym, jak zbudować 1-przewodowy wyświetlacz Arduino (144 znaków), aby uzyskać więcej informacji o sytuacji i dostępnych bibliotekach. Jak wyjaśniono tam, użyjemy biblioteki OneWire-Hub (emulator urządzenia podrzędnego OneWire) firmy orgua (zwróć uwagę, że wokół są inne widełki) w celu zbudowania ogólnych urządzeń 1-przewodowych (np. czujników) za pomocą Arduino.

Krok 1: Oprogramowanie

Najważniejsze jest stworzenie urządzenia, które w prosty sposób może zwrócić w zasadzie każdą wartość. Oznacza to, że standardowe oprogramowanie może być używane do bezpośredniego odczytu wszystkich wartości (nie jest wymagana konwersacja ani manipulacja binarna). W tym celu potrzebujemy bardzo prostego domyślnego urządzenia 1-wire, które może zwracać pływaki i jest szeroko obsługiwane. Jedyny wybór, jaki znam, to termometr DS18B20 (Monitor baterii DS2438 jest również interesujący i przydatny, ale dość złożony, a przez to powolny wśród innych wad). Biblioteka OneWire-Hub zawiera przykład o nazwie DS18B20_asInterface, który robi dokładnie to, czego potrzebujemy. Tworzy wiązkę DS18B20, z których każda reprezentuje jedną wartość zmiennoprzecinkową, którą chcemy zwrócić z naszych czujników. Ograniczeniami są tutaj rozdzielczość, a wartości muszą mieścić się w zakresie -55, 0 … 125, 0. Można to łatwo osiągnąć – w najgorszym przypadku przeskalować – i jest w rzeczywistości lepsze niż wartości, które można przedstawić np. wartości DS2438 (1,5 do 10 V). Alternatywnie większy zakres wartości można ustawić za pomocą:

setTemperatureRaw(static_cast(value * 16.0f));

ale odczytywanie i przetwarzanie tych wartości może nie być obsługiwane przez wszystkie oprogramowanie, ponieważ nie jest to zgodne ze specyfikacją.

Musisz mieć świadomość, że początkowo maksymalna liczba urządzeń podrzędnych jest ograniczona do 8, ale można ją zmienić w "OneWireHub_config.h", zwiększając HUB_SLAVE_LIMIT do 32. Pamiętaj również, aby zastosować ONEWIRE_TIME_MSG_HIGH_TIMEOUT, jeśli jest to wymagane przez Sieć 1-przewodowa (np. x10), jak wyjaśniono w kroku 2 wyświetlacza 1-przewodowego Arduino (144 znaki). I użyć wersji IDE >= 1.8.3 do kompilacji i przesłania kodu do Arduino.

Tutaj jako przykład kod urządzenia, które zbudowałem bardzo niedawno. Ponieważ zakładam, że nie będziesz używał tej samej kombinacji czujników co ja, nie będę tu wnikał w szczegóły, sprawdzaj kod i zadawaj pytania, jeśli potrzebujesz pomocy.

Krok 2: Sprzęt

Sprzęt komputerowy
Sprzęt komputerowy

Zasadniczo wszystko, co można podłączyć do Arduino, może być używane jako wybrany czujnik. Jedynym ograniczeniem jest to, że odczyt czujnika powinien być tak szybki, jak to możliwe, aby pozostało dużo czasu na komunikację 1-przewodową (por. Krok 2 mojej instrukcji dotyczącej wyświetlacza 1-przewodowego Arduino (144 znaków) w kolejności aby uzyskać przykład).

Przykładem możliwego sprzętu może być stacja pogodowa np.:

https://shop.boxtec.ch/wetter-messer-p-41289.html

Dodatkowo lub zamiast ciebie możesz chcieć użyć samego Arduino jako czujnika. Więcej na ten temat można przeczytać w mojej instrukcji dotyczącej mniej znanych funkcji Arduino - możliwe wartości to napięcie źródła i temperatura wewnętrzna.

Tutaj jako przykład zdjęcie urządzenia, które zbudowałem bardzo niedawno. Ponieważ zakładam, że nie będziesz używał tej samej kombinacji czujników co ja, nie będę tu wnikał w szczegóły, sprawdzaj kod i zadawaj pytania, jeśli potrzebujesz pomocy.

Krok 3: Przetestuj urządzenie

Podłącz go do sieci i sprawdź oprogramowanie pod kątem obecności wszystkich identyfikatorów ROM i wartości, które zwracają jako temperaturę.

Krok 4: Dodatek: ATtiny85

Dodatek: ATtiny85
Dodatek: ATtiny85

Pojedyncze urządzenia (ograniczenie pamięci) można również wykonać na ATtiny85. Wymaga to kilku kroków, ponieważ programujemy ATtiny85 za pomocą Arduino Uno jako ISP za pomocą Arduino IDE:

  • Spinki do mankietów

    • https://plac zabaw.boxtec.ch/doku.php/arduino/att…
    • https://sebastian.expert/could-not-find-usbtiny-d…
    • https://learn.sparkfun.com/tutorials/tiny-avr-pro…
    • https://forum.arduino.cc/index.php?topic=425532.0
    • https://forum.arduino.cc/index.php?topic=128963.0
  1. użyj Arduino IDE >=1.8.3
  2. zainstaluj opcję ATtiny w IDE

    1. Plik > Preferencje > Adresy URL menedżera dodatkowych tablic:
    2. Narzędzia > Tablica: ??? > Zarządzający tablicami…
    3. wyszukaj: "tiny" i zainstaluj
  3. prześlij szkic ISP do Uno

    Plik > Przykłady > ArduinoISP > ArduinoISP

  4. włóż ATtiny85 do gniazda programowania (zero-force) i podłącz go:

    1. Pin Arduino MOSI D11 do ATtiny Pin 5
    2. Pin Arduino MISO D12 do pinu ATtiny 6
    3. Pin Arduino SCK D13 do pinu ATtiny 7
    4. Resetowanie pinów Arduino D10 do pinu ATtiny 1
    5. Pin Arduino GND do ATtiny Pin 4
    6. Pin Arduino VCC do ATtiny Pin 8
    7. (>=10uF cap na pinie Arduino Uno RESET może być potrzebny)
  5. wybierz ATtiny85 (patrz zdjęcie):

    • Tablica: "ATtiny25/45/85"
    • Zegar 1 zegara: „CPU”
    • BOD: „BOD niepełnosprawny”
    • LTO (tylko 1.6.11 +): „Wyłączone”
    • Chip: „ATtiny85”
    • Zegar: „8 MHz (wewnętrzny)” (kompatybilny z ATtiny85 i ATtiny84)
    • Zegar: „16 MHz (PLL)” (alternatywne ustawienie tylko dla ATtiny85)
    • Port: ???
  6. wybierz Programista:

    Narzędzia > Programista: "Arduino jako ISP" (NIE "ArduinoISP" !)

  7. ustawić ustawienia bezpiecznika (zegar itp.):

    Narzędzia > Nagraj bootloader

  8. wgraj ten kod (dioda LED błędu programatora musi być wyłączona, w przeciwnym razie zresetuj ją)
  9. Układ styków ATtinyX5 (ATtiny85):

    1. Pin 1: PB5 (RST)
    2. Pin 2: PB3 (A3) - opcjonalnie podłączony przez 220ohm do 1<-TX
    3. Pin 3: PB4 (A2) - podłączony do 1-wire DATA
    4. Pin 4: GND - podłączony do GND
    5. Pin 5: PB0 (PWM) - podłączony do czujnika I2C SDA
    6. Pin 6: PB1 (PWM) - podłączony do LED z 4,7k do GND
    7. Pin 7: PB2 (A1) - podłączony do czujnika I2C SCL
    8. Pin 8: VCC - podłączony do 5V

Praca z ATTiny85 wymaga nieco więcej pracy, ponieważ potrzebne są dodatkowe biblioteki do komunikacji I2C (adafruit/TinyWireM) i wyjścia szeregowego (TinyDebugSerial). Dodatkowo, ponieważ pamięć jest dość ograniczona, możesz chcieć dużo pracować z #define, np. aby usunąć debugowanie szeregowe. W przykładzie możesz zobaczyć to wszystko razem.

W celu przetestowania pierwszym krokiem jest sprawdzenie, czy dioda LED miga z prawidłową częstotliwością, 0,5 Hz. Następnie podłącz go do magistrali 1wire i sprawdź nowe urządzenie.

Zalecana: