Matériaux :
1 x HC-SR04
4 x fils de raccordement
1 carte de test x
1 x arduino
Voici le code pour l’arduino :
/*
Capteur de distance HC-SR04 Ping :
VCC à 5v de l’arduino
GND pour arduino GND
L’écho sur la broche 7 de Arduino
Trig pour Arduino Broche 8
Cette esquisse provenance de Virtualmix : http://goo.gl/kJ8Gl
A été modifié par encre Winkle ici : http://winkleink.blogspot.com.au/2012/05/arduino-hc-sr04-ultrasonic-distance.html
Et mis à jour le plus près d’écossais ici : http://arduinobasics.blogspot.com.au/2012/11/arduinobasics-hc-sr04-ultrasonic-sensor.html
le 10 novembre 2012.
*/
#define echoPin 7 / / Echo Pin
#define trigPin 8 / / l’ergot
#define LEDPin 13 / / LED à bord
int maximumRange = 200 ; Portée maximale nécessaire
int minimumRange = 0 ; Portée minimale nécessaire
longue durée, distance ; Durée utilisée pour calculer la distance
void setup() {}
Serial.Begin (9600) ;
pinMode (trigPin, sortie) ;
pinMode (echoPin, entrée) ;
pinMode (LEDPin, sortie) ; Utilisez l’indicateur LED (si nécessaire)
}
void loop() {}
/ * Le cycle suivant de trigPin/echoPin est utilisé pour déterminer la
distance de l’objet le plus proche en faisant rebondir soundwaves hors de lui. */
digitalWrite (trigPin, basse) ;
delayMicroseconds(2) ;
digitalWrite (trigPin, HIGH) ;
delayMicroseconds(10) ;
digitalWrite (trigPin, basse) ;
durée = pulseIn (echoPin, HIGH) ;
Calculer la distance (en cm) basée sur la vitesse du son.
distance = durée/58,2 ;
Si (distance > = maximumRange || distance < = minimumRange) {}
/ * Envoyer un nombre négatif à l’ordinateur et tour LED ON
pour indiquer "out of range" * /
Serial.println("-1") ;
digitalWrite (LEDPin, élevé) ;
}
else {}
/ * Envoyer la distance à l’ordinateur en utilisant le protocole série, et
Éteignez LED pour indiquer une lecture réussie. */
Serial.println(distance) ;
digitalWrite (LEDPin, basse) ;
}
Délai 50ms avant la prochaine lecture.
Delay(50) ;
}
Voici le code de traitement
/ * L’esquisse de traitement suivant a été créé par ScottC sur
le 10 novembre 2012: http://arduinobasics.blogspot.com/
Inspiré par cette esquisse de traitement par Daniel Shiffman :
http://Processing.org/learning/Basics/SineWave.html
*/
Import processing.serial.* ;
int numOfShapes = 60 ; Nombre de places pour afficher à l’écran
int shapeSpeed = 2 ; Vitesse à laquelle les formes se déplacent à nouveau poste
2 = croissance la plus rapide, plus grand nombre est plus lent
Variables globales
Carré [] mySquares = nouveau carré [numOfShapes] ;
int shapeSize, distance ;
String comPortString ;
Serial myPort ;
/* -----------------------Setup ---------------------------*/
void setup() {}
Size(DisplayWidth,DisplayHeight) ; Utiliser la taille de l’écran entier.
Smooth() ; dessine toutes les formes avec des bords lisses.
/ * Calculer la taille des carrés et initialiser le tableau carrés * /
shapeSize = (largeur/numOfShapes) ;
pour (int i = 0; i < numOfShapes; i ++) {}
mySquares [i] = new Square(int(shapeSize*i),height-40) ;
}
/ * Ouvrir le port série pour la communication avec l’Arduino
Assurez-vous que le port COM est exact - j’utilise le port COM 8 * /
myPort = nouvelle série (ceci, "/ dev/cu.usbmodem1421", 9600) ;
myPort.bufferUntil('\n') ; Déclencher une SerialEvent sur une nouvelle ligne
}
/* ------------------------Draw -----------------------------*/
{} void draw()
Background(0) ; Rendre le fond noir
Delay(50) ; Délai utilisé pour rafraîchir l’écran
drawSquares() ; Dessiner le motif des carrés
}
/* ---------------------serialEvent ---------------------------*/
void serialEvent(Serial cPort) {}
comPortString = cPort.readStringUntil('\n') ;
Si (comPortString! = null) {}
comPortString=trim(comPortString) ;
/ * La distance reçue par l’Arduino permet de modifier la position y
de la première place (d’autres suivront). Doit correspondre à la
paramètres du code sur l’Arduino. Dans ce cas 200 est le maximum
distance prévue. La distance est alors mappée à une valeur
entre 1 et la hauteur de votre écran * /
distance = int(map(Integer.parseInt(comPortString),1,200,1,height)) ;
if(distance<0) {}
/ * Si l’ordinateur reçoit un nombre négatif (-1), puis le
capteur rapporte une erreur "out of range". Convertir tous
de ceux-ci à une distance de 0. */
distance = 0 ;
}
}
}
/* ---------------------drawSquares ---------------------------*/
void drawSquares() {}
newY oldY, int, targetY, redVal, blueVal ;
/ * La position Y de la 1ère place basée sur la valeur
valeur de la sonde a reçu * /
mySquares[0].setY((height-shapeSize)-distance) ;
/ * Mise à jour de la position et la couleur de chacun des carrés * /
pour (int i = numOfShapes-1; i > 0; i--) {}
/ * Utilisez la position de la place de la précédente comme cible * /
targetY=mySquares[i-1].getY() ;
oldY=mySquares[i].getY() ;
if(ABS(oldY-targetY) < 2) {}
newY = targetY ; Ceci aide à les aligner
} else {}
calculer la nouvelle position du carré
newY=oldY-((oldY-targetY)/shapeSpeed) ;
}
Définir la nouvelle position du carré
mySquares[i].setY(newY) ;
/ * Calculer la couleur de la place basée sur sa
position sur l’écran * /
blueVal = int(map(newY,0,height,0,255)) ;
redVal = 255-blueVal ;
Fill(redVal,0,blueVal) ;
/ * Dessiner le carré sur l’écran * /
Rect(mySquares[i].GetX(), mySquares[i].getY(),shapeSize,shapeSize) ;
}
}
/ *---sketchFullScreen---* /
Cela met la transformation en Mode plein écran
Boolean sketchFullScreen() {}
retourne la valeur true ;
}
/* ---------------------CLASS: Square ---------------------------*/
classe {carré
int xPosition, PositionY ;
Carré (int xPos, yPos int) {}
xPosition = xPos ;
PositionY = yPos ;
}
int getX() {}
retourner le xPosition ;
}
int getY() {}
retour PositionY ;
}
void setY (int yPos) {}
PositionY = yPos ;
}
}