Sommario:

Dispositivo client/slave generico Arduino a 1 filo (sensore): 4 passaggi
Dispositivo client/slave generico Arduino a 1 filo (sensore): 4 passaggi

Video: Dispositivo client/slave generico Arduino a 1 filo (sensore): 4 passaggi

Video: Dispositivo client/slave generico Arduino a 1 filo (sensore): 4 passaggi
Video: Wireless LAN per applicazioni industriali 2024, Dicembre
Anonim
Dispositivo client/slave generico Arduino a 1 filo (sensore)
Dispositivo client/slave generico Arduino a 1 filo (sensore)

Si prega di leggere l'Introduzione e il Passaggio 2 della mia istruzione su come costruire un display Arduino 1-wire (144 caratteri) per ottenere maggiori informazioni sulla situazione e sulle librerie disponibili. Come spiegato lì, utilizzeremo la libreria OneWire-Hub (emulatore di dispositivo slave OneWire) di orgua (attenzione, ci sono altri fork in giro) per costruire dispositivi generici a 1 filo (ad esempio sensori) utilizzando un Arduino.

Passaggio 1: software

La cosa più importante è realizzare un dispositivo che possa restituire praticamente qualsiasi tipo di valore in maniera semplice. Ciò significa che il software standard può essere utilizzato per leggere direttamente tutti i valori (nessuna conversazione o manipolazione binaria necessaria). Per questo abbiamo bisogno di un dispositivo a 1 filo predefinito molto semplice che possa restituire float ed è ampiamente supportato. L'unica scelta che conosco è il termometro DS18B20 (anche il monitor della batteria DS2438 è interessante e utile ma piuttosto complesso e quindi lento tra gli altri inconvenienti). La libreria OneWire-Hub contiene un esempio chiamato DS18B20_asInterface che fa esattamente ciò di cui abbiamo bisogno. Crea un gruppo di DS18B20 di cui ognuno rappresenta un valore float che vogliamo restituire dai nostri sensori. Le restrizioni qui sono la risoluzione e i valori devono essere nell'intervallo -55, 0 … 125, 0. Ciò può essere facilmente ottenuto - nel caso peggiore è il ridimensionamento - ed è effettivamente migliore dei valori che possono essere rappresentati ad es. i valori del DS2438 (da 1,5 a 10V). In alternativa è possibile impostare un intervallo di valori più ampio utilizzando:

setTemperatureRaw(static_cast(value * 16.0f));

ma la lettura e l'elaborazione di questi valori potrebbero non essere supportate da tutti i software in quanto non rientrano nelle specifiche.

Quello che devi sapere è che inizialmente il numero massimo di slave è limitato a 8 ma può essere modificato in "OneWireHub_config.h" aumentando HUB_SLAVE_LIMIT fino a 32. Inoltre devi assicurarti di adottare ONEWIRE_TIME_MSG_HIGH_TIMEOUT se necessario dal tuo Rete a 1 filo (ad es. x10), come spiegato nel passaggio 2 di Arduino 1-wire Display (144 caratteri). E per utilizzare la versione IDE >= 1.8.3 per compilare e caricare il codice sul tuo Arduino.

Ecco come esempio il codice del dispositivo che ho costruito di recente. Poiché presumo che tu non usi la stessa combinazione di sensori che uso io, non entrerò ulteriormente nei dettagli qui, controlla il codice e poni domande se hai bisogno di aiuto.

Passaggio 2: hardware

Hardware
Hardware

Fondamentalmente tutto ciò che puoi collegare a un Arduino può essere utilizzato come sensore preferito. L'unica restrizione è che la lettura del sensore dovrebbe essere il più veloce possibile in modo da avere tutto il tempo rimasto per la comunicazione a 1 filo (conferisci il passaggio 2 delle mie istruzioni sul display Arduino 1-wire (144 caratteri) in ordine per avere un esempio).

Un esempio di possibile hardware potrebbe essere una stazione meteo come ad esempio:

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

In aggiunta o al posto di te, potresti semplicemente voler usare Arduino stesso come sensore. Puoi leggere di più su questo nel mio istruibile sulle caratteristiche meno conosciute di Arduino: i valori possibili sono la tensione di origine e la temperatura interna.

Ecco come esempio un'immagine del dispositivo che ho costruito di recente. Poiché presumo che tu non usi la stessa combinazione di sensori che uso io, non entrerò ulteriormente nei dettagli qui, controlla il codice e poni domande se hai bisogno di aiuto.

Passaggio 3: testare il dispositivo

Collegalo alla tua rete e controlla il tuo software per tutti gli ID ROM per essere presenti e i valori che restituiscono come temperatura.

Passaggio 4: Appendice: ATtiny85

Appendice: ATtiny85
Appendice: ATtiny85

I singoli dispositivi (limitazione della memoria) possono essere eseguiti anche su un ATtiny85. Ciò richiede alcuni passaggi poiché programmiamo l'ATtiny85 utilizzando Arduino Uno come ISP con l'aiuto dell'IDE Arduino:

  • 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. usa Arduino IDE >=1.8.3
  2. installa l'opzione ATtiny su IDE

    1. File > Preferenze > URL di Boards Manager aggiuntivi:
    2. Strumenti > Tavola: ??? > Responsabile CdA…
    3. cerca: "tiny" e installa
  3. caricare lo schizzo dell'ISP su uno

    File > Esempi > ArduinoISP > ArduinoISP

  4. inserire ATtiny85 nella presa di programmazione (forza zero) e cablarlo:

    1. Arduino Pin MOSI D11 a ATtiny Pin 5
    2. Arduino Pin MISO D12 a ATtiny Pin 6
    3. Arduino Pin SCK D13 a ATtiny Pin 7
    4. Reimposta pin Arduino D10 su ATtiny Pin 1
    5. Arduino Pin GND a ATtiny Pin 4
    6. Arduino Pin VCC a ATtiny Pin 8
    7. (potrebbe essere necessario un cap >=10uF sul pin di RESET di Arduino Uno)
  5. seleziona ATtiny85 (vedi foto):

    • Tabellone: "ATtiny25/45/85"
    • Orologio timer 1: "CPU"
    • B. O. D.: "B. O. D. Disabilitato"
    • LTO (solo 1.6.11 +): "Disabilitato"
    • Chip: "ATtiny85"
    • Orologio: "8 MHz (interno)" (compatibile con ATtiny85 e ATtiny84)
    • Orologio: "16 MHz (PLL)" (impostazione alternativa solo per ATtiny85)
    • Porto: ???
  6. seleziona Programmatore:

    Strumenti > Programmatore: "Arduino come ISP" (NON "ArduinoISP" !)

  7. impostare le impostazioni dei fusibili (orologio, ecc.):

    Strumenti > Masterizza Bootloader

  8. caricare questo codice (il LED di errore del programmatore deve essere spento, altrimenti ripristinarlo)
  9. ATtinyX5 Disposizione dei pin (ATtiny85):

    1. Pin 1: PB5 (RST)
    2. Pin 2: PB3 (A3) - collegato opzionalmente tramite 220ohm a 1<-TX
    3. Pin 3: PB4 (A2) - collegato a DATA a 1 filo
    4. Pin 4: GND - connesso a GND
    5. Pin 5: PB0 (PWM) - collegato al sensore I2C SDA
    6. Pin 6: PB1 (PWM) - collegato al LED con 4.7k a GND
    7. Pin 7: PB2 (A1) - collegato al sensore I2C SCL
    8. Pin 8: VCC - collegato a 5V

Lavorare con ATTiny85 richiede un po' più di lavoro in quanto è necessario ottenere librerie aggiuntive per le comunicazioni I2C (adafruit/TinyWireM) e l'output seriale (TinyDebugSerial). Inoltre, poiché la memoria è piuttosto limitata, potresti voler lavorare molto con #define, ad es. per rimuovere il debug seriale. Nell'esempio puoi vedere tutto questo messo insieme.

Per il test il primo passo è verificare se il LED lampeggia con la frequenza corretta, 0,5Hz. Quindi collegalo al bus 1wire e verifica la presenza del nuovo dispositivo.

Consigliato: