Trustpilot -         •           FRI FRAGT VED KØB OVER 700 KR.         •           Skriv til os         •           30 dages returret

Byg en theremin med Arduino og ultralyd

Illustration: Byg en theremin med Arduino og ultralyd

En theremin er et instrument, du spiller på uden at røre det. I denne udgave styrer afstanden fra din hånd til en ultralydssensor tonen fra en lille buzzer. Det tager en eftermiddag at bygge, og koden er kort nok til at forstå linje for linje.

Det skal du bruge

241,80 kr.Samlet, inkl. moms

Har du allerede nogle af delene? Fjern fluebenet.

Du skal bruge en computer med Arduino IDE, som er gratis. USB-kablet til kortet følger med.

Sådan virker det

HC-SR04 sender en kort ultralydspuls ud, som du ikke kan høre, og lytter efter ekkoet. Kortet måler, hvor lang tid der går, før ekkoet kommer tilbage. Lyden bevæger sig ca. 340 meter i sekundet og skal både frem og tilbage, så afstanden i centimeter er cirka tiden i mikrosekunder delt med 58.

Afstanden bliver omsat til en frekvens. Arduinos tone()-funktion laver en firkantbølge på buzzerens pin, og fordi buzzeren er passiv, spiller den præcis den tone, du beder om. Hånden tæt på giver høje toner, længere væk giver dybe. Er der intet inden for 50 cm, er der stille.

Sådan bygger du det

  1. Forbind ultralydssensoren til Uno’en med han-hun-ledningerne: VCC til 5V, GND til GND, Trig til pin 9 og Echo til pin 10.
  2. Find pinnavnene på buzzermodulet. Signalet er ofte mærket S, og minus med et minustegn eller GND. Signalet går til pin 8 og minus til en af Uno’ens andre GND-pinde.
  3. Har buzzermodulet også en plus-pin, så sæt den på 3,3V. Uno’en har kun én 5V-pin, og den bruger sensoren. Modulet kan køre på både 3,3 og 5 V.
  4. Åbn Arduino IDE, vælg Arduino Uno som board og vælg den port, kortet dukker op på. Kortet er Uno-kompatibelt, så det opfører sig som en almindelig Uno.
  5. Upload koden herunder. Hold hånden mellem 5 og 50 cm over sensoren, og bevæg den langsomt op og ned.
  6. Lad sensoren pege op mod loftet, så den ikke fanger bordkanten eller væggen. Den ser kun i en smal kegle på ca. 15 grader, så hånden skal være lige over den.

Koden

// Theremin: afstanden til hånden styrer tonen
const int TRIG = 9;
const int ECHO = 10;
const int BUZZER = 8;

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

void loop() {
  // send en kort ultralydspuls
  digitalWrite(TRIG, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG, LOW);

  // mål ekkoet, giv op efter 30 ms (0 = intet ekko)
  long varighed = pulseIn(ECHO, HIGH, 30000);
  long cm = varighed / 58;

  if (cm >= 5 && cm <= 50) {
    // tæt på = høj tone, langt væk = dyb tone
    int frekvens = map(cm, 5, 50, 2000, 200);
    tone(BUZZER, frekvens);
  } else {
    noTone(BUZZER);  // ingen hånd: stille
  }
  delay(50);
}

Byg videre

  • Lås tonerne til en skala, fx C-dur, så det lyder som musik og ikke som en sirene.
  • Tag gennemsnittet af de sidste tre målinger, så tonen ryster mindre.
  • Sæt en knap på, der skifter mellem glidende toner og skalaen.
  • Byg en kasse til det hele, med sensoren i toppen og buzzeren bag et lille hul.

Sidder du fast? Vi hjælper gratis med kode og opsætning. Skriv til [email protected].

Share this post