Hallo
ich möchte mit einem Hallsensor eine Drehzahl ermitteln und diese in km/h umrechnen und damit dann einen Motor auf einer gewissen errechneten Geschwindigkeit laufen lassen. kann mir da einer weiterhelfen?
Hallo
ich möchte mit einem Hallsensor eine Drehzahl ermitteln und diese in km/h umrechnen und damit dann einen Motor auf einer gewissen errechneten Geschwindigkeit laufen lassen. kann mir da einer weiterhelfen?
Da solltest Du schon etwas konkreter werden. Mit dem Hall-IC erfasst Du z.B. Umdrehungen.
Wie die sich zu einer Geschwindigkeit verhalten hängt u.a. von Getriebeüber-/-untersetzung, Radduchmesser ab.
Gruß Tommy
Also ich möchte eine Scheibe drehen lassen. diese Soll mit 10 km/h drehen. Übersetzung gibt es da keine.
Konkret
ich starte mit einem Taster einen Motor welcher über PWM angesteuert wird. Dieser soll bei einer Geschwindigkeit von 10 km/h aufhören zu drehen. dafür möchte ich einen hallsensor benutzen.
bolli951:
Also ich möchte eine Scheibe drehen lassen. diese Soll mit 10 km/h drehen. Übersetzung gibt es da keine.Konkret
ich starte mit einem Taster einen Motor welcher über PWM angesteuert wird. Dieser soll bei einer Geschwindigkeit von 10 km/h aufhören zu drehen. dafür möchte ich einen hallsensor benutzen.
Konkret ist das immer noch nicht.
Eine Scheibe dreht mit einer Umdrehungszahl pro Zeiteinheit, aber nicht mit km/h.
Dazu musst du noch etwas berechnen und brauchst min. den Durchmesser der Scheibe.
Der Durchmesser der Scheibe ist 10 cm das mit dem berechnen ist nicht das Problem. Das Problem ist wie ich mit dem Hallsensor mir eine Umdrehungszahl errechne und das dann so pwm mäßig ausgebe das der Motor nicht schneller läuft
bolli951:
Der Durchmesser der Scheibe ist 10 cm das mit dem berechnen ist nicht das Problem. Das Problem ist wie ich mit dem Hallsensor mir eine Umdrehungszahl errechne und das dann so pwm mäßig ausgebe das der Motor nicht schneller läuft
Der Hallsensor misst an bestimmter Stelle eine Veränderung dur einen Magneten.
Dann zählst du wie oft diese Änderung in einer Zeit vorkommt.
Damit kannst du die Umdrehungszahl festlegen.
Somit musst du einen Magneten auf deiner Scheibe anbringen.
ja ein Magnet ist an der Scheibe angebracht
(deleted)
hast du dafür mal ein beispiel?
(deleted)
Hi
Wieder ein sehr zäher Tread-Verlauf - bei der Anzahl an gesparten großen Buchstaben wird sich die IDE aber freuen - Die verzichtet nämlich NICHT darauf ...
MfG
Wo finde ich diese ?
danke erstmal
habe einen sketch. so das ich den hallsensor erstmal ansteuern kann
wie komme ich von hier auf eine drehzahl
int Analog_Eingang = A0; // X-axis-signal
int Digital_Eingang = 3; // Button
void setup ()
{
pinMode (Analog_Eingang, INPUT);
pinMode (Digital_Eingang, INPUT);
Serial.begin (9600); // Serielle output with 9600 bps
}
// The program reads the current value of the input pins
// and output it via serial out
void loop ()
{
float Analog;
int Digital;
// Current value will be read and converted to the voltage
Analog = analogRead (Analog_Eingang) * (5.0 / 1023.0);
Digital = digitalRead (Digital_Eingang);
// and outputted here
Serial.print ("Analog voltage value:"); Serial.print (Analog, 4); Serial.print ("V, ");
Serial.print ("Extreme value:");
if(Digital==1)
{
Serial.println (" reached");
}
else
{
Serial.println (" not reached yet");
}
Serial.println ("----------------------------------------------------------------");
delay (200);
}
Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Dann ist er auch auf mobilen Geräten besser lesbar.
Das kannst Du auch noch nachträglich ändern.
Gruß Tommy
Habe ich gemacht hat jemand noch eine idee dafür?
Hi
Ist jetzt 'Digital_Eingang' der Hall-Sensor?
Warum heißt Der dann nicht auch so?
Nun gut - Du hast einen digitalRead, Der Dir HIGH oder LOW zurück gibt, je nachdem, ob der Hall-Sensor gesehen wird, oder nicht.
Wie Du den Sensor ansteuerst sehe ich auch nicht - eigentlich gibt der Hall-Sensor ,ohne weitere Interaktionen, den Zustand 'Magnet Ja/Nein' zurück (oder wird je nach Pol gesetzt/gelöscht).
Und nun?
Du möchtest auch nicht wissen, ob JETZT GERADE der Magnet da ist - du möchtest erkennen, ob JETZT GERADE eine Änderung statt findet - den stehenden Magnet am Hall-Sensor willst Du gar nicht erkennen.
MfG
PS: Ein Hoch auf große Buchstaben - gerade, wo doch C++ Die immer und überall haben will - warum nicht auch hier?
ja ich habe das Programm von dem Datasheet des Sensors
Der Sensor hängt an 3,3v, Masse uns DO.
Hast Du schon probiert, ob der auf den Magneten reagiert?
Gruß Tommy
also das habe ich jetzt gebaut so er zeigt mit aber 100000 Umdrehungen an was ist der fehler
int hall_pin = 3;
float hall_thresh = 100.0;
void setup()
{
Serial.begin(9600);
pinMode(hall_pin, INPUT);
}
void loop()
{
float hall_count = 1.0;
float start = micros();
bool on_state = false;
while(true)
{
if (digitalRead(hall_pin)==1)
{
if (on_state==false)
{
on_state = true;
hall_count+=1.0;
}
} else
{
on_state = false;
}
if (hall_count>=hall_thresh)
{
break;
}
}
float end_time = micros();
float time_passed = ((end_time-start)/1000000.0);
Serial.print("Time Passed: ");
Serial.print(time_passed);
Serial.println("s");
float rpm_val = (hall_count/time_passed)*60.0;
Serial.print(rpm_val);
Serial.println(" RPM");
delay(1);
}
@Tommy ja habe ich das funktioniert er reagiert drauf.
Hi
while(true) benutze ich, wenn der WDT zubeißen soll - sonst wäre mir in der Arduino-Umgebung kein Grund bekannt, Das selber einzubauen.
(jaha - in main() steht Das wohl auch drin - Das ist aber 'knapp außerhalb der Arduino-Umgebung')
Hallo-Count + 1.0 ... hätte mich jetzt wirklich gewundert, wenn die Anzahl der 'Erkennungen' hinterm Komma großartig Änderungen hervorrufen - also Das wird hinterm Komma wohl irgend welchen Mist erzeugen - warum für Integer-Werte kein Integer-Typ?
Weil Das 'um Welten schneller' verarbeitet wird?
Würde auch das delay(1); erklären, wo mir der Sinn zu fehlt.
Du möchtest die Zeit für 100 Umdrehungen (eigentlich 100 Komma Null) warten und dann aus der Zeit 'irgendwas' berechnen?
Nur, weil ich Das halt nicht aufgebaut habe - wie lange dauert die Messung bei Soll-Geschwindigkeit?
Statt dem IF-Break hättest Du Das auch in die While-Bedingung packen können.
(wäre immer noch unschön, aber immerhin nicht doppelt gemoppelt)
MfG