Melo­dien spielen

Lese­zeit: 3 Minu­ten
Navi­ga­ti­on

Der Ultra­schall­sen­sor soll als "Syn­the­si­zer" die­nen: je nach Ent­fer­nung soll ein Ton gespielt werden.

Ultra­schall­sen­sor

Ein Bei­spiel:

Benö­tig­te Bauteile:

  • Ultra­schall­sen­sor HC-SR04
  • Laut­spre­cher
  • Lei­tungs­dräh­te

Damit der Ultra­schall­sen­sor ord­nungs­ge­mäß arbei­ten kann, musst du ihn so ein­ste­cken, dass Sen­der und Emp­fän­ger nach vorn zei­gen, damit das Signal unge­hin­dert gesen­det und emp­fan­gen wer­den kann. Die Lei­tungs­dräh­te wer­den auf der Rück­sei­te eingesteckt.

Baue die Schal­tung auf.
(Fah­re mit der Maus über das Bild, um die Bezeich­nun­gen der Bau­tei­le zu sehen)

Defi­nie­re die Variablen:

# define SENDEN 6 
# define ECHO 7 
# define LAUTSPRECHER 4

// Variable für Zeit und Entfernung initialisieren 
long Zeit;
long Entfernung;

Der setup-Teil:

void setup() 
{  
  pinMode(SENDEN, OUTPUT); 
  pinMode(ECHO, INPUT); 
}

Es ist sinn­voll, das Abspie­len des Tons nur unter­halb einer bestimm­ten Ent­fer­nung (hier 20 cm) zuzulassen.

Im loop-Teil setzt eine ➨map-Anwei­sung die Ent­fer­nung in die Fre­quenz des Tons um:

void loop() 
{  
  // Sender kurz ausschalten um Störungen des Signals zu vermeiden   
  digitalWrite(SENDEN, LOW);
  delay(10); 

  // Signal für 10 Mikrosekunden senden 
  digitalWrite(SENDEN, HIGH); 
  delayMicroseconds(10);

  // Sender ausschalten
  digitalWrite(SENDEN, LOW); 

  // pulseIn → Zeit messen, bis das Signal zurückkommt 
  Zeit = pulseIn(ECHO, HIGH);

  /*
    Entfernung in cm berechnen   
    Zeit/2 → nur eine Strecke soll berechnet werden      
    Umrechnung in cm  
  */ 
  Entfernung = (Zeit / 2) * 0.03432;   

  // nur Entfernungen < 20 cm zulassen
  if (Entfernung < 20) 
  {  
    delay(500);  
    
    // Entfernung 1 bis 20 auf Frequenzbereich 200 – 1000 umwandeln
    tone(LAUTSPRECHER, map(Entfernung, 1, 20, 200, 1000), 500);
  }
}

Du kannst natür­lich auch ande­re Fre­quenz­be­rei­che verwenden.



Ver­wand­te Aufgaben:


Letzte Aktualisierung: 22. Nov 2020 @ 14:45