User Tools

Site Tools


raspberry_pi:projects:ultrafreezer

This is an old revision of the document!


Sistema de control de temperatures del congelador de -80 (raspi)

Hardware

Per adaptar el sensor tipus PT100 es pot utilitzar el MAX31855 que pot utilitzar SPI per comunicar amb la Raspberry Pi. Es pot utilitzar tan el software SPI a qualsevol dels pins GPIO o es pot fer per hardware SPI. Si no es segur de quina opcio utilitzar es preferible utilitzar software SPI ja que es mes flexible i la velocitat no es critica utilitzant el MAX31855.

Hardware per utilitzar Software SPI

Per utiltzar software SPI a la Raspberry Pi connectar el MAX31855 a la Raspberry Pi com es veu a la figura. Es poden utilitzar 3 digital IO pins qualsevol per CLK, CS, y DO.

  1. Connectar Pi 3.3V a MAX31855 Vin.
  2. Connectar Pi GND a MAX31855 GND.
  3. Connectar Pi GPIO 18 a MAX31855 DO.
  4. Connectar Pi GPIO 24 a MAX31855 CS.
  5. Connectar Pi GPIO 25 a MAX31855 CLK

Software

Dependencies

Primer executar les dependencies escribint al terminal:

sudo apt-get update
sudo apt-get install build-essential python-dev python-pip python-smbus git

RPi.GPIO library

Per estar segur de que les llibreries GPIO estan instalades escriure a terminal:

sudo pip install RPi.GPIO

Library MAX31855

Descarregar la llibreria Python del MAX31855 Python al home directory executant:

cd /home
git clone https://github.com/adafruit/Adafruit_Python_MAX31855
cd Adafruit_Python_MAX31855
sudo python setup.py install

Configuracio i prova

Per configurar i provar el hardware/softwareTo es pot utilitzar els programes incloisos en el directori examples i obrir el programa simpletest.py script en un editor

sudo nano simpletest.py 

Baixant pantalla es poden veure comentades les diverses opcions de configuracio, cal descomentar les que es facin servir:

# Uncomment one of the blocks of code below to configure your Pi or BBB to use
# software or hardware SPI.
# Raspberry Pi software SPI configuration.
CLK = 25
CS = 24
DO = 18
sensor = MAX31855.MAX31855(CLK, CS, DO)
# Raspberry Pi hardware SPI configuration.
#SPI_PORT = 0
#SPI_DEVICE = 0
#sensor = MAX31855.MAX31855(spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE, max_speed_hz=5000000))
# BeagleBone Black software SPI configuration.
#CLK = 'P9_12'
#CS = 'P9_15'
#DO = 'P9_23'
#sensor = MAX31855.MAX31855(CLK, CS, DO)
# BeagleBone Black hardware SPI configuration.
#SPI_PORT = 1
#SPI_DEVICE = 0
#sensor = MAX31855.MAX31855(spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE, max_speed_hz=5000000))

En el nostre cas fem servir les opcions Software SPI amb la asignacio de pins que hem muntat fisicament a:

Per defecte la configuracio per fer servir Raspberry Pi amb software SPI esta no comentada, si s´han fet canvis o s´han conectat altres pins es precis modificar la configuracio en consecuencia.

Un cop la configuracio esta correctament (des)comentada es pot guardar el fitxer i sortir de l éditor de texte.

Es pot provar el funcionament correcte escribint:

sudo python simpletest.py 

Si tot es correcte es podra veure una sortida com la seguent:

Press Ctrl-C to quit.
Thermocouple Temperature: 22.000*C / 71.600*F
Internal Temperature: 23.312*C / 73.963*F
Thermocouple Temperature: 22.250*C / 72.050*F
Internal Temperature: 23.375*C / 74.075*F
Thermocouple Temperature: 27.500*C / 81.500*F
Internal Temperature: 23.312*C / 73.963*F
...
 

Per entendre el programa es pot obrir simpletest.py amb un editor de texte.El primer que es troba es:

import Adafruit_MAX31855.MAX31855 as MAX31855

Es la importacio de la llibreria a traves de una comanda Python. A continuacio hi ha la configuracio del programa:

# Uncomment one of the blocks of code below to configure your Pi or BBB to use
# software or hardware SPI.
# Raspberry Pi software SPI configuration.
CLK = 25
CS = 24
DO = 18
sensor = MAX31855.MAX31855(CLK, CS, DO)
# Raspberry Pi hardware SPI configuration.
#SPI_PORT = 0
#SPI_DEVICE = 0
#sensor = MAX31855.MAX31855(spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE, max_speed_hz=5000000))
# BeagleBone Black software SPI configuration.
#CLK = 'P9_12'
#CS = 'P9_15'
#DO = 'P9_23'
#sensor = MAX31855.MAX31855(CLK, CS, DO)
# BeagleBone Black hardware SPI configuration.
#SPI_PORT = 1
#SPI_DEVICE = 0
#sensor = MAX31855.MAX31855(spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE, max_speed_hz=5000000))

La part no comentada ha de coorespondre amb el hardware.

Finalment el exemple entra a un bucle on llegeix mesures de temperatura i les imprimeix cada segon. El detall important es que hi han dues funcions de mesura de la temperatura, readTempC() y readInternalC().

# Loop printing measurements every second.
print 'Press Ctrl-C to quit.'
while True:
temp = sensor.readTempC()
internal = sensor.readInternalC()
print 'Thermocouple Temperature: {0:0.3F}*C / {1:0.3F}*F'.format(temp, c_to_f(temp))
print ' Internal Temperature: {0:0.3F}*C / {1:0.3F}*F'.format(internal, c_to_f(internal))
time.sleep(1.0)

La funcio readTempC() llegeix la temperatura de la sonda, la funcio readInternalC() llegeix la temperatura del integrat MAX31855.

configuracio MySql/creacio base de dades per guardar dades Temperatura

Instalar Mysql/MariaDb y els complements necesaris:

sudo apt-get install mysql-server python-mysqldb

Entrar al mode consola de sql.

sudo mysql -u root -p -h localhost

Pulsar Enter per password (buit)y entrarem en la consola MariaDb

Sobre consola

Primer, crear base de dades temperatures:

CREATE DATABASE temperatures;

Seleccionar la base de dades creada:

USE temperatures;

Crear usuari i garantir acces a la base de dades a aquest usuari:

CREATE USER 'logger'@'localhost' IDENTIFIED BY 'password';
 
GRANT ALL PRIVILEGES ON temperatures.* TO 'logger'@'localhost';
 
FLUSH PRIVILEGES;

El usuari/privilegis estan creats. Ara es possible cambiar de l´usuari root a aquest nou usuari:

quit

Tornar a conectar amb el nou usuari

sudo mysql -u logger -p -h localhost

Donar la contrasenya implementada al pas anterior.

Crear Temperaturedata per guardar les dades del sensor y data/hora .

Per crear la taula:

USE temperatures;

Crear la primera taula amb les columnes dateandtime, sensor, temperature y humidity:

CREATE TABLE temperaturedata (dateandtime DATETIME, sensor VARCHAR(32), temperature DOUBLE, humidity DOUBLE);

Es pot confirmar, que la taula buida esta creada amb:

SELECT * FROM temperaturedata;

Si la taula exiteix, es veura: “Empty Set (0.00 sec)”

La base de dades esta configurada es pot sortir de mysql:

quit

Reiniciar mysql perque els canvis tinguin efecte:

sudo /etc/init.d/mysql restart

=== Software de lectura de la sonda i escritura a base de dades==?

El programa simpletest2.py llegeix la temperatura de la sonda i l´escriu a la base de dades .

import time
import datetime
import Adafruit_GPIO.SPI as SPI
import Adafruit_MAX31855.MAX31855 as MAX31855
import sys
import urllib2
import mysql.connector
 
# Raspberry Pi software SPI configuration.
CLK = 25
CS  = 24
DO  = 18
sensor = MAX31855.MAX31855(CLK, CS, DO)
 
 
# Loop printin measurements every second.
#print('Press Ctrl-C to quit.')
#while True:
temp = sensor.readTempC()
internal = sensor.readInternalC()
print('Temperatura: {0:0.2F} C grados '.format(temp))
#   print('    Internal Temperature: {0:0.3F}*C / {1:0.3F}*F'.format(internal, c_to_f(internal)))
print("Temperature Data Logger\n")
#Open Log File
f=open('tempdata.txt','a')
now = datetime.datetime.now()
timestamp = now.strftime("%Y/%m/%d %H:%M")
outvalue = temp
outstring = str(timestamp)+"  "+str(outvalue)+" C "+"\n"
print outstring
f.write(outstring)
f.close()
# time.sleep(1.0)
 
conexion1=mysql.connector.connect(host="localhost",
                                  user="jmbargallo",
                                  passwd="antaviana92",
                                  database="temperatures")
cursor1=conexion1.cursor()
 
sql="insert into temperaturedata(dateandtime, sensor, temperature, humidity) values (%s,%s,%s,%s)"
datos=(timestamp, 2,outvalue,20.0)
cursor1.execute(sql, datos)

Software per enviar les dades a Thingspeak

El programa IOT.py serveix per enviar les dades a un compte de thingspeak.

import sys
import urllib2
import RPi.GPIO as GPIO
import Adafruit_GPIO.SPI as SPI
import Adafruit_MAX31855.MAX31855 as MAX31855
 
# Raspberry Pi software SPI configuration.
CLK = 25
CS  = 24
DO  = 18
sensor = MAX31855.MAX31855(CLK, CS, DO)
 
# Write API Key ThingSpeak.com
miWriteAPIKey = "R2QX9L6O060V7ZFL"
 
def getSensorData():
   T = sensor.readTempC()
   return ( str(T))
def main():
   print 'Iniciando...'
   baseURL = 'https://api.thingspeak.com/update?api_key=%s' % miWriteAPIKey
   while True:
       try:
           T = getSensorData()
           f = urllib2.urlopen(baseURL + "&field3=%s&" % (T))
           print f.read()
           f.close()
           sleep(5)
       except:
           print 'Terminado.'
           break
if __name__ == '__main__':
   main()
raspberry_pi/projects/ultrafreezer.1738768833.txt.gz · Last modified: 2025/02/05 15:20 by jmbargallo