# DS485 - Concentratore per sensori di temperature DS18B20

<abstract>
Il DS485 è una scheda Linux embedded in grado di raccogliere dati da un gruppo di sensori di temperatura 
digitali 1-wire DS18B20 e inviarne i dati su bus RS485, WiFi o LAN. La scheda è disegnata sul modulo SOM
[Arietta G25](https://www.acmesystems.it/arietta).
</abstract>


# Software

## Linux Kernel e rootfs

La microSD della DS485 è stata realizzata compilando il Kernel 4.9.79

* @article='compile_linux_4_4_X_LTS'

Il dts utilizzato è questo:

* [acme-arietta-ds485.dts](./acme-arietta-ds485.dts)

La distribuzione Linux usata è la Debian Jessie 8.8 contenuta nella immagine
disponibile da questo link:

* @article='download_arietta'

## Applicativo in Python

Il programma di gestione della DS485 è stato scritto in Python e si trova sul
seguente repository GitHub:

* [https://github.com/tanzilli/ds485](https://github.com/tanzilli/ds485)

Il software si compone di una parte che gira sul concentratore (di solito una Raspberry Pi)
e una parte che gira sulla scheda DS485.

La parte su arietta si chiama [ds485.py](ds485.py) e permette di:

* Accettare comandi da RS485
* Gestire il rivelamento automatico dei sensori DS18B20 connessi ai 4 bus 1-wire di cui è dotata la scheda
* Visualizzare su un display LCD alfanumerico 16x2 retroilluminato le letture di temperature 
* Gestire una semplice interfaccia utente per l'installatore per verificare la corretta funzionalità dei sensori connessi e impostare l'indirizzo sul bus RS485 del concentratore
* Inviare in remoto i dati istantanei di temperatura letti
* Consentire di pilotare il relè a bordo con comandi RS485

Da una Raspberry Pi è possibile interrogare più moduli Arietta G25 tramite una sola interfaccia RS485

Per provare gli esempi sulla Raspberry master occorre installare:

	sudo apt update
	sudo apt python-serial

Ecco alcuni programmi d'esempio per la Raspberry Pi che fa da concentratore:

* [try_read.py](try_read.py) che legge e visualizza i dati provenienti dai concentratori DS485 sul campo
* [try_relay.py](try_relay.py) che accende e spegne un relè su un dato concentratore

## Password

Accesso alla CM3-Home da SSH

>User: pi
>Password: acmesystems

Accesso ad Arietta da SSH

>User: root
>Password: acmesystems


# Hardware

<img src="./ds485_top.jpg" width="420px">

## Caratteristiche

* Scheda ARM9 a 400MHz con 256MB di memoria [Arietta G25](https://www.acmesystems.it/arietta)
* 3 porte USB host
* 1 bus RS485 non optoisolato con morsetto in e out
* 4 bus 1-wire indipendenti su morsetti a tre viti
* Display LCD alfanumerico retroilluminato 16x2 Winstar
	* [Datasheet](https://www.acmesystems.it/download/datasheets/LCD-1.pdf) 
	* [Daisy-24](https://www.acmesystems.it/DAISY-24) 
* 4 pulsanti su PCB
* Alimentazione di ingresso 9-24 volt DC ([vedi DC/DC converter EPS](https://www.acmesystems.it/EPS) con morsetti in e out
* Range di temperatura esteso -40 +85 (ad eccezione dell'LCD)


## Schema elettrico

* [Schema elettrico](./ds485_schematic.pdf) (da aggiornare)


## Architettura interna

<img src="./ds485_arch.jpg" class="img-responsive center-block" width="60%">


### Case

La scheda è a frame aperto e disegnata per essere montata all'interno di una scatola di derivazione [Gewiss GW 44 207](https://shop.rexel.it/gewiss-gw44207-cassetta-di-derivazione-stagna-liscia-190x140x70.html)

<img src="./gw44207.jpg">

### Segnali sui morsetti a vite

| J1 (SX) | J3 (DX) |
|---------|---------|
|    +24V |     GND |
|     GND |     1Wa |
|	    A |     3V3 |
|	    B |     GND |
|    +24V |     1Wb |
|     GND |     3V3 |
|       A |     GND |
|       B |     1Wc |
|       - |     3V3 |
|      NO |     GND |
|       C |     1Wd |
|      NC |     3V3 |

### Arietta debug port

| Pin # | Signal |
|-------|--------|
| 3 TXD |        |
| 4 RXD |        |
| 6 GND |        |

<img src="./ds485_debug.jpg">
    

### Pin usati su Arietta G25

<abstract>
Pin utilizzati su Arietta G25 e pin disponibili per eventuali estensioni
</abstract>


| Pinout Arietta | Pin Atmel   | Uso su scheda | Segnali liberi |
|----------------|-------------|---------------|----------------|
| J4.1           | 5VDC in     | 5VDC          |                |
| J4.2           |             |               | VBAT           |
| J4.3           |             |               | NRST           |
| J4.4           | USB A D-    | USB Host A D- |                |
| J4.5           | 3V3 out     |               | 3V3 out        | 
| J4.6           | USB A D+    | USB Host A D+ |                |
| J4.7           | PA23        |               | SPI1 CK        |    
| J4.8           | PA22        |               | SPI1 MOSI      |     
| J4.9	         | GND         | GND           |                |
| J4.10          | PA21        |	           | SPI1 MISO      |
| J4.11          | PA24        | 1-WIRE 1      |                |
| J4.12          | PA31        | LCD SCL I2C   |                |
| J4.13          | PA25        | 1-WIRE 2      |                |
| J4.14          | PA30        | LCD SDA I2C   |                |
| J4.15          | PA26        | 1-WIRE 3      |                | 
| J4.16          | USB B D+    | USB Host B D+ |                |
| J4.17          | PA27        | 1-WIRE 4      |                |
| J4.18          | USB B D-    | USB B D-      |                |
| J4.19          | PA28        | LCD backlight |                |
| J4.20          | USB C D-    | USB C D-      |                |
| J4.21          | PA29        |               | PA29           |
| J4.22          | USB C D+    | USB C D+      |                |
| J4.23          | PA0         |               | SPI1 CS1       |	
| J4.24          | PA1         |               |                |
| J4.25          | PA8         |               | SPI1 CS0       |
| J4.26          | PA7         |               | PA7            |	
| J4.27          | PA6         | RXD1 < RS485  |                |
| J4.28          | PA5         | TXD1 > RS485  |                |
| J4.29          | PC28        | Relay         |                |
| J4.30          | PC27        | DE   > RS485  |                |
| J4.31          | PC4         | USB On        |                |
| J4.32          | PC31        |               | PC31           |  
| J4.33          | PC3         | Switch OK     |                | 
| J4.34          | PB11        |               | ADC0 or PWM0   |  
| J4.35          | PC2         | Switch >      |                |
| J4.36          | PB12        |               | ADC1 or PWM1   |  
| J4.37          | PC1         | Switch <      |                |
| J4.38          | PB13        |               | ADC2 or PWM2   |  
| J4.39          | PC0         | Switch ESC    |                |
| J4.40          | PB14        |               | ADC3 or PWM3   |  

* [Pinout Arietta G25](https://www.acmesystems.it/pinout_arietta)


## Troubleshootings

### Interfaccia WiFi o Eth non funzionante

Se si cambia l'interfaccia WiFi o Eth sulla porta USB potrebbe non attivarsi. In questo caso
provare a cancellare il file 

  /etc/udev/rules.d/70-persistent-net.rules
 
e a fare il reboot  

##Links

* @article='1wire'

@include='bio_sergio_tanzilli'	


