Innehållsförteckning:

Arduino 1-wire Generic Client/Slave Device (Sensor): 4 Steg
Arduino 1-wire Generic Client/Slave Device (Sensor): 4 Steg

Video: Arduino 1-wire Generic Client/Slave Device (Sensor): 4 Steg

Video: Arduino 1-wire Generic Client/Slave Device (Sensor): 4 Steg
Video: NPK 7 IN 1 SOIL SENSOR - Humidity,Temperature ,EC, PH & NPK values all in one 2024, November
Anonim
Arduino 1-wire Generic Client/Slave Device (Sensor)
Arduino 1-wire Generic Client/Slave Device (Sensor)

Läs introduktionen och steg 2 i min instruktion om hur man bygger en Arduino 1-tråds display (144 tecken) för att få mer information om situationen och tillgängliga bibliotek. Som förklarat där kommer vi att använda OneWire-Hub-biblioteket (OneWire-slavenhetsemulator) av orgua (var uppmärksam på att det finns andra gafflar runt) för att bygga generiska 1-trådiga enheter (t.ex. sensorer) med hjälp av en Arduino.

Steg 1: Programvara

Det viktigaste är att göra en enhet som kan returnera i princip vilken typ av värde som helst på ett enkelt sätt. Det betyder att standardprogramvara kan användas för att läsa alla värden direkt (ingen konversation eller binär manipulation behövs). För det behöver vi en mycket enkel standard 1-tråds enhet som kan returnera flottörer och som stöds i stor utsträckning. Det enda valet jag känner till är DS18B20 -termometern (DS2438 batteriövervakare är också intressant och användbar men ganska komplex och därmed långsam bland andra nackdelar). OneWire-Hub-biblioteket innehåller ett exempel som heter DS18B20_asInterface som gör precis vad vi behöver. Det skapar ett gäng DS18B20 varav var och en representerar ett flottörvärde som vi vill returnera från våra sensorer. Restriktionerna här är upplösningen och värdena måste ligga i intervallet -55, 0… 125, 0. Det kan lätt uppnås - i värsta fall vara omskalning - och är faktiskt bättre än de värden som kan representeras av t.ex. DS2438 -värdena (1,5 till 10V). Alternativt kan ett större värdeintervall ställas in med hjälp av:

setTemperatureRaw (static_cast (värde * 16,0f));

men läsning och bearbetning av dessa värden kanske inte stöds av all programvara eftersom det är ur specifikationer.

Vad du måste vara medveten om är att initialt det maximala antalet slavar är begränsat till 8 men kan ändras i "OneWireHub_config.h" genom att öka HUB_SLAVE_LIMIT till 32. Du måste också se till att anta ONEWIRE_TIME_MSG_HIGH_TIMEOUT om det behövs av din 1-tråds nätverk (t.ex. x10), som förklaras i steg 2 i Arduino 1-tråds display (144 tecken). Och för att använda IDE -versionen> = 1.8.3 för att kompilera och ladda upp koden till din Arduino.

Här som ett exempel koden för den enhet jag bygger mycket nyligen. Eftersom jag antar att du inte använder samma kombination av sensorer som jag gör kommer jag inte att gå mer in på detaljer här, kolla koden och ställ frågor om du behöver hjälp.

Steg 2: Hårdvara

Hårdvara
Hårdvara

I princip kan allt du kan ansluta till en Arduino användas som din valda sensor. Den enda begränsningen är att läsa av sensorn ska vara så snabb som möjligt för att ha gott om tid kvar för 1-trådskommunikationen (skicka steg 2 i min instruktion om Arduino 1-tråds display (144 tecken) i ordning för att få ett exempel).

Ett exempel på möjlig hårdvara kan vara en väderstation som t.ex.

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

Dessutom eller istället för dig kanske du vill använda själva Arduino som din sensor. Du kan läsa mer om det i min instruktion om Arduino Mindre kända funktioner - möjliga värden är källspänningen och den inre temperaturen.

Här som ett exempel en bild av enheten jag bygger mycket nyligen. Eftersom jag antar att du inte använder samma kombination av sensorer som jag gör kommer jag inte att gå in på detaljer här, kolla koden och ställ frågor om du behöver hjälp.

Steg 3: Testa enheten

Anslut den till ditt nätverk och kontrollera din programvara för att alla ROM -ID ska finnas och värdena som de returnerar som temperatur.

Steg 4: Bilaga: ATtiny85

Bilaga: ATtiny85
Bilaga: ATtiny85

Enstaka enheter (minnesbegränsning) kan också göras på en ATtiny85. Detta kräver några steg när vi programmerar ATtiny85 med Arduino Uno som ISP med hjälp av Arduino IDE:

  • Länkar

    • https://playground.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. använd Arduino IDE> = 1.8.3
  2. installera ATtiny -alternativet till IDE

    1. Arkiv> Inställningar> Ytterligare webbadresser för Boards Manager:
    2. Verktyg> Styrelse: ??? > Styrelsechef …
    3. Sök efter: "liten" och installera
  3. ladda upp ISP -skiss till en Uno

    Arkiv> Exempel> ArduinoISP> ArduinoISP

  4. sätt in ATtiny85 i programmeringsuttaget (nollkraft) och anslut det till:

    1. Arduino Pin MOSI D11 till ATtiny Pin 5
    2. Arduino Pin MISO D12 till ATtiny Pin 6
    3. Arduino Pin SCK D13 till ATtiny Pin 7
    4. Arduino Pin Återställ D10 till ATtiny Pin 1
    5. Arduino Pin GND till ATtiny Pin 4
    6. Arduino Pin VCC till ATtiny Pin 8
    7. (> = 10uF lock på Arduino Uno RESET pin kan behövas)
  5. välj ATtiny85 (se bild):

    • Bräda: "ATtiny25/45/85"
    • Timer 1 Klocka: "CPU"
    • B. O. D.: "B. O. D. inaktiverad"
    • LTO (endast 1.6.11 +): "Inaktiverad"
    • Chip: "ATtiny85"
    • Klocka: "8 MHz (intern)" (kompatibel med ATtiny85 och ATtiny84)
    • Klocka: "16 MHz (PLL)" (alternativ inställning endast för ATtiny85)
    • Hamn: ???
  6. välj programmerare:

    Verktyg> Programmerare: "Arduino som ISP" (INTE "ArduinoISP"!)

  7. ställ in säkringsinställningar (klocka etc.):

    Verktyg> Burn Bootloader

  8. ladda upp den här koden (programmeringsfel -lysdioden måste vara släckt, annars återställ den)
  9. ATtinyX5 Pin -layout (ATtiny85):

    1. Pin 1: PB5 (RST)
    2. Stift 2: PB3 (A3) - valfritt ansluten via 220ohm till 1 <-TX
    3. Stift 3: PB4 (A2) - ansluten till 1 -tråds DATA
    4. Pin 4: GND - ansluten till GND
    5. Stift 5: PB0 (PWM) - ansluten till sensor I2C SDA
    6. Stift 6: PB1 (PWM) - ansluten till LED med 4,7k till GND
    7. Stift 7: PB2 (A1) - ansluten till sensor I2C SCL
    8. Stift 8: VCC - ansluten till 5V

Att arbeta med ATTiny85 kräver lite mer arbete eftersom du behöver få ytterligare bibliotek för I2C comm (adafruit/TinyWireM) och seriell utmatning (TinyDebugSerial). Eftersom minnet är ganska begränsat kanske du vill jobba mycket med #define t.ex. för att ta bort seriell felsökning. I exemplet kan du se allt detta kastat ihop.

För testning är det första steget att kontrollera om lysdioden blinkar med rätt frekvens, 0,5 Hz. Anslut den sedan till 1wire -bussen och leta efter den nya enheten.

Rekommenderad: