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

1.11.3 Ausnutzung der Standardbefehle und Standardlibraries von Processing für mechatronische Anwendungen

x-y-Plot erstellen

int x = 0; //quasi globale Variablen
int y = 0;
int y_alt = 0;
int ROT = 255;
int BLAU = 0;
void setup()
{
    size(600,400);       //Fensterbreite und -höhe
    background(0,0,200); //Fensterhintergrund RGB
    stroke(200,0,0);
    smooth();            //Pixelglättung
    frameRate(50);        //draw wird fünfmal pro Sekunde aufgerufen
}

void draw()
{
    stroke(ROT,0,BLAU);
    line(x,0,x,399);
    if(x>0)
    {  
        stroke(0,255,0);
        line(x-1,y_alt,x,y);  
    }
    y_alt =y;
    
    x++;
    if(x==600)
    {
       x=0;
       ROT = 255 - ROT;
       BLAU = 255 - BLAU;
    }      

    y++;
    y%=100;    
}

Code 1.11.3-1: Testweise Zackenlinie plotten.

Testweise Zackenlinie plotten.

Bild 1.11.3-1: Testweise Zackenlinie plotten.

Serielle Verbindung

Hereinkommende serielle Daten werden als ein Plot dargestellt.


Es ist möglich ziemlich rasch herauszufinden, wie bestimmte Funktionen und Bibliotheken arbeiten: Die Bibliotheken zu Processing werden typischerweise mit Beispielen ausgeliefert. Diese sind über File -> Examples abrufbar.


In dieser Weise wurde recherchiert, wie die serial-Bibliothek zu benutzen ist.

int x = 0; //quasi globale Variablen
int y = 0;
int y_alt = 0;
int ROT = 255;
int BLAU = 0;

Serial myPort;  // Objekt für serielle Kommunikation


void setup()
{
//    String portName = Serial.list()[0];
    String portName = "/dev/ttyUSB0";
    myPort = new Serial(this, portName, 115200);
  
  
    size(600,400);       //Fensterbreite und -höhe
    background(0,0,200); //Fensterhintergrund RGB
    stroke(200,0,0);
    smooth();            //Pixelglättung
//    frameRate(50);        //draw wird fünfmal pro Sekunde aufgerufen
}

import processing.serial.*;

void draw()
{
    if ( myPort.available() > 0) //wenn Daten vorhanden sind. 
    {  
        y = myPort.read();  //Daten lesen
    }  
  
    stroke(ROT,0,BLAU);
    line(x,0,x,399);
    if(x>0)
    {  
        stroke(0,255,0);
        line(x-1,y_alt,x,y);  
    }
    y_alt =y;
    
    x++;
    if(x==600)
    {
       x=0;
       ROT = 255 - ROT;
       BLAU = 255 - BLAU;
    }      

    y++;
    y%=100;    
}

Code 1.11.3-2: Hereinkommende binäre serielle Daten als Plot darstellen.

#include<avr/io.h>



//Definition von Taktfrequenz und Bausrate als Konstanten

#define TAKTFREQUENZ 9216000

#define BAUDRATE 115200





int main()

{

    unsigned char akku=0;

    unsigned long pause;



    DDRA = 0b00000000;

    DDRB = 0b00000000;

    DDRD = 0b00000000;



    DDRC = 0b11111111; //über RS232 gesendete Zahlen sollen auch an 

                       //zweiten Mikrocontroller geschickt

                       //und angezeigt werden.



    //Aktivieren der RS232-Schnittstelle des Mikrocontrollers:

    

    //Merken des in UBRR zu speichernden Wertes.

    unsigned int baudregister = TAKTFREQUENZ/8/BAUDRATE-1;



	//setzen der Baudrate

	UBRRH = (unsigned char) (baudregister>>8); //Setzen des HIGH-Bytes des Baudraten-Registers

	UBRRL = (unsigned char)  baudregister;     //Setzen des LOW -Bytes des Baudraten-Registers

	

	//Einschalten des Senders und des Empfängers

	UCSRB = (1<<TXEN) | (1<<RXEN);

		        

	//Setzen des Nachrichtenformats: 8 Datenbits, 1 Stopbits

	UCSRC = (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1);

    UCSRA = (1<<U2X);



    //Es soll wiederholt von 0 bis 255 durchgezählt werden und

    //der aktuelle Wert im Hyperterminal zu sehen sein.



    while(1)

    {        

        while( !(UCSRA & (1<<UDRE)) ); //Warten bis der Uebertragungspuffer leer ist

        UDR = akku;                    //Daten in den Puffer schreiben und übertragen



        //Zahl außerdem wie gewohnt nach Port C schicken:

        PORTC = akku;



        for(pause=0;pause<20000;pause++) DDRB|=0;



        //Weiterzählen:

        akku++;

    }

}

Code 1.11.3-3: Mikrocontroller-Testprogramm.

Ergebnis.

Bild 1.11.3-2: Ergebnis.

USB-Kamera

Bei Verwendung der Standard-Library "processing.video" konnte bisher keine USB-Kamera angesprochen werden, jedoch existiert die Processing-Zusatzlibrary "GSVideo", die Processing hinzugefügt werden kann.

import codeanticode.gsvideo.*;

GSCapture cam;

void setup() 
{
  size(640, 480);

  cam = new GSCapture(this, 640, 480);
  cam.start();    
}

void draw() 
{
  if (cam.available() == true) 
  {
    cam.read();
    image(cam, 0, 0);
    // The following does the same, and is faster when just drawing the image
    // without any additional resizing, transformations, or tint.
    //set(0, 0, cam);
  }
}

Code 1.11.3-4: GettingStartedCaptureLinux aus der Zusatz-Library "GSVideo".

3D-Animation

void setup() {
  size(600, 600, P3D); // 600 x 600 im 3D (P3D) Modus
  frameRate(24); // Bildwiederholrate 24
}

void draw() {
  lights();
  background(0);
  pushMatrix();
  translate(width/2, height/2, 0);
  rotateY(radians(frameCount));
  fill(0,255,0);
  box(100);
  popMatrix();
}

Code 1.11.3-5: Einfaches Beispiel zu 3D-Animation.