- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 26 von 26

Thema: Pulverwaage elektronisch geregelt

  1. #21
    Neuer Benutzer Öfters hier
    Registriert seit
    24.06.2016
    Beiträge
    14
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo, alles bestens.
    Lichtschranken, Motor, Drehzahl, alles funktioniert.

    Hab grad versucht das selbe für den größeren Motor mit dem TB6560 Treibermodul anzupassen, aber da klappt das ganze weniger gut.
    Das Treibermodul hat ja nur zwei Eingänge CW+ und CLK+, die beiden anderen gehen auf Masse.

    Kannst Du mir sagen wie ich mein Programm umschreiben soll?
    Momentan läuft es so:
    PHP-Code:
    #include <Bounce2.h>

    int buttonPin 13;
    int sensorPin1 A2
    int sensorPin2 A3
    int sensorValue1 0
    int sensorValue2 0

    int motorPin1 8;        
    int motorPin2 9;       
          
                              

                                      
    int motorSpeed 0
    int buttonState 0;
    int merker 0;     

    void setup() { 

    pinMode(motorPin1OUTPUT); 
    pinMode(motorPin2OUTPUT); 

    digitalWrite(motorPin1LOW);
    digitalWrite(motorPin2LOW);



    pinMode(buttonPinINPUT);


    Serial.begin(9600); 

    void loop(){
    buttonState  digitalRead(buttonPin);
    sensorValue1 analogRead(sensorPin1); 
    sensorValue2 analogRead(sensorPin2); 
    Serial.println(buttonState);
    if (
    buttonState != 1)   
    {
       
    merker 1;
       
    }             


    if (
    sensorValue1 512 && sensorValue2 512 && merker == 1)    

    {
       
    motorSpeed 1;
      
       
    counterclockwise();                    

    }
    if (
    sensorValue1 512 && sensorValue2 512  && merker == 1)   

    {
      
    motorSpeed 2;

      
    counterclockwise();                    

    }
    if (
    sensorValue1 512 && sensorValue2 512)

    {
      
    motorSpeed 0;
      
      
    merker 0;
      
    counterclockwise();                    

      }
    }



    void counterclockwise (){ 
    // 1 

     
    digitalWrite(motorPin1HIGH); 
    digitalWrite(motorPin2LOW); 

    delay(motorSpeed); 


    // 2 

    digitalWrite(motorPin1LOW); 
    digitalWrite(motorPin2HIGH); 

    delay (motorSpeed); 



    Motor läuft sehr langsam bei motorSpeed = 1, etwa 6 sek für eine Umdrehung.
    Bei motorSpeed = 2 dann die Hälfte, klar.
    Aber bei Motor Speed = 0 wieder in etwa so schnell wie auf motorSpeed = 1


    Hast du vielleicht ne Idee was ich anders machen könnte?
    Die Beispielprogramme aus dem Netz hab ich schon durchprobiert, aber die anzupassen ist mir leider zu hoch.

    Vielen Dank
    Andy

  2. #22
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    56
    Beiträge
    2.814
    Probier es mal so:
    Code:
    #include <Bounce2.h>
    
    int buttonPin = 13;
    int sensorPin1 = A2; 
    int sensorPin2 = A3; 
    int sensorValue1 = 0; 
    int sensorValue2 = 0; 
    
    int motorPin1 = 8;        
    int motorPin2 = 9;       
          
    int motorSpeed = 0; 
    int buttonState = 0;
    int merker = 0;     
    
    void setup() { 
      pinMode(motorPin1, OUTPUT); 
      pinMode(motorPin2, OUTPUT); 
      digitalWrite(motorPin1, LOW);
      digitalWrite(motorPin2, LOW);
      pinMode(buttonPin, INPUT);
      Serial.begin(9600); 
    }
     
    void loop(){
      buttonState  = digitalRead(buttonPin);
      sensorValue1 = analogRead(sensorPin1); 
      sensorValue2 = analogRead(sensorPin2); 
      Serial.println(buttonState);
      if (buttonState != 1)   
      {
        merker = 1; 
      }             
    
      if (sensorValue1 > 512 && sensorValue2 < 512 && merker == 1)    
      {
        motorSpeed = 1;
        counterclockwise();                    
      }
    
      if (sensorValue1 < 512 && sensorValue2 < 512  && merker == 1)   
      {
        motorSpeed = 2;
        counterclockwise();                    
      }
    
      if (sensorValue1 < 512 && sensorValue2 > 512)
      {
        motorSpeed = 0; 
        merker = 0;                   
      }
    }
    
    void counterclockwise (){ 
      // 1 
      digitalWrite(motorPin1, HIGH); 
      digitalWrite(motorPin2, LOW); 
      delay(motorSpeed); 
    
      // 2 
      digitalWrite(motorPin1, LOW); 
      digitalWrite(motorPin2, HIGH); 
      delay (motorSpeed); 
    }

  3. #23
    Neuer Benutzer Öfters hier
    Registriert seit
    24.06.2016
    Beiträge
    14
    Gut, test ich morgen früh. Hab Nachtschicht.

    Danke
    Gruß

  4. #24
    Neuer Benutzer Öfters hier
    Registriert seit
    24.06.2016
    Beiträge
    14
    Moin..

    Alles klar, funktioniert.
    Grad hatte ich noch das Problem dass der Motor zwar mit nem Testprogramm sauber gelaufen ist, aber mit den Lichtschranken nur noch sehr langsam.
    Hatte den Verdacht dass das UNO nicht mit Lichtschranken überwachen und Motor regeln hinterher kommt.
    Zuerst wollte ich die Lichtschranken nicht bei jedem Durchlauf abfragen, hab aber keine Ahnung ob und wie das geht..
    Also hab ich den letzten Teil jetzt zehnmal drin, und erst dann werden die Lichtschranken wieder abgefragt. Klappt wunderbar.
    Liegt also anscheinend am UNO bzw. dessen fehlender Geschwindigkeit.

    Hier nochmal der Code, vielleicht hilfts jemandem. Nicht schön, aber funktioniert.

    Danke für die Hilfe.

    PHP-Code:
    #include <Bounce2.h>

      
    int buttonPin 13;
      
    int sensorPin1 A2
      
    int sensorPin2 A3
      
    int sensorValue1 0
      
    int sensorValue2 0

      
    int PinCLK 9;        
      
    int PinCW 8;       
                              
      
    int ledPin1 2;
      
    int ledPin2 4;
      
    int ledPin3 7;
                                      
      
    int motorSpeed 0
      
    int buttonState 0;
      
    int merker 0;     

      
    void setup() { 

      
    pinMode(PinCLKOUTPUT); 
      
    pinMode(PinCWOUTPUT); 

      
    digitalWrite(PinCLKLOW);
      
    digitalWrite(PinCWLOW);

      
    pinMode(buttonPinINPUT);

      
    pinMode(ledPin1OUTPUT); 
      
    pinMode(ledPin2OUTPUT); 
      
    pinMode(ledPin3OUTPUT); 

      
    Serial.begin(9600); 

      
    void loop(){
      
      
    buttonState  digitalRead(buttonPin);
      
    sensorValue1 analogRead(sensorPin1); 
      
    sensorValue2 analogRead(sensorPin2); 
      
    Serial.println(buttonState);

      if (
    buttonState != 1)   
    {
      
    merker 1;
    }             
      if (
    sensorValue1 512 && sensorValue2 512 && merker == 1)    
    {
      
    motorSpeed 420;
      
    digitalWrite (ledPin1HIGH);
      
    digitalWrite (ledPin2LOW);
      
    digitalWrite (ledPin3LOW);
      
    counterclockwise();                    

    }
      if (
    sensorValue1 512 && sensorValue2 512  && merker == 1)   
    {
      
    motorSpeed 12000;
      
    digitalWrite (ledPin1HIGH);
      
    digitalWrite (ledPin2HIGH);
      
    digitalWrite (ledPin3LOW);
      
    counterclockwise();                    
    }
      if (
    sensorValue1 512 && sensorValue2 512)
    {
      
    motorSpeed 0;
      
    digitalWrite (ledPin1HIGH);
      
    digitalWrite (ledPin2HIGH);
      
    digitalWrite (ledPin3HIGH);
      
    merker 0;
    }
    }

      
    void counterclockwise (){ 
     
      
    digitalWrite(PinCLKHIGH); 
      
    delayMicroseconds(motorSpeed); 
      
    digitalWrite(PinCLKLOW); 
      
    delayMicroseconds(motorSpeed); 

      
    digitalWrite(PinCLKHIGH); 
      
    delayMicroseconds(motorSpeed); 
      
    digitalWrite(PinCLKLOW); 
      
    delayMicroseconds(motorSpeed); 

      
    digitalWrite(PinCLKHIGH); 
      
    delayMicroseconds(motorSpeed); 
      
    digitalWrite(PinCLKLOW); 
      
    delayMicroseconds(motorSpeed); 

      
    digitalWrite(PinCLKHIGH); 
      
    delayMicroseconds(motorSpeed); 
      
    digitalWrite(PinCLKLOW); 
      
    delayMicroseconds(motorSpeed); 

      
    digitalWrite(PinCLKHIGH); 
      
    delayMicroseconds(motorSpeed); 
      
    digitalWrite(PinCLKLOW); 
      
    delayMicroseconds(motorSpeed); 

      
    digitalWrite(PinCLKHIGH); 
      
    delayMicroseconds(motorSpeed); 
      
    digitalWrite(PinCLKLOW); 
      
    delayMicroseconds(motorSpeed); 

      
    digitalWrite(PinCLKHIGH); 
      
    delayMicroseconds(motorSpeed); 
      
    digitalWrite(PinCLKLOW); 
      
    delayMicroseconds(motorSpeed); 

      
    digitalWrite(PinCLKHIGH); 
      
    delayMicroseconds(motorSpeed); 
      
    digitalWrite(PinCLKLOW); 
      
    delayMicroseconds(motorSpeed); 

      
    digitalWrite(PinCLKHIGH); 
      
    delayMicroseconds(motorSpeed); 
      
    digitalWrite(PinCLKLOW); 
      
    delayMicroseconds(motorSpeed); 

      
    digitalWrite(PinCLKHIGH); 
      
    delayMicroseconds(motorSpeed); 
      
    digitalWrite(PinCLKLOW); 
      
    delayMicroseconds(motorSpeed); 


    Gruß
    Andy

  5. #25
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    56
    Beiträge
    2.814
    Die Timingproblem liegen an den "delayMicroseconds()" Befehlen.
    Der µC macht dann solange genau "nichts" (NOP = non operating).
    Damit verzögert man den Schleifendurchlauf und macht das Programm langsam.
    Der nächste Schritt beim Lernen von Arduino wäre Dein programm von einfach auf effektiv umzustellen und dann auf elegant und effektiv.
    Ich habe ja weiter oben schon darüber geschrieben wie man das mit Timerabfagen und Interrupts machen kann.

    Wenn es so läuft und das der einzige Zweck ist, kannst Du es auch so lassen (never change a running system).
    Wenn Du Dich verbessern willst, gehe den nächsten Schritt.

  6. #26
    Neuer Benutzer Öfters hier
    Registriert seit
    24.06.2016
    Beiträge
    14
    Erstmal lass ich es so, was aber nicht heißt dass ich nicht noch dran rumfeile.

    Bin für Vorschläge offen, vielleicht hast du ein Beispiel für ein Programm mit Interrupts das auch ein Anfänger versteht.
    Aus Teilen was zusammenbasteln klappt schon einigermaßen..

    Grad freu ich mich noch dass es funktioniert, steck das USB Kabel ab und der Motor fängt an zu laufen. Gut, mach die Lichtschranke zu, Motor aus. Lichtschranke wieder auf, läuft wieder an ohne Taster gedrückt zu haben. USB wieder dran, alles bestens. USB weg, spinnt.

    Was ist da nun los?

    Externe Stromversorgungen sind natürlich dran..

    Auch wenn ich dem UNO USB nur Strom geb über ein Handy-Ladegerät funktioniert alles.

    Wenn Netzteil und USB angeschlossen sind, auch. Nur 12V Netzteil, dann nicht.
    Geändert von Shag (08.07.2016 um 20:29 Uhr)

Seite 3 von 3 ErsteErste 123

Ähnliche Themen

  1. Spannungs geregelt ein/aus schalten
    Von goara im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 16.07.2010, 19:24
  2. asuro lernt geregelt fahren
    Von radbruch im Forum Asuro
    Antworten: 6
    Letzter Beitrag: 19.01.2007, 12:20
  3. ir diode geregelt treiben
    Von leif im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 28.11.2004, 00:41
  4. Antworten: 4
    Letzter Beitrag: 29.08.2004, 13:25
  5. Power-Netzteil, geregelt
    Von im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 16.04.2004, 13:34

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests