Cuprins:

Arduino 1-fire Generic Client / Slave Device (Sensor): 4 Etape
Arduino 1-fire Generic Client / Slave Device (Sensor): 4 Etape

Video: Arduino 1-fire Generic Client / Slave Device (Sensor): 4 Etape

Video: Arduino 1-fire Generic Client / Slave Device (Sensor): 4 Etape
Video: Introduction to Heltec LoRa CubeCell Development Board HTCC-AB01 2024, Noiembrie
Anonim
Arduino 1-fire Generic Client / Slave Device (Sensor)
Arduino 1-fire Generic Client / Slave Device (Sensor)

Vă rugăm să citiți Introducerea și Pasul 2 din instrucțiunile mele despre cum să construiți un afișaj Arduino cu 1 fir (144 de caractere) pentru a obține mai multe informații despre situație și biblioteci disponibile. După cum s-a explicat acolo, vom folosi biblioteca OneWire-Hub (emulatorul dispozitivului OneWire slave) de către orgua (acordați atenție că există alte furci în jur) pentru a construi dispozitive generice cu 1 fir (de exemplu, senzori) folosind un Arduino.

Pasul 1: Software

Cel mai important lucru este să creezi un dispozitiv care să poată reda practic orice fel de valoare într-un mod simplu. Adică, software-ul standard poate fi utilizat pentru a citi direct toate valorile (nu este necesară o conversație sau manipulare binară). Pentru aceasta avem nevoie de un dispozitiv implicit cu 1 fir foarte simplu, care poate returna flotante și este acceptat pe scară largă. Singura alegere pe care o cunosc este termometrul DS18B20 (monitorul de baterie DS2438 este interesant și util, dar destul de complex și, astfel, lent, printre alte dezavantaje). Biblioteca OneWire-Hub conține un exemplu numit DS18B20_asInterface care face exact ceea ce avem nevoie. Se creează o grămadă de DS18B20 din care fiecare reprezintă o valoare float pe care dorim să o returnăm de la senzorii noștri. Restricțiile de aici sunt rezoluția și valorile trebuie să fie în intervalul -55, 0 … 125, 0. Acest lucru poate fi ușor realizat - în cel mai rău caz să fie redimensionarea - și este de fapt mai bun decât valorile care pot fi reprezentate de ex. valorile DS2438 (1,5 până la 10V). Alternativ, o gamă mai mare de valori poate fi setată utilizând:

setTemperatureRaw (static_cast (valoare * 16.0f));

dar citirea și procesarea acestor valori ar putea să nu fie acceptate de toate software-urile, deoarece nu sunt în conformitate cu specificațiile.

Ce trebuie să știți este că inițial numărul maxim de sclavi este limitat la 8, dar poate fi schimbat în „OneWireHub_config.h” prin creșterea HUB_SLAVE_LIMIT până la 32. De asemenea, trebuie să vă asigurați că adoptați ONEWIRE_TIME_MSG_HIGH_TIMEOUT dacă este necesar de către Rețea cu 1 fir (de ex. X10), așa cum se explică în Pasul 2 din Afișajul Arduino cu 1 fir (144 caractere). Și să utilizați versiunea IDE> = 1.8.3 pentru a compila și încărca codul pe Arduino.

Aici, ca exemplu, codul dispozitivului pe care îl construiesc foarte recent. Deoarece presupun că nu utilizați aceeași combinație de senzori pe care o fac, nu voi merge mai departe în detalii aici, verificați codul și puneți întrebări dacă aveți nevoie de ajutor.

Pasul 2: Hardware

Hardware
Hardware

Practic orice puteți conecta la un Arduino poate fi folosit ca senzor la alegere. Singura restricție este că citirea senzorului ar trebui să fie cât mai rapidă pentru a avea mult timp rămas pentru ca comunicarea cu 1 fir să aibă loc (conferiți Pasul 2 din instructajul meu despre Arduino 1-wire Display (144 de caractere), în ordine pentru a obține un exemplu).

Un exemplu de hardware posibil ar putea fi o stație meteo cum ar fi:

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

În plus sau în locul dvs., este posibil să doriți să utilizați Arduino în sine ca senzor. Puteți citi mai multe despre acest lucru în instrucțiunile mele despre caracteristicile mai puțin cunoscute ale Arduino - valorile posibile sunt tensiunea sursei și temperatura internă.

Aici, ca exemplu, o imagine a dispozitivului pe care o construiesc foarte recent. Deoarece presupun că nu utilizați aceeași combinație de senzori pe care o fac, nu voi merge mai departe în detalii aici, verificați codul și puneți întrebări dacă aveți nevoie de ajutor.

Pasul 3: Testați dispozitivul

Conectați-l la rețeaua dvs. și verificați software-ul pentru toate ID-urile ROM care trebuie să fie prezente și valorile pe care le returnează ca temperatură.

Pasul 4: Anexă: ATtiny85

Anexă: ATtiny85
Anexă: ATtiny85

Dispozitivele unice (limitarea memoriei) pot fi realizate și pe un ATtiny85. Acest lucru are nevoie de câțiva pași, deoarece programăm ATtiny85 folosind Arduino Uno ca ISP cu ajutorul ID-ului Arduino:

  • Link-uri

    • 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. utilizați Arduino IDE> = 1.8.3
  2. instalați opțiunea ATtiny în IDE

    1. Fișier> Preferințe> Adrese URL suplimentare ale administratorului de plăci:
    2. Instrumente> Tablă: ??? > Manager de consilii …
    3. căutați: „minuscul” și instalați
  3. încărcați schița ISP pe un Uno

    Fișier> Exemple> ArduinoISP> ArduinoISP

  4. introduceți ATtiny85 în mufa de programare (forță zero) și conectați-o:

    1. Pinul Arduino MOSI D11 la ATtiny Pin 5
    2. Pinul Arduino MISO D12 la ATtiny Pin 6
    3. Pinul Arduino SCK D13 la Pinul ATtiny 7
    4. Arduino Pin Reset D10 la ATtiny Pin 1
    5. Arduino Pin GND la ATtiny Pin 4
    6. Arduino Pin VCC la ATtiny Pin 8
    7. (> = 10uF capac pe pinul RESET Arduino Uno ar putea fi necesar)
  5. selectați ATtiny85 (a se vedea imaginea):

    • Placă: "ATtiny25 / 45/85"
    • Temporizator 1 Ceas: „CPU”
    • B. O. D.: „B. O. D. Dezactivat”
    • LTO (numai 1.6.11 +): „Dezactivat”
    • Cip: „ATtiny85”
    • Ceas: "8 MHz (intern)" (compatibil ATtiny85 și ATtiny84)
    • Ceas: "16 MHz (PLL)" (setare alternativă numai pentru ATtiny85)
    • Port: ???
  6. selectați Programator:

    Instrumente> Programator: „Arduino ca ISP” (NU „ArduinoISP”!)

  7. setați setările siguranței (ceasul etc.):

    Instrumente> Burn Bootloader

  8. încărcați acest cod (LED-ul de eroare al programatorului trebuie să fie stins, altfel resetați-l)
  9. Aspect ATtinyX5 Pin (ATtiny85):

    1. Pinul 1: PB5 (RST)
    2. Pinul 2: PB3 (A3) - conectat opțional prin 220ohm la 1 <-TX
    3. Pinul 3: PB4 (A2) - conectat la DATA cu 1 fir
    4. Pinul 4: GND - conectat la GND
    5. Pinul 5: PB0 (PWM) - conectat la senzorul I2C SDA
    6. Pinul 6: PB1 (PWM) - conectat la LED cu 4.7k la GND
    7. Pinul 7: PB2 (A1) - conectat la senzorul I2C SCL
    8. Pinul 8: VCC - conectat la 5V

Lucrul cu ATTiny85 are nevoie de un pic mai mult de lucru deoarece trebuie să obțineți biblioteci suplimentare pentru I2C comm (adafruit / TinyWireM) și ieșire serială (TinyDebugSerial). În plus, deoarece memoria este destul de limitată, s-ar putea să doriți să lucrați mult cu #define de ex. pentru a elimina depanarea în serie. În exemplu, puteți vedea toate acestea aruncate împreună.

Pentru testare, primul pas este să verificați dacă LED-ul clipește cu frecvența corectă, 0,5Hz. Apoi conectați-l la magistrala 1wire și verificați dacă noul dispozitiv.

Recomandat: