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.22.6 Tests der bisher aufgebrachten Peripherie

Testperipherie für die nachfolgenden Programme: Sensor, Motor, externe Spannungsversorgung.

Bild 9.22.6-1: Testperipherie für die nachfolgenden Programme: Sensor, Motor, externe Spannungsversorgung.

Im folgenden werden die bisher aufgebrachten Peripherien getestet:

  1. LED-Leiste
  2. Taster
  3. Sensoreingänge
  4. Motortreiber

1. LED-Leiste

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

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

Code 9.22.6-1: Lauflicht.

2. Taster

void setup() 
{
    DDRB=255;  
    pinMode(2,INPUT);  
    digitalWrite(2,1); //Pullup-Widerstand
    pinMode(4, INPUT); 
    digitalWrite(4,1); //Pullup-Widerstand
}

void loop() 
{
    if(digitalRead(2)==LOW)
    {
        PORTB|=0b00001010;
    }
    else
    {
        PORTB&=~0b00001010;
    }

    if(digitalRead(4)==LOW)
    {
        PORTB|=0b11110000;
    }
    else
    {
        PORTB&=~0b11110000;
    }
}

Code 9.22.6-2: Taster.

3. Sensoreingänge

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

void loop() 
{
  sensorwert = analogRead(2);
  PORTB=(1<<(sensorwert>>6));
  delay(50);
}
Test Sensor links, A2.

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

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

Code 9.22.6-3: Test Sensor rechts, A3.

1. Motortreiber

//Ü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
void setup() 
{
    DDRB=255;      
    pinMode(2,INPUT);  
    digitalWrite(2,1); //Pullup-Widerstand
    pinMode(4, INPUT); 
    digitalWrite(4,1); //Pullup-Widerstand

    //LINKER MOTOR
    //A5 als digitaler Ausgang, INPUT 3
    pinMode(23,OUTPUT);  
    //A0 als digitaler Ausgang, INPUT 4
    pinMode(18,OUTPUT);  
    digitalWrite(23,1); //1 eine Richtung
    digitalWrite(18,0); //0
    analogWrite(6,0);

    //RECHTER MOTOR
    //A4 als digitaler Ausgang, INPUT 2
    pinMode(22,OUTPUT);  
    //A1 als digitaler Ausgang, INPUT 1
    pinMode(19,OUTPUT);  
    digitalWrite(22,1); //1 eine Richtung
    digitalWrite(19,0); //0
    analogWrite(5,0);

    
}

void loop() 
{
    if(digitalRead(2)==LOW)
    {
        //linker Motor
        digitalWrite(23,1); //1 eine Richtung
        digitalWrite(18,0); //0
        analogWrite(6,127);

        //rechter Motor
        digitalWrite(22,1); //1 eine Richtung
        digitalWrite(19,0); //0
        analogWrite(5,127);
    }
    else if(digitalRead(4)==LOW)
    {
        //linker Motor
        digitalWrite(23,0); //0 
        digitalWrite(18,1); //1 andere Richtung
        analogWrite(6,127);

        //rechter Motor
        digitalWrite(22,0); //0 
        digitalWrite(19,1); //1 andere Richtung
        analogWrite(5,127);
    }
    else
    {
        //Beide Motore inaktiv
        //linker Motor
        digitalWrite(23,1); //1 eine Richtung
        digitalWrite(18,0); //0
        analogWrite(6,0);

        //rechter Motor
        digitalWrite(22,1); //1 eine Richtung
        digitalWrite(19,0); //0
        analogWrite(5,0);
    }
     
}

Code 9.22.6-4: Test Motortreiber.

Sensor-geregelte Fahrt entlang einer Wand

//Ü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 stellgroesse=0;
int senden=0;
void setup() 
{
    DDRB=255;      
    pinMode(2,INPUT);  
    digitalWrite(2,1); //Pullup-Widerstand
    pinMode(4, INPUT); 
    digitalWrite(4,1); //Pullup-Widerstand

    //LINKER MOTOR
    //A5 als digitaler Ausgang, INPUT 3
    pinMode(23,OUTPUT);  
    //A0 als digitaler Ausgang, INPUT 4
    pinMode(18,OUTPUT);  
    digitalWrite(23,0); //1 eine Richtung
    digitalWrite(18,1); //0
    analogWrite(6,0);

    //RECHTER MOTOR
    //A4 als digitaler Ausgang, INPUT 2
    pinMode(22,OUTPUT);  
    //A1 als digitaler Ausgang, INPUT 1
    pinMode(19,OUTPUT);  
    digitalWrite(22,1); //1 eine Richtung
    digitalWrite(19,0); //0
    analogWrite(5,0);

    Serial.begin(9600); 
    
}

void loop() 
{
    sensorwert = analogRead(2);
    PORTB=(1<<(sensorwert>>6));     
    
    stellgroesse = (sensorwert-100);
    //linker Motor
    analogWrite(6,127-stellgroesse);    

    //rechter Motor
    analogWrite(5,127+stellgroesse);
    
        //seriell senden:
        if(stellgroesse<0)
        {
             senden = -stellgroesse;
             Serial.write('-');
        }
        else
        {
             senden = stellgroesse;
             Serial.write('+');
        }
        Serial.write(48+(senden/1000)%10);
        Serial.write(48+(senden/100)%10);
        Serial.write(48+(senden/10)%10);
        Serial.write(48+(senden/1)%10);        
        Serial.write('\r');        
        Serial.write('\n');        
    
}

Code 9.22.6-5: Sensor-geregelte Fahrt entlang einer Wand