Steuerung der Motoraktivität vom PC aus
(EN google-translate)
(PL google-translate)
Das Programm aus dem vorangehenden Kapitel wird so ergänzt, dass serielle Daten vom PC zur Steuerung des Motors dienen.
Mittels gtkterm (in Konsole eingeben) kann das Arduino-Programm getestet werden:
|
|
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:
|
Nach Ausführen dieses Konsolenbefehls, kann das Arduinoboard sowohl über /dev/ttyACM0 als auch über /dev/ttyS80 angesprochen werden.
Arduino-Quelltext
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 0-1: Arduino-Programm: Steuerung des Motors über seriell empfangene Daten.
Processing-Quelltext
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 0-2: Processing-Programm: Über die horizontale Mausposition wird bestimmt, was gesendet wird.
material_motor_PWM2.zip - Arduino- und Processing-Projekt.
Aufgabe (mit Processing)
|