Inhoudsopgave:

Arduino 1-draads algemeen client/slave-apparaat (sensor): 4 stappen
Arduino 1-draads algemeen client/slave-apparaat (sensor): 4 stappen

Video: Arduino 1-draads algemeen client/slave-apparaat (sensor): 4 stappen

Video: Arduino 1-draads algemeen client/slave-apparaat (sensor): 4 stappen
Video: How to use up to 10 push button switch with 1 Arduino input pin ANPB-V1 2024, November
Anonim
Arduino 1-draads algemeen client/slave-apparaat (sensor)
Arduino 1-draads algemeen client/slave-apparaat (sensor)

Lees de inleiding en stap 2 van mijn instructable over het bouwen van een Arduino 1-draads display (144 tekens) om meer informatie te krijgen over de situatie en beschikbare bibliotheken. Zoals daar uitgelegd zullen we de OneWire-Hub library (OneWire slave device emulator) van orgua gebruiken (let op er zijn andere forks in de buurt) om generieke 1-wire devices (bijv. sensoren) te bouwen met een Arduino.

Stap 1: Software

Het belangrijkste is om een apparaat te maken dat op een eenvoudige manier in principe elke waarde kan teruggeven. Dit betekent dat standaardsoftware kan worden gebruikt om alle waarden direct te lezen (geen gesprek of binaire manipulatie nodig). Daarvoor hebben we een heel eenvoudig standaard 1-draads apparaat nodig dat floats kan retourneren en breed wordt ondersteund. De enige keuze die ik ken is de DS18B20-thermometer (de DS2438-batterijmonitor is ook interessant en nuttig, maar behoorlijk complex en dus traag, naast andere nadelen). De OneWire-Hub-bibliotheek bevat een voorbeeld genaamd DS18B20_asInterface dat precies doet wat we nodig hebben. Het creëert een heleboel DS18B20 waarvan elk één float-waarde vertegenwoordigt die we van onze sensor (en) willen retourneren. De beperkingen hier zijn de resolutie en de waarden moeten in het bereik -55, 0 … 125, 0 liggen. Dat kan gemakkelijk worden bereikt - in het ergste geval herschalen - en is eigenlijk beter dan de waarden die kunnen worden weergegeven door b.v. de DS2438-waarden (1,5 tot 10V). Als alternatief kan een groter bereik aan waarden worden ingesteld met behulp van:

setTemperatureRaw (static_cast (waarde * 16.0f));

maar het lezen en verwerken van deze waarden wordt mogelijk niet door alle software ondersteund omdat deze buiten de specificaties valt.

Waar u zich van bewust moet zijn, is dat het maximale aantal slaves aanvankelijk beperkt is tot 8, maar kan worden gewijzigd in "OneWireHub_config.h" door HUB_SLAVE_LIMIT te verhogen tot 32. U moet er ook voor zorgen dat u ONEWIRE_TIME_MSG_HIGH_TIMEOUT gebruikt indien nodig door uw 1-draads netwerk (bijv. x10), zoals uitgelegd in stap 2 van Arduino 1-draads display (144 tekens). En om de IDE-versie >= 1.8.3 te gebruiken om de code te compileren en naar uw Arduino te uploaden.

Hier als voorbeeld de code van het apparaat dat ik zeer recent heb gebouwd. Aangezien ik aanneem dat je niet dezelfde combinatie van sensoren gebruikt als ik, zal ik hier niet verder ingaan op details, de code controleren en vragen stellen als je hulp nodig hebt.

Stap 2: Hardware

Hardware
Hardware

In principe kan alles wat u op een Arduino kunt aansluiten, worden gebruikt als uw favoriete sensor. De enige beperking is dat het lezen van de sensor zo snel mogelijk moet zijn om voldoende tijd te hebben om de 1-draads communicatie te laten plaatsvinden (raadpleeg stap 2 van mijn instructie over Arduino 1-draads display (144 tekens) om om een voorbeeld te krijgen).

Een voorbeeld van mogelijke hardware kan een weerstation zijn zoals bijv.:

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

Bovendien of in plaats van dat u de Arduino zelf als uw sensor wilt gebruiken. Je kunt daar meer over lezen in mijn instructable over de Arduino Lesser Known Features - mogelijke waarden zijn de bronspanning en de interne temperatuur.

Hier als voorbeeld een afbeelding van het toestel dat ik zeer recent heb gebouwd. Aangezien ik aanneem dat je niet dezelfde combinatie van sensoren gebruikt als ik, zal ik hier niet verder ingaan op details, de code controleren en vragen stellen als je hulp nodig hebt.

Stap 3: Test het apparaat

Verbind het met uw netwerk en controleer uw software op alle ROM-ID's die aanwezig zijn en de waarden die ze retourneren als temperatuur.

Stap 4: Bijlage: ATtiny85

Bijlage: ATtiny85
Bijlage: ATtiny85

Losse apparaten (geheugenbeperking) kunnen ook op een ATtiny85. Dit vereist een paar stappen omdat we de ATtiny85 programmeren met Arduino Uno als ISP met behulp van de Arduino IDE:

  • Links

    • 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. gebruik Arduino IDE >=1.8.3
  2. installeer ATtiny-optie in IDE

    1. Bestand > Voorkeuren > Extra Boards Manager-URL's:
    2. Gereedschap > Bord: ??? > Bestuursmanager…
    3. zoek naar: "klein" en installeer
  3. upload ISP-schets naar een Uno

    Bestand > Voorbeelden > ArduinoISP > ArduinoISP

  4. steek de ATtiny85 in de programmeer (zero-force) socket en sluit deze aan:

    1. Arduino Pin MOSI D11 naar ATtiny Pin 5
    2. Arduino Pin MISO D12 naar ATtiny Pin 6
    3. Arduino Pin SCK D13 naar ATtiny Pin 7
    4. Arduino Pin Reset D10 naar ATtiny Pin 1
    5. Arduino Pin GND naar ATtiny Pin 4
    6. Arduino Pin VCC naar ATtiny Pin 8
    7. (>=10uF dop op Arduino Uno RESET-pin kan nodig zijn)
  5. selecteer ATtiny85 (zie afbeelding):

    • Bord: "ATtiny25/45/85"
    • Timer 1 Klok: "CPU"
    • BOD: "BOD uitgeschakeld"
    • LTO (alleen 1.6.11 +): "Uitgeschakeld"
    • Chip: "ATtiny85"
    • Klok: "8 MHz (intern)" (ATtiny85 en ATtiny84 compatibel)
    • Klok: "16 MHz (PLL)" (alternatieve instelling alleen voor ATtiny85)
    • Poort: ???
  6. selecteer Programmeur:

    Hulpmiddelen > Programmeur: "Arduino als ISP" (NIET "ArduinoISP"!)

  7. zekeringinstellingen instellen (klok, enz.):

    Hulpmiddelen > Bootloader branden

  8. upload deze code (programmeerfout-LED moet uit zijn, anders resetten)
  9. ATtinyX5-pinlay-out (ATtiny85):

    1. Pin 1: PB5 (RST)
    2. Pin 2: PB3 (A3) - optioneel aangesloten via 220ohm op 1<-TX
    3. Pin 3: PB4 (A2) - aangesloten op 1-draads DATA
    4. Pin 4: GND - aangesloten op GND
    5. Pin 5: PB0 (PWM) - aangesloten op sensor I2C SDA
    6. Pin 6: PB1 (PWM) - aangesloten op LED met 4,7k op GND
    7. Pin 7: PB2 (A1) - aangesloten op sensor I2C SCL
    8. Pin 8: VCC - aangesloten op 5V

Werken met ATTiny85 vereist wat meer werk omdat je extra bibliotheken nodig hebt voor I2C-communicatie (adafruit/TinyWireM) en seriële uitvoer (TinyDebugSerial). Bovendien, aangezien het geheugen vrij beperkt is, wil je misschien veel werken met #define, b.v. om seriële foutopsporing te verwijderen. In het voorbeeld zie je dit allemaal bij elkaar gegooid.

Voor het testen is de eerste stap om te controleren of de LED knippert met de juiste frequentie, 0,5 Hz. Sluit het vervolgens aan op de 1wire-bus en controleer op het nieuwe apparaat.

Aanbevolen: