Materialien:
1 x HC-SR04
4 x Jumper Kabel
1 X Steckbrett
1 X arduino
Hier ist der Code für den Arduino:
/*
HC-SR04 Ping Distanzsensor:
VCC auf Arduino 5v
Mit Arduino GND GND
Echo auf Arduino Pin 7
Trig Arduino Pin 8
Diese Skizze stammt aus Virtualmix: http://goo.gl/kJ8Gl
Winkle Tinte hier verändert wurde: http://winkleink.blogspot.com.au/2012/05/arduino-hc-sr04-ultrasonic-distance.html
Und modifizierte weiter von ScottC hier: http://arduinobasics.blogspot.com.au/2012/11/arduinobasics-hc-sr04-ultrasonic-sensor.html
am 10. November 2012.
*/
#define EchoPin 7 / / Echo Pin
#define TrigPin 8 / / Trigger-Pins
#define-LEDPin 13 / / LED an Bord
Int MaximumRange = 200; Maximale Reichweite benötigt
Int MinimumRange = 0; Mindestreichweite benötigt
lange Dauer, Distanz; Dauer zur Berechnung der Entfernung
void setup() {}
Serial.Begin (9600);
PinMode (TrigPin, Ausgang);
PinMode (EchoPin, Eingabe);
PinMode (LEDPin, OUTPUT); LED-Anzeige zu verwenden (falls erforderlich)
}
void loop() {}
/ * Die folgende TrigPin/EchoPin-Zyklus dient zur Bestimmung der
Entfernung des nächsten Objekts durch das Prellen Schallwellen aus der es. */
DigitalWrite (TrigPin, LOW);
delayMicroseconds(2);
DigitalWrite (TrigPin, HIGH);
delayMicroseconds(10);
DigitalWrite (TrigPin, LOW);
Dauer = PulseIn (EchoPin, HIGH);
Berechnen Sie den Abstand (in cm) basierend auf der Geschwindigkeit des Schalls.
Abstand = Dauer/58,2;
Wenn (Abstand > = MaximumRange || Abstand < = MinimumRange) {}
/ * Eine negative Zahl an Computer und schalten Sie LED ON senden
an "out of Range" * /
Serial.println("-1");
DigitalWrite (LEDPin, hoch);
}
Else {}
/ * Die Entfernung über serielles Protokoll, mit dem Computer zu senden und
Deaktivieren Sie LED um erfolgreiche Lesung anzuzeigen. */
Serial.println(Distance);
DigitalWrite (LEDPin, LOW);
}
Verzögerung 50ms vor der nächsten Lesung.
Delay(50);
}
Hier ist die Verarbeitungscode
/ * Die folgende Verarbeitung Skizze wurde erstellt von ScottC am
die 10. November 2012: http://arduinobasics.blogspot.com/
Durch diese Verarbeitung Skizze von Daniel Shiffman inspiriert:
http://Processing.org/Learning/Basics/SineWave.HTML
*/
Import processing.serial.*;
Int NumOfShapes = 60; Anzahl der Quadrate auf dem Bildschirm angezeigt
Int ShapeSpeed = 2; Geschwindigkeit mit der die Formen an neue Position bewegen
2 = schnellste, größere Zahlen sind langsamer
Globale Variablen
Platz [] MySquares = new Square [NumOfShapes];
Int ShapeSize, Abstand;
String ComPortString;
Serielle MyPort;
/* -----------------------Setup ---------------------------*/
void setup() {}
Size(displayWidth,displayHeight); Verwenden Sie die gesamte Bildschirmgröße.
Smooth(); zeichnet alle Formen mit weichen Kanten.
/ * Berechnen Sie die Größe der Quadrate und der Quadrate Array initialisieren * /
ShapeSize = (Breite/NumOfShapes);
für (Int ich = 0; ich < NumOfShapes; i ++) {}
MySquares [i] = new Square(int(shapeSize*i),height-40);
}
/ * Öffnen Sie die serielle Schnittstelle für die Kommunikation mit dem Arduino
Stellen Sie sicher, der com-Port ist richtig - ich verwende COM-Port 8 * /
MyPort = neue Seriennummer (dies, "/ dev/cu.usbmodem1421", 9600);
myPort.bufferUntil('\n'); Auslösen eines SerialEvent auf der Neubaustrecke
}
/* ------------------------Draw -----------------------------*/
void draw() {}
Background(0); Den Hintergrund schwarz
Delay(50); Verzögerung verwendet, um den Bildschirm zu aktualisieren
drawSquares(); Zeichnen Sie das Muster aus Quadraten
}
/* ---------------------serialEvent ---------------------------*/
void SerialEvent(Serial cPort) {}
ComPortString = cPort.readStringUntil('\n');
Wenn (ComPortString! = Null) {}
comPortString=trim(comPortString);
/ * Die Entfernung von der Arduino empfangen verwenden, um die y-Position ändern
auf den ersten Platz (weitere werden folgen). Sollte entsprechen den
Code-Einstellungen auf dem Arduino. In diesem Fall ist 200 das maximum
Entfernung zu erwarten. Der Abstand wird dann auf einen Wert zugeordnet.
zwischen 1 und die Höhe des Bildschirms * /
Abstand = int(map(Integer.parseInt(comPortString),1,200,1,height));
If(Distance<0) {}
/ * Wenn Computer erhält eine negative Zahl (-1), dann die
Sensor meldet eine Fehlermeldung "out of Range". Alle konvertieren
dieser bis zu einer Entfernung von 0. */
Entfernung = 0;
}
}
}
/* ---------------------drawSquares ---------------------------*/
void drawSquares() {}
Int oldY, NewY, targetY, RedVal, BlueVal;
/ * Legen Sie die Y-Position des 1. Platzes auf der Grundlage
Sensorwert empfangen * /
mySquares[0].setY((height-shapeSize)-distance);
/ * Die Position und die Farbe der einzelnen Quadrate zu aktualisieren * /
für (Int ich = NumOfShapes-1; ich > 0; i--) {}
/ * Der vorherigen Platz Position als Ziel verwenden * /
targetY=mySquares[i-1].getY();
oldY=mySquares[i].getY();
If(Abs(oldY-targetY) < 2) {}
NewY = targetY; Dadurch werden sie line-up
} else {}
die neue Position des Quadrats berechnen
newY=oldY-((oldY-targetY)/shapeSpeed);
}
Legen Sie die neue Position des Platzes
mySquares[i].setY(newY);
/ * Berechnet die Farbe des Platzes auf der Grundlage seiner
Position auf dem Bildschirm * /
BlueVal = int(map(newY,0,height,0,255));
RedVal = 255-BlueVal;
Fill(redVal,0,blueVal);
/ * Den Platz auf dem Bildschirm zu zeichnen * /
rect(mySquares[i].getX(), mySquares[i].getY(),shapeSize,shapeSize);
}
}
/ *---SketchFullScreen---* /
Dies setzt Verarbeitung in Vollbildmodus
Boolesche sketchFullScreen() {}
gibt true zurück;
}
/* ---------------------CLASS: Square ---------------------------*/
Klasse Platz {}
Int xPosition, yPosition;
Quadrat (Int xPos, yPos Int) {}
xPosition = xPos;
yPosition = yPos;
}
Int getX() {}
xPosition zurück;
}
Int getY() {}
yPosition zurück;
}
void Sethos (Int yPos) {}
yPosition = yPos;
}
}