Talaan ng mga Nilalaman:

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

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

Video: Arduino 1-wire Generic Client / Slave Device (Sensor): 4 na Hakbang
Video: 1-Wire – Through the Looking Glass (Scope) and Down the Rabbit Hole (Bit Level) 2024, Nobyembre
Anonim
Arduino 1-wire Generic Client / Slave Device (Sensor)
Arduino 1-wire Generic Client / Slave Device (Sensor)

Mangyaring basahin ang Panimula at Hakbang 2 ng aking itinuro tungkol sa kung paano bumuo ng isang Arduino 1-wire Display (144 Chars) upang makakuha ng karagdagang impormasyon tungkol sa magagamit na sitwasyon at mga aklatan. Tulad ng ipinaliwanag doon ay gagamitin namin ang library ng OneWire-Hub (OneWire slave device emulator) ng orgua (bigyang pansin mayroong iba pang mga tinidor sa paligid) upang makabuo ng mga generic na 1-wire na aparato (hal. Mga sensor) gamit ang isang Arduino.

Hakbang 1: Software

Ang pinakamahalagang bagay ay upang makagawa ng isang aparato na maaaring ibalik talaga ang anumang uri ng halaga sa isang simpleng pamamaraan. Ibig sabihin ay magagamit ang karaniwang software upang mabasa nang direkta ang lahat ng mga halaga (hindi kinakailangan ng pag-uusap o pagmamanipula ng binary). Para sa kailangan namin ng isang napaka-simpleng default na 1-wire na aparato na maaaring bumalik sa mga float at malawak na sinusuportahan. Ang tanging pagpipilian na alam ko lamang ay ang DS18B20 Thermometer (ang DS2438 Battery Monitor ay kagiliw-giliw at kapaki-pakinabang din ngunit medyo kumplikado at sa gayon ay mabagal kasama ng iba pang mga drawbacks). Naglalaman ang library ng OneWire-Hub ng isang halimbawa na tinatawag na DS18B20_asInterface na eksaktong ginagawa ang kailangan namin. Lumilikha ito ng isang bungkos ng DS18B20 kung saan ang bawat isa ay kumakatawan sa isang halaga ng float na nais naming bumalik mula sa aming (mga) sensor. Ang mga paghihigpit dito ay ang resolusyon at ang mga halaga ay dapat nasa saklaw na -55, 0… 125, 0. Na madaling makamit - sa pinakamasamang kaso ay iligtas - at talagang mas mahusay kaysa sa mga halagang maaaring kinatawan ng hal. ang mga halagang DS2438 (1.5 hanggang 10V). Bilang kahalili ang isang mas malaking saklaw ng mga halaga ay maaaring maitakda sa pamamagitan ng paggamit ng:

setTemperatureRaw (static_cast (halaga * 16.0f));

ngunit ang pagbabasa at pagproseso ng mga halagang ito ay maaaring hindi suportado ng lahat ng software dahil wala na ito sa mga detalye.

Ang dapat mong malaman ay sa una ang pinakamaraming bilang ng mga alipin ay pinaghihigpitan sa 8 ngunit maaaring mabago sa "OneWireHub_config.h" sa pamamagitan ng pagtaas ng HUB_SLAVE_LIMIT hanggang sa 32 Gayundin dapat mong tiyakin na mag-ampon ng ONEWIRE_TIME_MSG_HIGH_TIMEOUT kung kinakailangan ng iyong 1-wire network (hal x10), tulad ng ipinaliwanag sa Hakbang 2 ng Arduino 1-wire Display (144 Chars). At upang magamit ang Bersyon ng IDE> = 1.8.3 upang makatipon at mai-upload ang code sa iyong Arduino.

Dito bilang isang halimbawa ang code ng aparato na binubuo ko kamakailan. Tulad ng ipinapalagay kong hindi mo gagamitin ang parehong kombinasyon ng mga sensor na ginagawa ko hindi ko na lalagyan pa ang mga detalye dito, suriin ang code at magtanong kung kailangan mo ng tulong.

Hakbang 2: Hardware

Hardware
Hardware

Talaga ang anumang bagay na maaari mong ikonekta sa isang Arduino ay maaaring magamit bilang iyong sensor na pinili. Ang tanging paghihigpit ay ang pagbabasa ng sensor ay dapat na mas mabilis hangga't maaari upang magkaroon ng maraming oras na natitira para sa 1-wire na komunikasyon na maganap (ipagkaloob ang Hakbang 2 ng aking itinuturo tungkol sa Arduino 1-wire Display (144 Chars) sa pagkakasunud-sunod upang makakuha ng isang halimbawa).

Ang isang halimbawa ng posibleng hardware ay maaaring isang istasyon ng panahon tulad ng hal.:

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

Bilang karagdagan o sa halip na baka gusto mo lamang gamitin ang Arduino mismo bilang iyong sensor. Maaari mong basahin ang higit pa tungkol doon sa aking itinuturo tungkol sa Arduino Lesser Known Features - ang mga posibleng halaga ay ang pinagmulan ng boltahe at ang panloob na temperatura.

Dito bilang isang halimbawa ng isang imahe ng aparato na binubuo ko kamakailan lamang. Tulad ng ipinapalagay ko sa iyo na hindi gagamit ng parehong kombinasyon ng mga sensor na ginagawa ko hindi ko na lalagyan pa ang mga detalye dito, suriin ang code at magtanong kung kailangan mo ng tulong.

Hakbang 3: Subukan ang Device

Ikonekta ito sa iyong network at suriin ang iyong software para sa lahat ng mga ROM ID na naroroon at ang mga halagang ibabalik nila bilang temperatura.

Hakbang 4: Apendiks: ATtiny85

Apendiks: ATtiny85
Apendiks: ATtiny85

Ang mga solong aparato (limitasyon sa memorya) ay maaari ding gawin sa isang ATtiny85. Kailangan nito ng ilang mga hakbang sa aming pagpo-program ng ATtiny85 gamit ang Arduino Uno bilang ISP sa tulong ng Arduino IDE:

  • Mga link

    • 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. gamitin ang Arduino IDE> = 1.8.3
  2. i-install ang opsyon na ATtiny sa IDE

    1. File> Mga Kagustuhan> Mga Karagdagang Mga URL ng Manager ng Boards:
    2. Mga tool> Lupon: ??? > Mga Tagapamahala ng Lupon…
    3. maghanap para sa: "maliit" at i-install
  3. i-upload ang ISP sketch sa isang Uno

    File> Mga Halimbawa> ArduinoISP> ArduinoISP

  4. ipasok ang ATtiny85 sa socket ng programa (zero-force) at i-wire ito:

    1. Arduino Pin MOSI D11 hanggang ATtiny Pin 5
    2. Arduino Pin MISO D12 hanggang ATtiny Pin 6
    3. Ang Arduino Pin SCK D13 hanggang ATtiny Pin 7
    4. Ang Arduino Pin Reset D10 hanggang ATtiny Pin 1
    5. Ang Arduino Pin GND sa ATtiny Pin 4
    6. Ang Arduino Pin VCC sa ATtiny Pin 8
    7. (> = 10uF cap sa Arduino Uno RESET pin ay maaaring kailanganin)
  5. piliin ang ATtiny85 (tingnan ang larawan):

    • Lupon: "ATtiny25 / 45/85"
    • Timer 1 Clock: "CPU"
    • B. O. D.: "Hindi Magagawa ang B. O. D."
    • LTO (1.6.11 + lamang): "Hindi pinagana"
    • Chip: "ATtiny85"
    • Clock: "8 MHz (panloob)" (Tugma ang ATtiny85 at ATtiny84)
    • Clock: "16 MHz (PLL)" (alternatibong setting para sa ATtiny85 lamang)
    • Port: ???
  6. piliin ang Programmer:

    Mga Tool> Programmer: "Arduino bilang ISP" (HINDI "ArduinoISP"!)

  7. itakda ang mga setting ng piyus (orasan, atbp.):

    Mga tool> Burn Bootloader

  8. i-upload ang code na ito (kailangang patayin ang programmer error LED, kung hindi man i-reset ito)
  9. ATtinyX5 Pin Layout (ATtiny85):

    1. Pin 1: PB5 (RST)
    2. Pin 2: PB3 (A3) - opsyonal na konektado sa pamamagitan ng 220ohm sa 1 <-TX
    3. Pin 3: PB4 (A2) - konektado sa 1-wire DATA
    4. Pin 4: GND - konektado sa GND
    5. Pin 5: PB0 (PWM) - konektado sa sensor I2C SDA
    6. Pin 6: PB1 (PWM) - konektado sa LED na may 4.7k sa GND
    7. Pin 7: PB2 (A1) - konektado sa sensor I2C SCL
    8. Pin 8: VCC - konektado sa 5V

Ang pagtatrabaho sa ATTiny85 ay nangangailangan ng kaunting trabaho tulad ng kailangan mo upang makakuha ng karagdagang mga aklatan para sa I2C comm (adafruit / TinyWireM) at serial output (TinyDebugSerial). Bilang karagdagan dahil ang memorya ay lubos na limitado baka gusto mong gumana nang marami sa # tukuyin hal. upang alisin ang serial debugging. Sa halimbawang makikita mo ang lahat ng ito nang magkakasama.

Para sa pagsubok sa unang hakbang ay suriin kung ang LED flashes na may tamang dalas, 0.5Hz. Pagkatapos ay ikonekta ito sa 1wire bus at suriin para sa bagong aparato.

Inirerekumendang: