LED wenn Servo läuft

Hallo zusammen,
für ein Informatikprojekt muss ich etwas programmieren.
Es geht darum, dass eine (Warn)-LED angeht und danach sich der Servomotor verstellt. Ich weiss nicht recht, wie ich das realisieren soll, da man beim Servo ja immer die Postion angibt und kein Signal abgreifen kann, wenn sich der Motor dreht. Sehe ich das falsch?

Wäre froh, wenn Ihr mir helfen könntet :slight_smile:

(Es handelt sich um den Standard-Servo)

#include <Arduino.h>
#include <Wire.h>
#include <SPI.h>
#include <LiquidCrystal.h>
#include <Servo.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10
#define SEALEVELPRESSURE_HPA (1013.25)



//Wohlfühlbereich
int wmin = 18;
int wmax = 20;


//Servo
Servo fenstermotor;

//BME Sensor
double innen;

//Standardsensor
int TMP36 = A0; //Der Sensor soll am analogen Pin A0 angeschlossen werden. Wir nennen den Pin ab jetzt "TMP36"
int sensorwert;
int aussen = 0; //Unter der Variablen "temperatur" wird später der Temperaturwert abgespeichert.


int LED=50;
int pause=2000;



void setup() {

  fenstermotor.attach(38);
  bool status;
  status = bme.begin();
  pinMode(LED, OUTPUT);
}




void loop() {
  


  
  // ist es innen wärmer als aussen & innen über wmax Grad
  if ( innen > aussen && innen > wmax )
  {
    digitalWrite(LED, HIGH);
    delay(pause);
    digitalWrite(LED, LOW);
   
    fenstermotor.write(90);
  }

  // ist es innen kälter als aussen & innen unter wmin Grad
  if (innen < aussen && innen < wmin )
  {
    digitalWrite(LED, HIGH);
    delay(pause);
    digitalWrite(LED, LOW);
    fenstermotor.write (90);
  }

  // innen unter wmin Grad
  if (innen < wmin && aussen <= innen)
  {
    digitalWrite(LED, HIGH);
    delay(pause);
    digitalWrite(LED, LOW);
    fenstermotor.write (0);
  }
  if (innen < wmin && aussen >= wmin && aussen <= wmax)
  {
    digitalWrite(LED, HIGH);
    delay(pause);
    digitalWrite(LED, LOW);
    fenstermotor.write (90);
  }

  // innen im WF-Bereich
  if (innen >= wmin && innen <= wmax)
  {
    digitalWrite(LED, HIGH);
    delay(pause);
    digitalWrite(LED, LOW);
    fenstermotor.write (0);
  }

  // innen über wmax Grad
  if (innen > wmax && aussen < wmax)
  {
    digitalWrite(LED, HIGH);
    delay(pause);
    digitalWrite(LED, LOW);
    fenstermotor.write (90);
  }
  if (innen > wmax && aussen > wmax)
  {
    digitalWrite(LED, HIGH);
    delay(pause);
    digitalWrite(LED, LOW);
    fenstermotor.write (0);
  }




  delay(1000); //Aktualisierungsintervall
}

Würden wir auch gern machen, wenn du uns deinen Sketch zeigst.
Poste den bitte in Code-Tags, Schaltfläche </> oben links im Editorfenster.

Hi

Wenn Du Daten zu Deinem Servo hast, kannst Du 'abschätzen', wie lange das Servo wohl zum Verstellen braucht.
Mein Ansatz:

  • neue Position kommt rein (kA, woher)
  • LED geht an
  • 2 Sekunden Wartezeit
  • Servo bekommt neue Ziel-Position (je nach Lib mit entsprechender Verstell-Geschwindigkeit)
  • anzunehmende Verstellzeit + 2 Sekunden Wartezeit
  • LED geht aus

MfG

HotSystems:
Würden wir auch gern machen, wenn du uns deinen Sketch zeigst.
Poste den bitte in Code-Tags, Schaltfläche </> oben links im Editorfenster.

Sorry, du hast recht :slight_smile:
So macht der Code natürlich keinen Sinn, da die LED ja die ganze Zeit blinkt, wenn eine IF-Schleife true ist, das ist mir bewusst.
Habe aber leider keinen Ansatz

Hallo,

Deiner Überschrifft entnehme ich, das die LED angehen soll wenn sich der Servo Motor durch Krafteinwirkung dreht und wieder in die gewünschte (IST) Position fahren soll.
Es gibt solche Feedback Servos.
Damit würde sich ein Regelwerk realisieren lassen. Wenn es das ist was Du suchst/brauchst?

Grüße,
Donny
edit: Durch den Code hat sich das Kommentar erübrigt.

marigu95:
habe den code doch gepostet :o :smiley:

Sorry, hatte ich zu spät gesehen und darauf wieder gelöscht.

Ich weiß nicht, was Du unter einem Standardservo verstehst, es könnte aber sein, dass der nicht direkt vom Arduino aus angesteuert werden kann.
Deshalb wäre ein Link zum Servo sinnvoll.

Gruß Tommy

Nr.13 Servo ansteuern – Funduino – Kits und Anleitungen für Arduino :slight_smile:

Ok, der sollte direkt angesteuert werden können - weil Du von einem Fenster geschrieben hast.

Nimm doch erst mal den dort angegebenen Sketch und steuere Deinen Servo und die LED.
Entweder Du arbeitest mit Endschaltern für die Bewegungserkennung oder mit einer bestimmten Zeit, die die LED leuchten soll.

Gruß Tommy

es muss ja erst eine if-Bedingung erfüllt sein, dann soll die LED leuchten und sich dann der Motor drehen. Im moment stellt sich der Motor ein, bzw dreht sich und dann blinkt die LED aber die ganze Zeit, da die if schleife im loop ja immer wieder durchlaufen wird. Das ist das Problem dabei.

Hallo,

Du musst alle delays rausschmeissen, oder zumindest so:

if ( innen > aussen && innen > wmax )
  {
    fenstermotor.write(90);
   
    digitalWrite(LED, HIGH);
    delay(pause);
    digitalWrite(LED, LOW);
   
  }

Grüße,
Donny

Hi

postmaster-ino:
...
Mein Ansatz:

  • neue Position kommt rein (kA, woher)
  • LED geht an
  • 2 Sekunden Wartezeit
  • Servo bekommt neue Ziel-Position (je nach Lib mit entsprechender Verstell-Geschwindigkeit)
  • anzunehmende Verstellzeit + 2 Sekunden Wartezeit
  • LED geht aus

Dazu Sich noch in millis() einlesen, damit die delay() weg kommen und der Käse ist gegessen.

MfG

postmaster-ino:
Hi
Dazu Sich noch in millis() einlesen, damit die delay() weg kommen und der Käse ist gegessen.

MfG

Vielen Dank, wie genau sieht dann der Code aus? :smiley:

Na, den Code willst Du doch selbst schreiben.

Gruß Tommy

Tommy56:
Na, den Code willst Du doch selbst schreiben.

Gruß Tommy

da weiss ich ja leider nicht wie :frowning:

Das kannst Du aber lernen, so wie jeder hier.

Gruß Tommy

Tommy56:
Das kannst Du aber lernen, so wie jeder hier.

Gruß Tommy

vielen dank für deine hilfe :wink:

Aber gern doch.

Gruß Tommy

Hi

Darf ich davon ausgehen, daß Du zumindest einen Servo-Sketch hast, womit sich ein Servo verdrehen lässt?

Genau DAMIT fängst Du an - Du baust Da die Stichpunkte ein, Die ich weiter oben bisher ZWEI MAL genannt habe.
Wenn Du damit Probleme hast - kein Problem, zeige uns, daß Du selber mitmachst und Dir wird geholfen.
Heule rum und mache Nichts und Du verschwendest unsere Zeit.

Auch im Nachbar-Forum sind einige der Leute hier aktiv, dort einen neuen Thread mit gleicher 'Will-aber-nicht'-Einstellung eröffnen bringt Dir auch dort keine Freunde.

Also, Servo-Sketch her!
Wenn zumindest meine Stichpunkte schon ansatzweise im Sketch dahin verteilt sind, wo Diese Deiner Meinung nach hingehören, wprde zumindest etwas Willen zeigen.

MfG

postmaster-ino:
Hi

Darf ich davon ausgehen, daß Du zumindest einen Servo-Sketch hast, womit sich ein Servo verdrehen lässt?

Genau DAMIT fängst Du an - Du baust Da die Stichpunkte ein, Die ich weiter oben bisher ZWEI MAL genannt habe.
Wenn Du damit Probleme hast - kein Problem, zeige uns, daß Du selber mitmachst und Dir wird geholfen.
Heule rum und mache Nichts und Du verschwendest unsere Zeit.

Auch im Nachbar-Forum sind einige der Leute hier aktiv, dort einen neuen Thread mit gleicher 'Will-aber-nicht'-Einstellung eröffnen bringt Dir auch dort keine Freunde.

Also, Servo-Sketch her!
Wenn zumindest meine Stichpunkte schon ansatzweise im Sketch dahin verteilt sind, wo Diese Deiner Meinung nach hingehören, wprde zumindest etwas Willen zeigen.

MfG

Ich habe aber auch schon mehrmals geschrieben, dass dann die LED dauerhaft leuchtet. Als Beispiel:

if ( innen > aussen && innen > wmax )
{
digitalWrite(LED, HIGH);
fenstermotor.write(90);
delay(pause);
digitalWrite(LED, LOW);

}

trifft dies zu, so geht die led an, der motor dreht sich und die led geht aus. Trifft aber die If bedinung wieder zu, so geht die led an, der Motor dreht sich nicht und sie geht wieder aus; zur Folge hat dies, dass die LED einfach die ganze Zeit blinkt. Verstehst du was ich meine? :confused: