Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Raspberry Pi-temperatuursensor

Een paar weken geleden kocht ik een Raspberry Pi. Na het lezen van de Raspberry Pi-gebruikershandleiding van Eben Upton, met name de twee hoofdstukken waarop hij de aandacht vestigt op de GPIO, kreeg ik een idee voor mijn eerste project. Het bericht behandelt de eerste iteratie van een project voor het bewaken van de temperatuur van thuis dat ik heb samengesteld met behulp van een Raspberry Pi, een MCP9808, een oude Mac Mini (begin 2008), InfluxDB, Grafana, een beetje Python en runit.

De sensorhardware

Voor dit project heb ik ervoor gekozen om het MCP9808 Breakout Board van Adafruit te gebruiken - een uitstekende bron voor componenten, circuits en ideeën. Ik heb dit apparaat om een ​​paar redenen gekozen:

  1. Het wordt bestuurd via I²C - Raspberry Pi's GPIO ondersteunt de vereiste I²C-bus via pinnen 3 (Serial Data Line, SDA) en 5 (Serial Clock Line, SCL)
  2. Het werkt in het vermogens- en logische bereik van 2,7 V tot 5,5 V - de Raspberry Pi levert stroomleidingen van 3,3 V en 5 V
  3. Het was vrij goedkoop (<$ 5 USD) - Mijn soldeervaardigheden zijn niet de beste.

Circuitmontage

Het MCP9808 Breakout Board wordt grotendeels geassembleerd door Adafruit verzonden. Voor deze specifieke kit hoeft u alleen de meegeleverde 8-pins headerstrip aan het breakout-bord te solderen.

Ik gebruikte een GPIO Breakout en een breadboard om de Raspberry Pi op de MCP9808 aan te sluiten; deze benadering is iets gemakkelijker te beheren, corrigeert bedradingsfouten en is minder permanent dan het solderen van de sensor aan de Raspberry Pi. Om temperaturen van de MCP9808 te lezen, zijn alleen de voedingspin, aarde en de I²C SDA- en SCL-pinnen vereist:

De overige, optionele pinnen worden in dit project niet gebruikt. Ze bieden oplossingen voor problemen met I²C-adressering wanneer meerdere apparaten op dezelfde bus worden gebruikt en een pin om te waarschuwen als de sensor een temperatuur boven of onder een drempelwaarde leest.

De datastore

Ik wist dat ik het project wilde ondersteunen met een permanente datastore. Hierdoor zou ik gegevenspunten kunnen vastleggen en deze later kunnen analyseren voor algemene trends, kruisverwijzingen naar verwarmings-/koelingspatronen met weersomstandigheden, enz.

Ik koos voor InfluxDB vanwege de tijdgerichte querytaal en het opslagmodel. Ik installeerde Influx op een oude Mac Mini (begin 2009 met OSX 10.10) die ik onder mijn bureau had zitten. Het in gebruik nemen van een basisinstallatie van InfluxDB is goed gedocumenteerd; aangezien ik de Homebrew al gebruik om de meeste van mijn afhankelijkheden van derden te beheren en er een formule voor InfluxDB bestaat, werd de installatie voltooid door brew install influxdb uit te geven. .

Configureer de InfluxDB-database

Met InfluxDB geïnstalleerd, heb ik een database opgezet om mijn temperatuurmetingen op te slaan en een databasegebruiker om deze te beheren. Ik heb hiervoor de webconsole van mijn InfluxDB-instantie gebruikt; standaard draait het op poort 8083 van de InfluxDB-host.

Raspberry Pi-configuratie

Nu de hardware en datastore zijn ingesteld, is er een beetje OS-configuratie nodig voor een kant-en-klare Raspberry Pi om via de I²C-bus met de MCP9808 te communiceren.

I²C inschakelen

Standaard laadt de Raspberry Pi niet de vereiste kernelmodules om de I²C-bus te gebruiken. Om I²C-communicatie via de GPIO mogelijk te maken, heb ik de volgende twee regels toegevoegd aan /etc/modules

i2c-bcm2708i2c-dev 

Start vervolgens de Raspberry Pi opnieuw op

sudo reboot 

Nadat het systeem is geïnitialiseerd, moet het systeem kunnen herkennen dat de MCP9808 is aangesloten. Ik gebruikte de i2cdetect cli tool om dit te doen:

sudo i2cdetect 1 # channel 1 is de standaard op het Raspberry Pi B+ model 

De sensorsoftware

Adafruit levert een MCP9808-wikkel en een I²C-abstractie. Ik heb deze beide gebruikt in het hoofdstuurprogrammascript voor dit project.

Build-afhankelijkheden installeren

sudo apt-get updatesudo apt-get install build-essential python-dev python-smbus 

Installeer de Adafruit_Python_MCP9808 wrapper

cd ~/Downloadsgit-kloon https://github.com/adafruit/Adafruit_Python_MCP9808/blob/master/Adafruit_MCP9808cd Adafruit_MCP9808sudo python setup.py install 

Hiermee wordt ook de I²C-abstractie geïnstalleerd, aangezien de MCP9808-wrapper hiervan afhankelijk is.

Lezen, rapporteren, herhalen

Vervolgens schreef ik een klein pythonscript, poll.py , om met een interval van de MCP9808 te lezen en de bevindingen te rapporteren aan de mcp9808_test InfluxDB-database-instantie.

#!/usr/bin/python import time import Adafruit_MCP9808.MCP9808 as MCP9808 from influxdb import InfluxDBClient # Genereert de benodigde payload om # temperatuurgegevens in de InfluxDB te plaatsen def temperature_data(degrees_c):return [ { 'points':[[c_to_f(degrees_c)]], 'name':'Temperature Readings', 'columns':['degrees_f']}] # Converteert temperatuurrepresentaties in Celsius # naar Farenheight def c_to_f(c):return c * 9.0 / 5.0 + 32.0 # Initialiseert communicatie met de MCP9808 # via de I2C-bus. sensor =MCP9808.MCP9808() sensor.begin() # Bepaalt het interval waarop de capture-logica # zal plaatsvinden capture_interval =60.0 # Elke 60 seconden # Brengt een verbinding tot stand met de mcp9808_test # InfluxDB-instantie influxClient =InfluxDBClient('', 8086, 'mcp9808', '', 'mcp9808_test') # Lezen, Rapporteren, Herhaal terwijl True:temp =sensor.readTempC() print "Temperature {0:0.3} F".format( c_to_f(temp)) influxClient.write_points(temperature_data(temp)) time.sleep(capture_interval)

Nu kan het worden uitgevoerd met behulp van de volgende opdracht; merk op dat het script moet worden uitgevoerd als de root gebruiker van de Raspberry Pi om te communiceren met de GPIO.

sudo python /poll.py 

For-ever

Hoera! Alles was up and running... totdat ik de aan/uit-schakelaar van de powerstip onder mijn bureau indrukte. Op dit punt realiseerde ik me dat ik ervoor wilde zorgen dat de poll.py script liep zolang de Raspberry Pi stroom had. Om dit te bereiken heb ik de runit process supervisor gebruikt.

Voor meer details:Raspberry Pi-temperatuursensor


Productieproces

  1. Raspberry Pi Temperature Logger
  2. Raspberry Pi-temperatuurprofiel met LabVIEW
  3. Meet temperaturen met een 1-draads DS18B20-sensor en Raspberry Pi
  4. Raspberry Pi temperatuur- en vochtigheidsnetwerkmonitor
  5. Temperatuur aflezen met DS18B20 | Raspberry Pi 2
  6. Temperatuurbewaking op de Raspberry Pi
  7. Temperatuur meten met RASPBERRY PI
  8. TMP006 Temperature Sensor Python Library met Raspberry pi,
  9. Python- en Raspberry Pi-temperatuursensor
  10. Raspberry Pi-weerstation
  11. Temperatuur bewaken met Raspberry Pi