Materialen:
1 x HC-SR04
4 x jumper draden
1 x breadboard
1 x arduino
Hier is de code voor de arduino:
/*
HC-SR04 Ping afstandssensor:
VCC naar 5v van de arduino
GND aan arduino GND
ECHO aan Arduino pin 7
Trig Arduino pin 8
Deze sketch is afkomstig uit Virtualmix: http://goo.gl/kJ8Gl
Is gewijzigd door Winkle inkt hier: http://winkleink.blogspot.com.au/2012/05/arduino-hc-sr04-ultrasonic-distance.html
En verder aangepast door ScottC hier: http://arduinobasics.blogspot.com.au/2012/11/arduinobasics-hc-sr04-ultrasonic-sensor.html
op 10 november 2012.
*/
#define echoPin 7 / / Echo Pin
#define trigPin 8 / / Trigger Pin
#define LEDPin 13 / / LED aan boord
int maximumRange = 200; Grensdetectiewijdte van nodig
int minimumRange = 0; Minimale afstand nodig
lange duur, afstand; Zolang zij worden gebruikt voor het berekenen van de afstand
VOID Setup {}
Serial.begin (9600);
pinMode (trigPin, OUTPUT);
pinMode (echoPin, INPUT);
pinMode (LEDPin, uitvoer); Gebruik maken van LED indicator (indien nodig)
}
void loop {}
/ * De volgende cyclus van de trigPin/echoPin wordt gebruikt om de
afstand van het dichtstbijzijnde object door verkrijgbare weg van het stuiteren. */
digitalWrite (trigPin, laag);
delayMicroseconds(2);
digitalWrite (trigPin, hoge);
delayMicroseconds(10);
digitalWrite (trigPin, laag);
duur = pulseIn (echoPin, hoge);
Berekenen van de afstand (in cm) op basis van de snelheid van het geluid.
afstand = duur/58.2;
Als (afstand > maximumRange = || afstand < = minimumRange) {}
/ * Stuur een negatief getal op computer en draai LED ON
om aan te geven "buiten het bereik" * /
Serial.println("-1");
digitalWrite (LEDPin, hoge);
}
else {}
/ * De afstand naar de computer via seriële protocol, versturen en
uitschakelen LED om aan te geven van de succesvolle lezing. */
Serial.println(distance);
digitalWrite (LEDPin, laag);
}
Vertraging 50 MS vóór volgende lezing.
delay(50);
}
Hier is de code voor verwerking
/ * De volgende verwerking schets werd gemaakt door de ScottC op
de 10 Nov 2012: http://arduinobasics.blogspot.com/
Geïnspireerd door deze Processing Schets door Daniel Shiffman:
http://processing.org/Learning/Basics/SINEWAVE.html
*/
importeren van processing.serial.*;
int numOfShapes = 60; Aantal kwadraten weergeven op scherm
int shapeSpeed = 2; Snelheid waarmee de shapes worden verplaatst naar nieuwe positie
2 = snelst, grotere aantallen zijn langzamer
Globale variabelen
[] MySquares vierkant = nieuwe vierkant [numOfShapes];
int shapeSize, afstand;
String comPortString;
Seriële myPort;
/* -----------------------Setup ---------------------------*/
VOID Setup {}
size(displayWidth,displayHeight); Gebruik volledige schermgrootte.
Smooth(); tekent alle vormen met zachte randen.
/ * Bereken de grootte van de pleinen en de pleinen array initialiseren * /
shapeSize = (breedte/numOfShapes);
for (int i = 0; ik < numOfShapes; i ++) {}
mySquares [i] = nieuwe Square(int(shapeSize*i),height-40);
}
/ * Open de seriële poort voor communicatie met de Arduino
Zorg ervoor dat de COM-poort correct is - ik ben met behulp van COM-poort 8 * /
myPort = nieuwe Serial (dit, "/ dev/cu.usbmodem1421", 9600);
myPort.bufferUntil('\n'); Leiden tot een SerialEvent op nieuwe regel
}
/* ------------------------Draw -----------------------------*/
VOID draw() {}
Background(0); De achtergrond zwart maken
delay(50); Vertraging gebruikt om scherm te vernieuwen
drawSquares(); Het patroon van vierkanten tekenen
}
/* ---------------------serialEvent ---------------------------*/
VOID serialEvent(Serial cPort) {}
comPortString = cPort.readStringUntil('\n');
Als (comPortString! = null) {}
comPortString=trim(comPortString);
/ * De afstand ontvangen door de Arduino gebruiken voor het wijzigen van de y-positie
van het eerste vierkant (anderen zullen volgen). Moet overeenkomen met de
Programmacode-instellingen op de Arduino. In dit geval is 200 het maximum
afstand verwacht. De afstand wordt vervolgens toegewezen aan een waarde
tussen 1 en de hoogte van het scherm * /
afstand = int(map(Integer.parseInt(comPortString),1,200,1,height));
if(Distance<0) {}
/ * Als computer ontvangt een negatief getal (-1), dan is de
sensor is de rapportage van een fout "buiten het bereik". Alle converteren
van deze tot een afstand van 0. */
afstand = 0;
}
}
}
/* ---------------------drawSquares ---------------------------*/
ongeldig drawSquares() {}
int oldY, newY, targetY, redVal, blueVal;
/ * Stel de Y-positie van het 1e plein op basis van
sensor waarde ontvangen * /
mySquares[0].setY((height-shapeSize)-distance);
/ * De positie en de kleur van elk van de kwadraten bijwerken * /
for (int i = numOfShapes-1; ik > 0; ik--) {}
/ * Gebruik van het vorige vierkant positie als doel * /
targetY=mySquares[i-1].getY();
oldY=mySquares[i].getY();
if(ABS(oldY-targetY) < 2) {}
newY = targetY; Dit helpt hen line-up
} else {}
berekenen van de nieuwe positie van het plein
newY=oldY-((oldY-targetY)/shapeSpeed);
}
De nieuwe positie van het plein instellen
mySquares[i].setY(newY);
/ * Het berekenen van de kleur van het plein op basis van haar
positie op het scherm * /
blueVal = int(map(newY,0,height,0,255));
redVal = 255-blueVal;
Fill(redVal,0,blueVal);
/ * Het vierkant op het scherm tekent * /
rect(mySquares[i].getX(), mySquares[i].getY(),shapeSize,shapeSize);
}
}
/ *---sketchFullScreen---* /
Dit brengt verwerking in de modus volledig scherm
Booleaanse sketchFullScreen() {}
return true;
}
/* ---------------------CLASS: Square ---------------------------*/
klasse vierkante {}
int xPosition, yPosition;
Square (int xPos, int yPos) {}
xPosition = xPos;
yPosition = yPos;
}
int getX() {}
retourneren xPosition;
}
int getY() {}
retourneren yPosition;
}
VOID setY (int yPos) {}
yPosition = yPos;
}
}