Salut Community,
aujourd'hui, je voudrais montrer brièvement un sonar primitif avec la représentation sur un display TFT. La mise en oeuvre est tenue intentionellement simple et sans correction d'angle. Cet exemple d'application doit démontrer comme on peut réaliser en peu de temps un projet optiquement très impressionnant avec peu de matériel. Dans notre exemple SR04 "scanne" de manière montée un domaine de 180 ° sur SG90 Servo et nous donnons, Hinternisse reconnus distribuent à effet sur notre 1.77" display TFT.
Liste:
1x Alimentation en courant (par exemple, Kit MB102 Breadboard)
1x Servo SG90 avec des parties de montage
1x Display TFT 1.77"
1x HC-SR04
1x Nano V3
Le Pinbelegung :
Alimentation en courant | NanoV3 | Display TFT | SR04 | Servo |
5 V | 5 V | Pin 2 | VCC | rouge |
GND | GND | Pin 1 | GND | noir |
3,3 V | Pin 8 | |||
D2 | Trig | |||
D3 | Echo | |||
D6 | jaune | |||
D8 | Pin 5 | |||
D9 | Pin 6 | |||
D10 | Pin 7 | |||
D11 | Pin 4 | |||
D13 | Pin 3 |
Sketch :
//Servo #include <Servo.h> Servo servo; //HC-SR04 int interval = 0; double distance = 0; //Prepare the TFT #include <TFT.h> //Arduino TFT library (la manière de place) #include <SPI.h>//Display Pins à Nano #define cs 10 #define dc 9 #define rst 8//Instance pour TFT TFT TFTscreen = TFT(cs, dc, rst);//char Array char rc_Printout [4]; void setup() {servo.attach(6); //D6 à Nano pinMode( 2, SORTIE ); pinMode( 3, ENTREE ); Serial.begin(9600); TFTscreen.begin(); TFTscreen.background (0, 0, 0);} void loop() { int r_beam = 100; //D6 TFTscreen.stroke (255, 255, 255); TFTscreen.circle (80,128, r_beam 2); TFTscreen.setTextSize (2); TFTscreen.text ("Dist (cm)", 0, 0); //à droite tournent for (int i=0;i<180;i=i 1) {servo.write(i); measure_dist ();Serial.print(i);Serial.print("\n"); delay(20); int r = distance*2;Chaîne r_Printout = Chaîne(r / 2); TFTscreen.stroke (0, 0, 0); TFTscreen.setTextSize (2); TFTscreen.text (rc_Printout, 100, 0); r_Printout.toCharArray(rc_Printout, 4); TFTscreen.stroke (255, 255, 255); TFTscreen.setTextSize (2); TFTscreen.text (rc_Printout, 100, 0); TFTscreen.stroke (70, 70, 70); TFTscreen.line (80,128,80 r_beam*cos((360-i) *3.14/180), 128 r_beam*sin((360-i) *3.14/180)); TFTscreen.stroke (0, 255, 0); TFTscreen.circle (80 r*cos((360-i) *3.14/180), 128 r*sin((360-i) *3.14/180), 2);} TFTscreen.background (0, 0, 0); TFTscreen.stroke (255, 255, 255); TFTscreen.circle (80,128, r_beam 2); TFTscreen.setTextSize (2); TFTscreen.text ("Dist (cm)", 0, 0); //à gauche tournent for (int i=180;i>0;i=i-1) {servo.write(i); measure_dist ();Serial.print(i);Serial.print("\n"); delay(20); int r = distance*2;Chaîne r_Printout = Chaîne(r / 2); TFTscreen.stroke (0, 0, 0); TFTscreen.setTextSize (2); TFTscreen.text (rc_Printout, 100, 0); r_Printout.toCharArray(rc_Printout, 4); TFTscreen.stroke (255, 255, 255); TFTscreen.setTextSize (2); TFTscreen.text (rc_Printout, 100, 0); TFTscreen.stroke (70, 70, 70); TFTscreen.line (80,128,80 r_beam*cos((360-i) *3.14/180), 128 r_beam*sin((360-i) *3.14/180)); TFTscreen.stroke (0, 255, 0); TFTscreen.circle (80 r*cos((360-i) *3.14/180), 128 r*sin((360-i) *3.14/180), 2);} TFTscreen.background (0, 0, 0);} void measure_dist () {Serial.read(); //Trig SR04 digitalWrite( 2, HIGH ); delayMicroseconds( 100 ); digitalWrite( 2, LOW ); //Echo SR04 interval =pulseIn( 3, HIGH ); distance = interval * 0.017;//cm Serial.print(interval, DEC ); Serial.print( "\t" ); Serial.print(distance, 1);Serial.print( "\n" ); }
6 commentaires
Andreas Wolter
@Douglas Debnar:
Can you explain this in more detail? What is the error you are experiencing?
Douglas Debnar
The code that is posted is wrong. The for loops are missing some things. Pleas check k and repost.
Siebo Mörig
Moin.
Super Idee. Würdet Ihr das ganze noch um eine Fritzing Zeichnug erweitern? Auch ein kleines Video währe sehr anschaulich.
Macht weiter so.
Ist der direkte Betrieb des Servos über den Ausgang so sinnvoll? Oder sollte da besser noch ein Treiber zwischengeschaltet werden?
Vielen Dank
Siebo
Hans-Gerd Valks
Wie wäre es mit einer Säge?😜
Markus Neumann
Hallo Herr Rode,
unser Mini-Breadboard gibt es unter https://www.az-delivery.de/products/mini-breadboard
Heinrich Rode
Moin,
ich möchte das Sonar gerne nachbauen. Jetzt stellt sich die Frage, wo ich so ein kurzes Breadboard her bekomme.
Gruß Heiner