Lieber Besucher, herzlich willkommen bei: We-Mod-It | Das Forum von Moddern für Modder. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.
Benutzerinformationen überspringen
1. Platz Enermax Casecon Contest
Registrierungsdatum: 12. März 2012
Wohnort: München
Beruf: Maschinenbautechniker
Zitat
/*
Arduino Tutorial 4.1 - Lüfterdrehzahl auslesen - Reiner Code
by Scynd 2014
In diesem Tutorial geht es darum, die Drehzahl auszulesen wären der Lüfter mit einem festen PWM Wert gesteuert wird.
*/
//Konstante Variablen
const int FanPin = 9; // Lüfter an Pin 9 angeschlossen
const int TachoPin = 2; // Pin des Tachosignals des Lüfters
// Variablen
int FanSpeed = 160; // Variable für die Lüftergeschwindigkeit
int AbfrZeit = 2000; // Zeitabstand für die Abfragen des Tachosignals
long TachoMillis = AbfrZeit; // Zeitabstand für Pulse Stretching Funktion
float RPS = 0; // Variable mit Kommastelle für die Berechnung der Umdrehungen pro Sekunde
int RPM = 0; // Variable für die gemittelte Drehzahl
float UmdrZeit = 0; // Variable mit Kommastelle für die Zeit pro Umdrehung des Lüfters
float FlankenZeit =0; // Variable mit Kommastelle für die Zeit pro Puls des Lüfters
void setup() {
TCCR1B = TCCR1B & 0b11111000 | 0x01; // Setzt Timer1 (Pin 9 und 10) auf 31000Hz
Serial.begin(9600);
pinMode(FanPin, OUTPUT); //Setzt den Lüfter Pin als Ausgang
pinMode(TachoPin, INPUT); //Setzt den Tacho Pin als Eingang
}
void loop() {
analogWrite(FanPin, FanSpeed); // Gibt die Variable mit PWM aus
// Alle 2000ms pulse_stretch starten um die Drehzal auszulesen
if((millis() - TachoMillis) >= AbfrZeit) {
pulse_stretch();
}
}
void pulse_stretch() {
analogWrite(FanPin, 255); // Den Lüfter konstant mit Strom versorgen damit das Tachosignal funktioniert
FlankenZeit = pulseIn(TachoPin, HIGH); // Abfrage der Zeit pro Puls in Mikrosekunden
analogWrite(FanPin, FanSpeed); // Setzt die Lüftergeschwindigkeit zurück
UmdrZeit = ((FlankenZeit * 4)/1000); // Berechnung der Zeit pro Umdrehung in Millisekunden
RPS = (1000/UmdrZeit); // Umrechnung auf Umdrehungen pro Sekunde
RPM = (RPS*60); // Umrechnung auf Umdrehungen pro Minute
Serial.println(RPM); // Ausgabe der Drehzahl im Seriellen Monitor
TachoMillis = millis(); // Die TachoMillis werden aktualisiert um die nächsten 2000ms zählen zu können
}
Zitat
/*
Arduino Tutorial 4.2 - Drehzahl mit Potisteuerung
by Scynd 2014
In diesem Tutorial geht es darum, die Lüftergeschwindigkeit mit Hilfe eines Drehpotenzometers einzustellen.
*/
//Konstanten
const int FanPin = 9; // Lüfter an Pin 9 angeschlossen
const int PotiPin = A0 ; // Potenzometer am analogen Eingang Pin 0 angeschlossen
const int TachoPin = 2; // Pin des Tachosignals des Lüfters
// Variablen
int FanSpeed = 0; // Variable für die Lüftergeschwindigkeit
int FanMin = 50; // Minimaler PWM Wert für den Lüfter. Kommt auf den Lüfter an
int PotiVar = 0 ; // Variable zum speichern des Potentiometereingangs
int AbfrZeit = 2000; // Zeitabstand für die Abfragen des Tachosignals
long TachoMillis = AbfrZeit; // Zeitabstand für Pulse Stretching Funktion
float RPS = 0; // Variable mit Kommastelle für die Berechnung der Umdrehungen pro Sekunde
int RPM = 0; // Variable für die gemittelte Drehzahl
float UmdrZeit = 0; // Variable mit Kommastelle für die Zeit pro Umdrehung des Lüfters
float FlankenZeit =0; // Variable mit Kommastelle für die Zeit pro Puls des Lüfters
void setup() {
TCCR1B = TCCR1B & 0b11111000 | 0x01; // Setzt Timer1 (Pin 9 und 10) auf 31300Hz
Serial.begin(9600);
pinMode(FanPin, OUTPUT) ; //Setzt den Lüfter Pin als Ausgang
pinMode(PotiPin, INPUT) ; //Setzt den LEDPin als Ausgang
pinMode(TachoPin, INPUT); //Setzt den Tacho Pin als Eingang
}
void loop() {
PotiVar = analogRead(PotiPin) ; // Liest das Potentiometer aus
FanSpeed = map(PotiVar, 50, 1023, FanMin, 255); // Verteilt den PWM Wert über den Messbereich des Potis
// Unterer Potenziometerbereichs (0-50) = Lüfter aus
if(PotiVar < 50) {
FanSpeed = 0;
}
analogWrite(FanPin, FanSpeed); // Gibt die Variable mit PWM aus
// Alle 2000ms pulse_stretch starten um die Drehzal auszulesen
if((millis() - TachoMillis) >= AbfrZeit) {
pulse_stretch();
}
}
void pulse_stretch() {
// Nur wenn PotiVar größer als 50 ist, wird die RPM ausgelesen
if(PotiVar > 50) {
analogWrite(FanPin, 255); // Den Lüfter konstant mit Strom versorgen damit das Tachosignal funktioniert
FlankenZeit = pulseIn(TachoPin, HIGH); // Abfrage der Zeit pro Puls in Mikrosekunden
analogWrite(FanPin, FanSpeed); // Setzt die Lüftergeschwindigkeit zurück
UmdrZeit = ((FlankenZeit * 4)/1000); // Berechnung der Zeit pro Umdrehung in Millisekunden
RPS = (1000/UmdrZeit); // Umrechnung auf Umdrehungen pro Sekunde
RPM = (RPS*60); // Umrechnung auf Umdrehungen pro Minute
Serial.println(RPM); // Ausgabe der Drehzahl im Seriellen Monitor
}
// Wenn der Lüfter nicht angesteuert wird, schreibe Drehzahl 0
else{
Serial.println("0");
}
TachoMillis = millis(); // Die TachoMillis werden aktualisiert um die nächsten 2000ms zählen zu können
}
Zitat
/*
Arduino Tutorial 3.2 - Temperaturgesteuerter Lüfter mit 10kO NTC
by Scynd 2014
In diesem Szenario geht es darum, die Lüftergeschwindigkeit über die Temperatur zu steuern.
Bei steigender Temperatur, soll auch die Lüftergeschwindigkeit steigen, bei sinkender Temperatur fallen.
*/
// Konstanten
const int FanPin = 9; // Pin für den Lüfter
const int TachoPin = 2; // Pin des Tachosignals des Lüfters
const int NTC = A0; // Pin für den 10kO NTC Wiederstand
const int NTCNominal = 10000; // Wiederstand des NTC bei Nominaltemperatur
const int TempNominal = 25; // Temperatur bei der der NTC den angegebenen Wiederstand hat
const int BCoefficient = 3977; // Beta Coefficient(B25 aus Datenblatt des NTC)
const int SerienWiederstand = 10000; // Wert des Wiederstands der mit dem NTC in Serie geschalten ist
// Variablen
int FanSpeed = 0; // Variable für die Lüftergeschwindigkeit
int FanMin = 60; // Kleinster PWM Wert für den Lüfter befor er abschält
int FanOut = 1; // Variable zum pürfen ob der Lüfter aus war
int TMin = 20; // Untere Grenze des Temperaturbereichs
int TMax = 60; // Obere Grenze des Temperaturbereichs
int AbfrageZahl = 5; // Je mehr abfragen, desto stabiler isr das Ergebnis, dauert aber länger
int Abfrage[5]; // Array Variable für das Mitteln der Temperatur http://arduino.cc/de/pmwiki.php?n=Reference/Array
float Durchschnitt = 0; // Variable für das Mitteln der Temperatur
float Temp; // Variable für die Berechnung der temperatur nach Steinhart
int AbfrZeit = 2000; // Zeitabstand für die Abfragen des Tachosignals
long TachoMillis = AbfrZeit; // Zeitabstand für Pulse Stretching Funktion
float RPS = 0; // Variable mit Kommastelle für die Berechnung der Umdrehungen pro Sekunde
int RPM = 0; // Variable für die gemittelte Drehzahl
float UmdrZeit = 0; // Variable mit Kommastelle für die Zeit pro Umdrehung des Lüfters
float FlankenZeit =0; // Variable mit Kommastelle für die Zeit pro Puls des Lüfters
void setup() {
TCCR1B = TCCR1B & 0b11111000 | 0x01; // Setzt Timer1 (Pin 9 und 10) auf 31300Hz
Serial.begin(9600); // Setzt die Baudrate für die Ausgabe am Serial Monitor auf 9600
pinMode(FanPin, OUTPUT); // Setzt den Pin des Lüfters als Ausgang
pinMode(NTC, INPUT); // Setzt den Pin des NTC Wiederstands als Eingang
pinMode(TachoPin, INPUT); //Setzt den Tacho Pin als Eingang
}
void loop() {
Temperaturberechnung(); // Startet die Temperaturerfassungsroutine
// Lüftergeschwindigkeit über den Temperaturbereich einstellen
// TMin->0% PWM | TMax->100% PWM
FanSpeed = map(Temp, TMin, TMax, 0, 255);
// Wenn der PWM Wert unter den van FanMin fällt, schält der Lüfter ab
if (FanSpeed < FanMin) {
FanSpeed = 0;
FanOut = 1;
}
// Hysterese
if (FanOut == 1) {
FanSpeed = 0;
}
if(Temp >= 32) {
if(FanOut == 1) {
FanOut = 0;
analogWrite(FanPin, 255);
}
}
// PWM Wert auf 255 begerenzen
if (FanSpeed > 255) {
FanSpeed = 255;
}
analogWrite(FanPin, FanSpeed); // Den Lüfter mit dem PWM Wert ansteuern
// Alle 2000ms pulse_stretch starten um die Drehzal auszulesen
if((millis() - TachoMillis) >= AbfrZeit) {
pulse_stretch();
}
}
void Temperaturberechnung() {
// Nimmt N Abfragen in einer Reihe, mit einem kurzen delay
for (int i=0; i < AbfrageZahl; i++) {
Abfrage = analogRead(NTC);
delay(10);
}
// Mittelt alle Abfragen
Durchschnitt = 0;
for (int i=0; i < AbfrageZahl; i++) {
Durchschnitt += Abfrage;
}
Durchschnitt /= AbfrageZahl;
// Umwandlung des Wertes in Wiederstand
Durchschnitt = 1023 / Durchschnitt - 1;
Durchschnitt = SerienWiederstand / Durchschnitt;
// Umrechnung aller Ergebnisse in die Temperatur mittels einer Steinhard Berechnung
Temp = Durchschnitt / NTCNominal; // (R/Ro)
Temp = log(Temp); // ln(R/Ro)
Temp /= BCoefficient; // 1/B * ln(R/Ro)
Temp += 1.0 / (TempNominal + 273.15); // + (1/To)
Temp = 1.0 / Temp; // Invertieren
Temp -= 273.15; // Umwandeln in °C
// Ausgabe an den Seriellen Monitor
Serial.print("Temperatur ");
Serial.print(Temp);
Serial.println(" *C");
delay(500);
}
void pulse_stretch() {
if (FanOut == 0) {
analogWrite(FanPin, 255); // Den Lüfter konstant mit Strom versorgen damit das Tachosignal funktioniert
FlankenZeit = pulseIn(TachoPin, HIGH); // Abfrage der Zeit pro Puls in Mikrosekunden
analogWrite(FanPin, FanSpeed); // Setzt die Lüftergeschwindigkeit zurück
UmdrZeit = ((FlankenZeit * 4)/1000); // Berechnung der Zeit pro Umdrehung in Millisekunden
RPS = (1000/UmdrZeit); // Umrechnung auf Umdrehungen pro Sekunde
RPM = (RPS*60); // Umrechnung auf Umdrehungen pro Minute
Serial.println(RPM); // Ausgabe der Drehzahl im Seriellen Monitor
}
else {
Serial.println("0"); // Ausgabe von 0 RPM
}
TachoMillis = millis(); // Die TachoMillis werden aktualisiert um die nächsten 2000ms zählen zu können
}
Dieser Beitrag wurde bereits 42 mal editiert, zuletzt von »Scynd« (8. Januar 2015, 10:38)
Benutzer, die sich für diesen Beitrag bedankt haben:
thechoozen (15.11.2014), H4wk (19.05.2016), ahlermi (19.04.2017)
Benutzerinformationen überspringen
1. Platz Enermax Casecon Contest
Registrierungsdatum: 12. März 2012
Wohnort: München
Beruf: Maschinenbautechniker
Benutzerinformationen überspringen
"Mein Name ist George - Der George"
Registrierungsdatum: 17. März 2010
Wohnort: Da wo der Berch wohnt
Beruf: Inginöööör und Freundinbeschäftiger
Benutzerinformationen überspringen
1. Platz Enermax Casecon Contest
Registrierungsdatum: 12. März 2012
Wohnort: München
Beruf: Maschinenbautechniker
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »tschidda« (29. März 2017, 12:04)
Benutzerinformationen überspringen
1. Platz Enermax Casecon Contest
Registrierungsdatum: 12. März 2012
Wohnort: München
Beruf: Maschinenbautechniker
Benutzerinformationen überspringen
1. Platz Enermax Casecon Contest
Registrierungsdatum: 12. März 2012
Wohnort: München
Beruf: Maschinenbautechniker
Benutzer, die sich für diesen Beitrag bedankt haben:
ahlermi (20.04.2017)
Benutzerinformationen überspringen
1. Platz Enermax Casecon Contest
Registrierungsdatum: 12. März 2012
Wohnort: München
Beruf: Maschinenbautechniker
Benutzerinformationen überspringen
1. Platz Enermax Casecon Contest
Registrierungsdatum: 12. März 2012
Wohnort: München
Beruf: Maschinenbautechniker
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »ahlermi« (23. Mai 2018, 16:24)
Benutzerinformationen überspringen
1. Platz Enermax Casecon Contest
Registrierungsdatum: 12. März 2012
Wohnort: München
Beruf: Maschinenbautechniker
Benutzerinformationen überspringen
1. Platz Enermax Casecon Contest
Registrierungsdatum: 12. März 2012
Wohnort: München
Beruf: Maschinenbautechniker
© 2011-2014 We-Mod-It.com | Das Forum von Moddern für Modder | © Design by Jama