Hallo zusammen!
Ich bin blutiger Anfänger was Arduino angeht.. zur Zeit wälze ich mich durch Bücher und vorhande Sketche um mein Problem zu beheben!
Ich habe eine Modellturbine gebaut und möchte dort zwei Merkmale ermitteln. TEMPERATUR und DREHZAHL!
TEMPERATUR war einfach mittels Max6675. Die DREHZAHL zu ermitteln hingegen etwas schwieriger!
Hier verwende ich eine Ir lichtschranke die aus zwei breakouts besteht diode und empfänger..
Das Board ist ein Arduino UNO!! Und ich gebe es aus an ein Lcd 16x2 mit i2c !!!!
Hier mein sketch ..
#define PIN_LED 9
#define PIN_LED_DETECTOR A0
// [0..1023] = [dark..bright]
const unsigned int SENSOR_SENSITIVITY = 1000; //500
// e.g. number of blades in a fan
const byte INTERUPTIONS_PER_REVOLUTION = 2; //2
// in ms
const unsigned long CALCULATE_INVERVAL = 1000; //2500
bool sensorStatus = false;
unsigned int brightness = 0, rpm = 0;
unsigned long interruptions, revolutions = 0, lastCalculateTime;
//LCD config
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
//MAX6675 config
#include <max6675.h>
int soPin = 4;// SO=Serial Out
int csPin = 5;// CS = chip select CS pin
int sckPin = 6;// SCK = Serial Clock pin
MAX6675 thermocouple(sckPin, csPin, soPin);
void setup()
{
lcd.init();
lcd.backlight();
Serial.begin(9600);
lastCalculateTime = millis();
pinMode(PIN_LED, OUTPUT);
digitalWrite(PIN_LED, HIGH);
}
void loop()
{
if (millis() - lastCalculateTime > CALCULATE_INVERVAL) {
revolutions = interruptions / INTERUPTIONS_PER_REVOLUTION;
rpm = revolutions / (CALCULATE_INVERVAL / 1000) * 60;
revolutions = 0;
interruptions = 0;
lastCalculateTime = millis();
// show sensor brightness
Serial.print("B = " + (String)+brightness);
// show amount of interruptions of the sensor
Serial.print("; I = " + (String)interruptions);
// show amount of revolutions
Serial.print("; R = " + (String)revolutions);
// show rpm = "revolutions per minute"
Serial.println("; " + String(rpm) + " RPM");
Serial.println(thermocouple.readCelsius());
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Temperatur C");
lcd.setCursor(14,0);
lcd.print(thermocouple.readCelsius());
lcd.setCursor(0,1);
lcd.print("U/Min");
lcd.setCursor(10,1);
lcd.print(String(rpm));
}
brightness = analogRead(PIN_LED_DETECTOR);
if (sensorStatus == false && brightness >= SENSOR_SENSITIVITY) {
interruptions++;
sensorStatus = true;
}
if (sensorStatus == true && brightness < SENSOR_SENSITIVITY) {
sensorStatus = false;
}
}
Ich habe mir einen Teststand gebaut für die Lichtschranke!! Problem ist folgendes ...
Bei steigender Drehzahl sinkt der Wert auf dem Lcd!! Ich Messe die Unterbrechungen durch eine Welle hindurch.. also die Welle hat eine Querbohrung, durch die der Ir empfangen werden kann.. Bitte denkt daran ich habe wenig Erfahrung hier !!! ![]()
Vielleicht kann mir hierzu jemand die nötigen Infos geben...