kramann.info
© Guido Kramann

Login: Passwort:










Robuste Systemintegration
1 Grundlagen
..1.1 Newton
....1.1.1 LinearSchwinger
....1.1.2 Daempfung
....1.1.4 ODE
....1.1.5 Saaluebung
..1.2 NewtonEuler
....1.2.1 Traegheitsmomente
....1.2.2 Modellgleichungen
....1.2.3 Einfachpendel
..1.3 Scilab
....1.3.1 Erste_Schritte
....1.3.2 Skripte
....1.3.3 Funktionen
..1.4 Laplace
....1.4.1 Eigenwerte
....1.4.2 PT1
..1.5 Regleroptimierung
....1.5.1 Guetefunktion
....1.5.2 Heuristiken
....1.5.3 Scilab
..1.6 Einstellregeln
....1.6.1 Totzeit
....1.6.2 Methode1
....1.6.3 Methode2
....1.6.4 Scilab
..1.7 Zustandsregler
..1.8 Polvorgabe
..1.8 Polvorgabe_alt
..1.9 Beobachter
....1.9.1 Haengependel
..1.10 Daempfungsgrad
..1.11 Processing
....1.11.1 Installation
....1.11.2 Erste_Schritte
....1.11.3 Mechatronik
....1.11.4 Bibliotheken
....1.11.5 Uebung
....1.11.6 Snippets
......1.11.6.1 Dateioperationen
......1.11.6.2 Bilder
......1.11.6.3 GUI
......1.11.6.4 Text
......1.11.6.5 PDF
......1.11.6.8 Maus
......1.11.6.10 Zeit
......1.11.6.13 Animation
......1.11.6.15 Simulation
....1.11.7 Referenzen
..1.12 Breakout
2 Beispiel
3 Beispielloesung
4 Praxis
5 javasci
6 Fehlertoleranz1
7 Reglerentwurf
..7.1 Sprungantwort
..7.2 Messdaten
..7.3 Systemidentifikation
..7.4 Polvorgabe
..7.5 Beobachter
..7.6 Robuster_Entwurf
..7.7 SIL
8 Systementwicklung
9 Arduino
..9.1 Lauflicht
..9.2 Taster
..9.3 Sensor
..9.12 Motor_PWM1
..9.13 Motor_PWM2_seriell
..9.14 Motor_PWM3_analogWrite
..9.15 Scheduler
..9.20 AV
..9.21 Mikrofon
..9.22 Universal
....9.22.1 Laborplatine
....9.22.2 LED_Leiste
....9.22.3 Motortreiber
....9.22.4 Sensoreingaenge
....9.22.5 Taster
....9.22.6 Tests
....9.22.7 Mikrofon
....9.22.8 Lautsprecher
....9.22.9 Fahrgestell
..9.23 Zauberkiste
..9.24 OOP
....9.24.1 Uebungen
..9.25 AVneu
....9.25.1 Tests
..9.26 DA_Wandler
..9.27 CompBoard
....9.27.1 Tastenmatrix
....9.27.2 ASCIIDisplay
..9.28 CTC
..9.29 Tonerzeugung
10 EvoFuzzy
..10.1 Fuzzy
....10.1.1 Fuzzylogik
....10.1.2 FuzzyRegler
....10.1.3 Uebung9
....10.1.5 Softwareentwicklung
......10.1.5.1 AgileSoftwareentwicklung
......10.1.5.2 FuzzyRegler
......10.1.5.3 Uebung
....10.1.6 Umsetzung
......10.1.6.1 FuzzyRegler
......10.1.6.2 Simulation
......10.1.6.3 Optimierung
......10.1.6.4 Uebung
....10.1.7 Haengependel
......10.1.7.1 Haengependel
......10.1.7.2 Simulation
......10.1.7.3 FuzzyRegler
......10.1.7.4 Optimierer
......10.1.7.5 Genetisch
....10.1.8 Information
....10.1.9 Energie
..10.2 Optimierung
....10.2.1 Gradientenverfahren
....10.2.2 Heuristiken
....10.2.3 ModifizierteG
....10.2.4 optim
..10.3 Genalgorithmus
..10.4 NeuronaleNetze
....10.4.1 Neuron
....10.4.2 Backpropagation
....10.4.3 Umsetzung
....10.4.4 Winkelerkennung
..10.5 RiccatiRegler
11 Agentensysteme
12 Simulation
20 Massnahmen
21 Kalmanfilter
..21.1 Vorarbeit
..21.2 Minimalversion
..21.3 Beispiel
30 Dreirad
31 Gleiter
..31.1 Fehlertoleranz

9.25.1 Testprogramme

Lauflicht

int zustand = 0;
void setup() 
{
    DDRB=255;  
    
}

void loop() 
{
  PORTB=(1<<zustand);
  delay(400);
  zustand++;
  zustand%=8;
}

Code 9.25.1-1: Lauflicht.

Sensor 1 und 2 (A0 und A3)

int sensorwert = 0;
void setup() 
{
    DDRB=255;      
}

void loop() 
{
//  sensorwert = analogRead(0); //Frontalsensor
  sensorwert = analogRead(3); //Seitensensor
  PORTB=(1<<(sensorwert>>6));
  delay(50);
}

Code 9.25.1-2: Sensor frontal und seitlich.

Motortest

//Über die Taster wird die Richtung gewechselt.
//Zuordnung Analog zu Digital
//A0 = D18
//A1 = D19
//A2 = D20
//A3 = D21
//A4 = D22
//A5 = D23
//A6 = D24
//A7 = D25
//A8 = D26
//A9 = D27
//A10 = D28
//A11 = D29

int sensorwert = 0;

void setup() 
{
    //VORNE LINKER MOTOR
    pinMode(23,OUTPUT);  //A5
    digitalWrite(23,0);
    analogWrite(3,0);

    //VORNE RECHTER MOTOR
    pinMode(22,OUTPUT);  
    digitalWrite(22,0);
    analogWrite(5,0);

    //HINTEN LINKER MOTOR
    pinMode(7,OUTPUT);  //A5
    digitalWrite(7,0);
    analogWrite(6,0);

    //HINTEN RECHTER MOTOR
    pinMode(12,OUTPUT);  
    digitalWrite(12,0);
    analogWrite(13,0);

    
}

void motor_links_vorne(int wert)
{
    if(wert>=0)
    {
        pinMode(23,OUTPUT);  //A5
        digitalWrite(23,1);
        analogWrite(3,255-wert);
    }
    else
    {
        pinMode(23,OUTPUT);  //A5
        digitalWrite(23,0);
        analogWrite(3,-wert);
    }
}

void motor_rechts_vorne(int wert)
{
    if(wert>=0)
    {
        pinMode(22,OUTPUT);  
        digitalWrite(22,0);
        analogWrite(5,wert);
    }
    else
    {
        pinMode(22,OUTPUT);  
        digitalWrite(22,1);
        analogWrite(5,255+wert);
    }
}

//-----

void motor_links_hinten(int wert)
{
    if(wert>=0)
    {
        pinMode(7,OUTPUT);  //A5
        digitalWrite(7,1);
        analogWrite(6,255-wert);
    }
    else
    {
        pinMode(7,OUTPUT);  //A5
        digitalWrite(7,0);
        analogWrite(6,-wert);
    }
}

void motor_rechts_hinten(int wert)
{
    if(wert>=0)
    {
        pinMode(12,OUTPUT);  
        digitalWrite(12,0);
        analogWrite(13,wert);
    }
    else
    {
        pinMode(12,OUTPUT);  
        digitalWrite(12,1);
        analogWrite(13,255+wert);
    }
}

void loop() 
{
    sensorwert = analogRead(0);
    PORTB=(1<<(sensorwert>>6));     
    
    if(sensorwert>200) 
    {
        motor_links_vorne(220);      
        motor_rechts_vorne(220);      
        motor_links_hinten(220);      
        motor_rechts_hinten(220);      
    }
    else
    {
        motor_links_vorne(0);      
        motor_rechts_vorne(0);      
        motor_links_hinten(0);      
        motor_rechts_hinten(0);      
    }
}

Code 9.25.1-3: Motortest.

Wandregler

//Über die Taster wird die Richtung gewechselt.
//Zuordnung Analog zu Digital
//A0 = D18
//A1 = D19
//A2 = D20
//A3 = D21
//A4 = D22
//A5 = D23
//A6 = D24
//A7 = D25
//A8 = D26
//A9 = D27
//A10 = D28
//A11 = D29

int sensorwert = 0;
int sensorwert_frontal = 0;
int stellgroesse=0;

void setup() 
{
    DDRB=255;      
  
    //VORNE LINKER MOTOR
    pinMode(23,OUTPUT);  //A5
    digitalWrite(23,0);
    analogWrite(3,0);

    //VORNE RECHTER MOTOR
    pinMode(22,OUTPUT);  
    digitalWrite(22,0);
    analogWrite(5,0);

    //HINTEN LINKER MOTOR
    pinMode(7,OUTPUT);  //A5
    digitalWrite(7,0);
    analogWrite(6,0);

    //HINTEN RECHTER MOTOR
    pinMode(12,OUTPUT);  
    digitalWrite(12,0);
    analogWrite(13,0);

    Serial.begin(9600);
}

void motor_links_vorne(int wert)
{
    if(wert>=0)
    {
        pinMode(23,OUTPUT);  //A5
        digitalWrite(23,1);
        analogWrite(3,255-wert);
    }
    else
    {
        pinMode(23,OUTPUT);  //A5
        digitalWrite(23,0);
        analogWrite(3,-wert);
    }
}

void motor_rechts_vorne(int wert)
{
    if(wert>=0)
    {
        pinMode(22,OUTPUT);  
        digitalWrite(22,0);
        analogWrite(5,wert);
    }
    else
    {
        pinMode(22,OUTPUT);  
        digitalWrite(22,1);
        analogWrite(5,255+wert);
    }
}

//-----

void motor_links_hinten(int wert)
{
    if(wert>=0)
    {
        pinMode(7,OUTPUT);  //A5
        digitalWrite(7,1);
        analogWrite(6,255-wert);
    }
    else
    {
        pinMode(7,OUTPUT);  //A5
        digitalWrite(7,0);
        analogWrite(6,-wert);
    }
}

void motor_rechts_hinten(int wert)
{
    if(wert>=0)
    {
        pinMode(12,OUTPUT);  
        digitalWrite(12,0);
        analogWrite(13,wert);
    }
    else
    {
        pinMode(12,OUTPUT);  
        digitalWrite(12,1);
        analogWrite(13,255+wert);
    }
}

void loop() 
{
    sensorwert = analogRead(3);
    
    Serial.println(sensorwert,DEC);
    
    stellgroesse = (sensorwert-160);
    stellgroesse/=2;

    stellgroesse-=10;
    
    if(stellgroesse>45) stellgroesse=45;
    if(stellgroesse<-45) stellgroesse=-45;
    

    sensorwert_frontal = analogRead(0);

/*    
    if(sensorwert_frontal>200)
    {
        PORTB=255;
      
        motor_links_vorne(-240);      
        motor_links_hinten(240);      

        motor_rechts_vorne(240);      
        motor_rechts_hinten(-240);      
    }
    else
    {
*/      
        PORTB=(1<<(sensorwert>>6));     
        
        motor_links_vorne(210-stellgroesse);      
        motor_links_hinten(210-stellgroesse);      

        motor_rechts_vorne(210+stellgroesse);      
        motor_rechts_hinten(210+stellgroesse);      
//    }
}

Code 9.25.1-4: Wandregler.

Servo testen

Der Servo ist bei PB7. PB7 muss deaktiviert werden.

#include<Servo.h>

Servo servo;
int sensorwert_unten = 0;

void setup() 
{
    servo.attach(11);
    servo.write(180);          
    delay(2000);
//    Serial.begin(9600);
}

void loop() 
{
  
    sensorwert_unten = analogRead(1);
    //Serial.println(sensorwert_unten,DEC);
    
    if(sensorwert_unten>400)
    {
        sensorwert_unten = analogRead(1);
        delay(50);
        if(sensorwert_unten>400)
            servo.write(0);  
        delay(50);
    }        
    else        
    {
        servo.write(180);          
        delay(50);
    }
    
}

Code 9.25.1-5: Servo testen.

Komplexes Zusammenspiel

//Über die Taster wird die Richtung gewechselt.
//Zuordnung Analog zu Digital
//A0 = D18
//A1 = D19
//A2 = D20
//A3 = D21
//A4 = D22
//A5 = D23
//A6 = D24
//A7 = D25
//A8 = D26
//A9 = D27
//A10 = D28
//A11 = D29

#include<Servo.h>

Servo servo;
int sensorwert_unten = 0;


int sensorwert = 0;
int sensorwert_frontal = 0;
int stellgroesse=0;

void setup() 
{
    DDRB=127;      
  
    //VORNE LINKER MOTOR
    pinMode(23,OUTPUT);  //A5
    digitalWrite(23,0);
    analogWrite(3,0);

    //VORNE RECHTER MOTOR
    pinMode(22,OUTPUT);  
    digitalWrite(22,0);
    analogWrite(5,0);

    //HINTEN LINKER MOTOR
    pinMode(7,OUTPUT);  //A5
    digitalWrite(7,0);
    analogWrite(6,0);

    //HINTEN RECHTER MOTOR
    pinMode(12,OUTPUT);  
    digitalWrite(12,0);
    analogWrite(13,0);

    Serial.begin(9600);
    
    servo.attach(11);
    servo.write(180);          
    delay(2000);    
    servo.detach();
}

void motor_links_vorne(int wert)
{
    if(wert>=0)
    {
        pinMode(23,OUTPUT);  //A5
        digitalWrite(23,1);
        analogWrite(3,255-wert);
    }
    else
    {
        pinMode(23,OUTPUT);  //A5
        digitalWrite(23,0);
        analogWrite(3,-wert);
    }
}

void motor_rechts_vorne(int wert)
{
    if(wert>=0)
    {
        pinMode(22,OUTPUT);  
        digitalWrite(22,0);
        analogWrite(5,wert);
    }
    else
    {
        pinMode(22,OUTPUT);  
        digitalWrite(22,1);
        analogWrite(5,255+wert);
    }
}

//-----

void motor_links_hinten(int wert)
{
    if(wert>=0)
    {
        pinMode(7,OUTPUT);  //A5
        digitalWrite(7,1);
        analogWrite(6,255-wert);
    }
    else
    {
        pinMode(7,OUTPUT);  //A5
        digitalWrite(7,0);
        analogWrite(6,-wert);
    }
}

void motor_rechts_hinten(int wert)
{
    if(wert>=0)
    {
        pinMode(12,OUTPUT);  
        digitalWrite(12,0);
        analogWrite(13,wert);
    }
    else
    {
        pinMode(12,OUTPUT);  
        digitalWrite(12,1);
        analogWrite(13,255+wert);
    }
}

void loop() 
{
    sensorwert = analogRead(3);
    
    Serial.println(sensorwert,DEC);
    
    stellgroesse = (sensorwert-160);
    stellgroesse/=2;

    stellgroesse-=10;
    
    if(stellgroesse>45) stellgroesse=45;
    if(stellgroesse<-45) stellgroesse=-45;
    

    sensorwert_frontal = analogRead(0);
    delay(50);
    sensorwert_unten = analogRead(1);
    delay(50);
    
    if(sensorwert_frontal>250)
    {
        PORTB=127;
      
        motor_links_vorne(-240);      
        motor_links_hinten(240);      

        motor_rechts_vorne(240);      
        motor_rechts_hinten(-240);      
    }
    else if(sensorwert_unten>400)
    {
        sensorwert_unten = analogRead(1);
        delay(50);
        if(sensorwert_unten>400)
        {
            servo.attach(11);          
            servo.write(0);  
            delay(500);
            servo.write(180);  
            delay(500);
            servo.detach();          
        }            
        delay(50);      
    }
    else
    {      
        PORTB=((1<<(sensorwert>>6)) & 127);     
        
        motor_links_vorne(210-stellgroesse);      
        motor_links_hinten(210-stellgroesse);      

        motor_rechts_vorne(210+stellgroesse);      
        motor_rechts_hinten(210+stellgroesse);      
    }
}

Code 9.25.1-6: Komplexes Zusammenspiel.