kramann.info
© Guido Kramann

Login: Passwort:










12 Musikperformance durch Handbewegungen

12 Music performance through hand movements (EN google-translate)

12 Wydajność muzyczna poprzez ruchy dłoni (PL google-translate)

Teillösungen zu der vorangegangenen Übung:

Partial solutions to the previous exercise:

Częściowe rozwiązania poprzedniego ćwiczenia:

SegAnsteuern.zip - Beispiellösung zu letzer Übung: 4fach 7-Segmentanzeige ansteuern.
SegAnsteuernOOP.zip - OOP Beispiellösung. (Hinweis für die, die da waren: An einer Stelle stand inx%5; statt inx%=5;)

Programm läßt alle vier Digits immer von 0..9 zählen.

Program always counts every four digits from 0..9.

Program zawsze liczy co cztery cyfry od 0..9.

Hardware zur Ansteuerung der 4fach 7-Segmentanzeige mit einem Arduino-Micro.

Bild 12-1: Hardware zur Ansteuerung der 4fach 7-Segmentanzeige mit einem Arduino-Micro.

Aufgabe 1

Task 1

Zadanie 1

  • Vorübung

Testen Sie einen Infrarot-Entfernungssensor von Sharp.

Try an infrared range sensor from Sharp.

Wypróbuj czujnik zasięgu podczerwieni firmy Sharp.

  • Verwenden Sie zunächst die Arduino-Library analogRead(..)
  • Versuchen Sie anschließend einen Kanal für die auto-getriggerte 10-Bit-Wandlung mittels Registerkonfiguration zu realisieren.
  • Machen Sie transparent, ob obige Konfigurationen funktionieren, indem Sie die Daten im Serial-Terminal anzeigen lassen.

Schauen Sie sich zur Orientierung noch einmal Kapitel 10 an und ein Beispiel mit dem Sensor:

Take a look at Chapter 10 again for guidance and an example with the Sensor:

Spójrz ponownie na rozdział 10 w celu orientacji i przykład z Czujnik:

http://www.kramann.info/40_Mikrocontroller/02_Oszillator/03_Quarz/index.php

Anschlüsse des Sensors von vorn betrachtet:

Ports of the sensor viewed from the front:

Porty czujnika oglądane z przodu:

  • GELB oder WEISS: Analogausgang
  • ROT: +5Volt
  • SCHWARZ: Masse/Ground

Der Anschluß des Entfernungssensors sollte sehr sorgfältig geschehen, um dabei eine Beschädigung durch falsch verbundene Leitungen zu vermeiden.


01_Infrarot_Sensor.zip - Studentische Lösung mit analogRead(..)
Test_02_register.zip - Musterlösung unter Verwendung von Registern.
Erläuterungen und Material für die nachfolgenden Aufgaben
Explanations and material for the following tasks
Objaśnienia i materiały do ​​następujących zadań

Zum Schutz des MPU6050 sollte besser erst das Programm geflasht werden und er danach erst angeschlossen werden. Dies muß sehr sorgfältig geschehen, um auch dabei eine Beschädigung durch falsch verbundene Leitungen zu vermeiden.


Grundidee: Über einen MPU6050 wird die Orientierung der Schwerkraft relativ zur Arduino-Platine gemessen. Diese Information wird verwendet, um mit dem Arduino Töne zu erzeugen.

Basic idea: The orientation of gravity becomes relative via an MPU6050 measured to the arduino board. This information is used to communicate wi to produce sounds to the Arduino.

Podstawowa idea: Orientacja grawitacji staje się względna poprzez MPU6050 mierzone na tablicy Arduino. Ta informacja służy do komunikacji wytwarzać dźwięki dla Arduino.

Vorgabe: Testschaltung für den MPU6050

Default: Test circuit for the MPU6050

Domyślnie: obwód testowy dla MPU6050

Nachfolgende Testschaltung wird am Handrücken mit dem USB-Kabel zum Arm hin orientiert befestigt.

Subsequent test circuit is oriented towards the back of the hand with the USB cable towards the arm attached.

Kolejny obwód testowy jest zorientowany w kierunku tylnej części dłoni za pomocą kabla USB w kierunku ramienia w załączeniu.

Hängt der Arm leuchtet keine der LEDs.

If the arm hangs, none of the LEDs will light up.

Jeśli ramię się zawiesi, żadna z diod LED nie zaświeci się.

Wird der Arm oder das Handgelenk angehoben, beginnt die rote LED an zu leuchten.

When the arm or wrist is raised, the red LED will light up.

Po podniesieniu ręki lub nadgarstka zapali się czerwona dioda LED.

Wird dazu noch das Handgelenk nach links oder rechts gedreht, leuchtet die grüne, bzw. die gelbe LED.

If you turn your wrist to the left or right, the green light or the yellow LED.

Jeśli przekręcisz swój nadgarstek w lewo lub w prawo, zielone światło lub żółta dioda LED.

Testschaltung auf dem Handrücken befestigt.

Bild 12-2: Testschaltung auf dem Handrücken befestigt.

Testschaltung.

Bild 12-3: Testschaltung.

Das Programm liefert die drei orthogonalen Beschleunigungskomponenten auf dem seriellen Monitor.

Bild 12-4: Das Programm liefert die drei orthogonalen Beschleunigungskomponenten auf dem seriellen Monitor.

test_mpu6050_2.zip - Beispielprojekt.
#include<math.h>
#include<Wire.h>

//A0 = D18
//A1 = D19
//A2 = D20
//A3 = D21
//A4 = D22
//A5 = D23
//A6 = D24
//A7 = D25
//A8 = D26
//A9 = D27
//A10 = D28
//A11 = D29

const int MPU=0x68;  // I2C address of the MPU-6050
int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;
double ax,ay,az;
double arx,ary,arz;

void setup() 
{
  //Pins deaktivieren, wo MPU6050 anliegt:
  pinMode(18,INPUT);  
  pinMode(19,INPUT);  
  pinMode(20,INPUT);  
  pinMode(21,INPUT);  
  pinMode(22,INPUT);  
  pinMode(23,INPUT);  

  //LEDs
  pinMode(11,OUTPUT);  
  pinMode(12,OUTPUT);  
  digitalWrite(11,LOW);
  digitalWrite(12,LOW);
  
  pinMode(8,OUTPUT);  
  pinMode(9,OUTPUT);  
  digitalWrite(8,LOW);
  digitalWrite(9,LOW);
  
  pinMode(4,OUTPUT);  
  pinMode(5,OUTPUT);  
  digitalWrite(4,LOW);
  digitalWrite(5,LOW);
  
  //eigentliche Konfiguration
  Wire.begin();
  Wire.beginTransmission(MPU);
  Wire.write(0x6B);  // PWR_MGMT_1 register
  Wire.write(0);     // set to zero (wakes up the MPU-6050)
  Wire.endTransmission(true);
  Serial.begin(9600);  
}

void loop() 
{
  Wire.beginTransmission(MPU);
  Wire.write(0x3B);  // starting with register 0x3B (ACCEL_XOUT_H)
  Wire.endTransmission(false);
  Wire.requestFrom(MPU,6,true);  // request a total of 14 registers
  AcX=Wire.read()<<8|Wire.read();  // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)     
  AcY=Wire.read()<<8|Wire.read();  // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
  AcZ=Wire.read()<<8|Wire.read();  // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
  
  ax = (double)AcX;
  ay = (double)AcY;
  az = (double)AcZ;    
  
  arx = ax / sqrt(ay*ay + az*az); 
  ary = ay / sqrt(ax*ax + az*az); 
  arz = az / sqrt(ax*ax + ay*ay); 
  
  if(ary<-1.5)
  {
       //Ruhestellung, Arm hängt
       analogWrite(5,0);
       analogWrite(9,0);
       analogWrite(11,0);
  }
  else
  {
       if(ary<1.05)
       {
           analogWrite(11,(int)((ary+1.5)*10.0));
           
           if(arx>0.5 && arx<3.05)
           {
               analogWrite(9,(int)((arx-0.5)*10.0));             
           }
           else if(arx>3.05)
           {
               analogWrite(9,255);             
           }
           else
           {
               analogWrite(9,0);             
           }
           
           if(arx<-0.5 && arx>-3.05)
           {
               analogWrite(5,(int)((-arx-0.5)*10.0));             
           }
           else if(arx<-3.05)
           {
               analogWrite(5,255);             
           }
           else
           {
               analogWrite(5,0);             
           }
           
       }
       else
       {
           analogWrite(11,255);
       }
  }
  
  Serial.print(arx);
  Serial.print("	");
  Serial.print(ary);
  Serial.print("	");
  Serial.print(arz);
  Serial.println("	");
  
  delay(200);
}

Code 12-1: Quelltext zum Beispielprojekt.

Aufgabe 2

exercise 2

Zadanie 2

Nehmen sie die Testschaltung und das vorangehende Kapitel zu Tonerzeugung als Grundlage dazu, ein Tonerzeugungsgerät zu entwickeln, dass am Handgelenk befestigt wird und gemäß der Handgelenkbewegung Klänge nach selbst erfundenen Regeln erzeugt.

Take the test circuit and the previous chapter on tone generation as Basis for developing a tone generator that works on the wrist is fixed and according to the wrist movement sounds after themselves generated rules invented.

Zapoznaj się z obwodem testowym i poprzednim rozdziałem o generowaniu tonów jako Podstawa do opracowania generatora brzmień, który działa na nadgarstku jest stały i zgodnie z ruchem nadgarstka brzmi po sobie wygenerowane reguły zostały wymyślone.

Die Lautsprecher mit den 50Ohm Impedanz lassen sich ohne Vorwiderstand an die digitalen Ausgänge des Arduino anschließen, sollten aber aus Rücksicht auf die Nerven Ihrer Kommilitonen mit einem Vorwiderstand versehen werden, z.B. 2200Ohm.

The speakers with the 50ohm impedance can be without Connect the series resistor to the digital outputs of the Arduino, but should be out of consideration for the nerves of your fellow students be provided with a series resistor, e.g. 2200Oh

Głośniki z impedancją 50ohm mogą być bez Podłącz rezystor szeregowy do wyjść cyfrowych Arduino, ale powinno być niepotrzebne dla nerwów waszych kolegów być wyposażone w rezystor szeregowy, np. 2200Oh

Bringen Sie das Gesamtprogramm in objektorientierte Form.

Bring the entire program in an object-oriented form.

Doprowadź cały program do postaci obiektowej.

Aufgabe 3

Task 3

Zadanie 3

Verwenden Sie als Sensor einen Sharp-Infrarot-Entfernungssensor statt des MPU6050.

Use a Sharp infrared range sensor as the sensor instead of the MPU6050.

Użyj czujnika podczerwieni Sharp jako czujnika zamiast MPU6050.

Versuchen Sie hier die ADW-Wandlung über Register hinzubekommen.

Try to get the ADW conversion via registers here.

Spróbuj uzyskać tutaj konwersję ADW za pośrednictwem rejestrów.