kramann.info
© Guido Kramann

Login: Passwort:










7.10 Steuerung der Motoraktivität vom PC aus

7.10 Control of motor activity from the PC (EN google-translate)

7.10 Kontrola aktywności ruchowej z komputera (PL google-translate)

Das Programm aus dem vorangehenden Kapitel wird so ergänzt, dass serielle Daten vom PC zur Steuerung des Motors dienen.

The program from the previous chapter will be added, serial data from the PC to control the motor.

Zostanie dodany program z poprzedniego rozdziału, dane szeregowe z komputera PC do sterowania silnikiem.

Mittels gtkterm (in Konsole eingeben) kann das Arduino-Programm getestet werden:

Using gtkterm (enter in console) the Arduino program can be tested:

Za pomocą gtkterm (wprowadź w konsoli) można przetestować program Arduino:

  • Es müßten lauter 'A' empfangen werden.
  • Bei Betätigen der Leertaste (ASCII-Code 32) läuft der Motor los.
  • Gesendet wird ein Byte im Wertebereich 0 bis 40.
  • Davon wird im Arduino-Programm 20 abgezogen, um den gewünschten PWM-Wert und die Richtungsinformation (Vorzeichen) zu erhalten.

Um den Motor besser vom PC aus steuern zu können, wird ausserdem ein Programm mit Processing realisiert. Damit dieses funktioniert, muss der bei Anschluß des Boards entstehende Fileeintrag in /dev, nämlich /dev/ttyACM0 auf einen als serielles Device erkennbaren gelegt werden. Dies kann mit einem symbolischen Link erfolgen:

In order to control the engine better from the PC, also a program with Processing realized. For this to work, it must be connected when connecting t Boards resulting file entry in / dev, namely / dev / ttyACM0 to one be recognized as a serial device recognizable. This can be done with a symbolic lin

W celu lepszego sterowania silnikiem z komputera, również program z Przetwarzanie zrealizowane. Aby to zadziałało, musi być podłączone podczas podłączan Tablice powodujące wprowadzenie pliku w / dev, a mianowicie / dev / ttyACM0 do jednego rozpoznawane jako urządzenie szeregowe rozpoznawalne. Można to zrobić za pomocą dowiązania symboliczneg

  • ln -s /dev/ttyACM0 /dev/ttyS80

Nach Ausführen dieses Konsolenbefehls, kann das Arduinoboard sowohl über /dev/ttyACM0 als auch über /dev/ttyS80 angesprochen werden.

After running this console command, the arduinoboard can be accessed via both / dev / ttyACM0 as well as via / dev / ttyS80.

Po uruchomieniu tego polecenia konsoli dostęp do arduinoboard można uzyskać za pośrednictwem obu / dev / ttyACM0 jak również przez / dev / ttyS80.

Arduino-Quelltext

Arduino source code

Kod źródłowy Arduino

int zaehler = 0;

int xPWM = 20; //0..40
int yPWM = 20; //0..20

void setup() 
{
  // put your setup code here, to run once:
  pinMode(9,OUTPUT);   //Ard. oben4=OutPin D9 ---- L293 Pin 15 Input4
  pinMode(4, OUTPUT);  //Ard. oben9=OutPin D4 ---- L293 Pin 10 Input3
  pinMode(3, OUTPUT);  //Ard. oben10=OutPin D3 ---- L293 Pin 10 Enable2, PWM
  
  pinMode(13, OUTPUT); //Board LED 
  
  //Eine Richtung festlegen und PWM aus:
  digitalWrite(4,HIGH);
  digitalWrite(9,LOW);
  digitalWrite(3,LOW);

  //LED aus  
  digitalWrite(13,LOW);
  
  Serial.begin(9600);  
}

void loop() 
{
    yPWM = xPWM-20;
    if(yPWM<0)        
        yPWM=-yPWM;
  
    digitalWrite(3,HIGH); //20 Ticks == 0,02 Sekunden entspricht 50Hz
    delay(yPWM);
    digitalWrite(3,LOW);
    delay(20-yPWM);
    
    if(zaehler==0)
        digitalWrite(13,HIGH);
    else if(zaehler==25)
        digitalWrite(13,LOW);
        
    while(Serial.available())     //..damit immer der aktuellste==letzte Wert genommen wird.   
        xPWM = (int)Serial.read(); //0..40  PWM-=20 => -20..20
        
    Serial.write('A');    
    if(xPWM>20)   
    {
       digitalWrite(4,HIGH);
       digitalWrite(9,LOW);
    }
    else
    {
       digitalWrite(4,LOW);
       digitalWrite(9,HIGH);
    }
    zaehler++;
    zaehler%=50;  //eine Sekunde == 50 PWM-Perioden
}

Code 7.10-1: Arduino-Programm: Steuerung des Motors über seriell empfangene Daten.

Processing-Quelltext

Processing source code

Kod źródłowy przetwarzanie

import processing.serial.*;
import processing.core.*; 
import fullscreen.*;  //um im Vollbildmodus starten zu können.
import codeanticode.gsvideo.*;

Serial myPort;  // Create object from Serial class
GSCapture webcam;


void setup() 
{
  size(displayWidth, displayHeight);
  
  //Vorher symbolischen Link erzeugen:
  //ln -s  /dev/ttyACM0 /dev/ttyS80
  //ev. ändert sich der Port:  
  //ln -s  /dev/ttyACM1 /dev/ttyS81  
  //Lockdatei ev. von hand löschen:
  //sudo rm -f /var/lock/LCK..ttyS81    

  //delay(2000);
  myPort = new Serial(this,"/dev/ttyS81", 9600);    

  webcam = new GSCapture(this,640,480,"/dev/video0");
  //delay(2000);
  if(webcam!=null)  
      webcam.start();
  
  //delay(2000);
  frameRate(10);
  (new FullScreen(this)).enter();
}


void draw()
{
  clear();
  //background(0);
  fill(0);
  rect(0, 0, displayWidth, displayHeight);

  if ( myPort.available() >= 1) 
  {
      int PWM = (mouseX*40)/displayWidth;
      myPort.write(PWM);
      stroke(0,255,0);
      fill(0,255,0);
      text("PWM="+(PWM-20),20,displayHeight/2);

  }
  else
  {
      fill(0,0,255);
      stroke(0,0,255);
  }
  
  if(webcam!=null && webcam.available())
  {
     webcam.read();
     set(displayWidth-640,displayHeight-480,webcam);
  }
  
  line(mouseX,displayHeight/2,mouseX,displayHeight);      

    
}

Code 7.10-2: Processing-Programm: Über die horizontale Mausposition wird bestimmt, was gesendet wird.

material_motor_PWM2.zip - Arduino- und Processing-Projekt.
Aufgabe (mit Processing)
Task (with processing)
Zadanie (z przetwarzaniem)
  • Zeichnen Sie in einem Processing-Programm drei verschieden farbige Quadrate nebeneinander.
  • Ein Klick auf das linke - der Motor dreht sich links herum,
  • ein Klick auf das rechte - der Motor dreht sich rechts herum,
  • ein Klick auf das mittlere - der Motor steht.