Hallo zusammen,
habe nun seit ein paar Tagen meinen Raspberry zu Hause und das ein oder andere mal ausprobiert.
Als erstes Projekt habe ich mir eine Solarthermie-Steuerung überlegt.
Was damit alles möglich sein soll, habe ich mir mal notiert obs alles wird, wird sich zeigen.
Habe mal damit angefangen die DS18B20 Temp-Sensoren auszulesen und das Skript, welches mir als Vorlage diente, mal ganz simpel abgeändert.
Leider habe ich mit C/C++ nur die Grundlagen inne, das was man halt mal vor ein paar Jahren in den Basics vermittelt bekommen hat. Da waren es dann simple Progrämmchen in der Cmd, ein bisschen Oberfläche.
Ich kann mir nun nicht wirklich vorstellen wie ich meines umsetzen soll, da mir einfach weiterführende Techniken fehlen. Z.b. darf die Anlage nur unter gewissen Bediengungen laufen wenn dann aber eine andere Bedienung erreicht ist muss sie abschalten.
Sobald aber diese Bediengung wieder hinfällig ist soll sie wieder einschalten.
Ich muss das alles selber mal noch auf Papier bringen, evtl. wirds mit dann selber klar.
Habe mal meinen bisherigen Code mit angehängt, aber ich glaube da ist mehr wie ne einfache If-Schleife nötig.
Hauptprogramm
#include </home/pi/tutorials/functions.h>
char puffer[16] = "28-000005784c3d";
char solar[16] = "28-0000057717de";
float on = 3.0;
float off = 1.5;
float solar_max = 110.0;
float solar_min = 40;
int main(void){
while(1) {
printf("Akt. Temperaturen:\nPuffer: %.3f\nSolar: %.3f\n", read_temp(puffer), read_temp(solar));
if (read_temp(solar) >= read_temp(puffer) + on) {
printf("Temperatur erreicht\n");
}
else {
printf("Temperatur nicht erreicht\n");
}
}
}
Alles anzeigen
eigene Funktion
//Include
#include <stdio.h>
//#include <dirent.h>
#include <string.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
//DS18B20 Temperatur-Sensor auslesen
float read_temp(char *device){
//Variablen-Definition
char path[] = "/sys/bus/w1/devices";
char sel_dev[128];
char buf[256];
char tmpData[6];
ssize_t numRead;
//Pfad zum Sensor definieren
sprintf(sel_dev, "%s/%s/w1_slave",path, device);
//Datei des Sensors öffnen
int fd = open(sel_dev, O_RDONLY);
if(fd == -1) {
perror ("Couldn't open the w1 device.");
return 1;
}
//Datei in Buffer einlesen
numRead = read(fd, buf, 128);
//Temperatur au Buffer auslesen
strncpy(tmpData, strstr(buf, "t=") + 2, 5);
//String in float umwandeln
float tempC = (strtof(tmpData, NULL)) / 1000;
//Datei des Sensors schließen
close(fd);
return tempC;
}
Alles anzeigen
Hat jemand passende Quellen?
Danke