-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Mikrofon + AVR = Tonsteuerung [fertig]

  1. #1
    Benutzer Stammmitglied Avatar von KR-500
    Registriert seit
    26.12.2007
    Alter
    22
    Beiträge
    91

    Mikrofon + AVR = Tonsteuerung [fertig]

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo

    also ich wollte euch mal wieder eines meiner neuen Projekte vorstellen. Diesmal ist es wie der Titel schon sagt eine Tonsteuerung. Ich hab dieses YouTube-Video ( http://www.youtube.com/watch?v=D-anbOj4O1c ) gesehen und war ziemlich begeistert davon also hab ich beschlossen das einmal nachzubauen.
    Als Mikrofon benutze ich eine kleine Elektretkapsel, die mit einem 10K Widerstand gegen Masse geschaltet ist, jetzt kann man schon erste Signale am Oszilloskop sehen. Das reicht jedoch nicht ganz aus, also musste ein Vorverstärker her. Den habe ich mit einem Transistor(2n2222) realisiert. Das vorverstärke Signal geht nun in einen Subtrahierer, der mit einem OPV realisiert ist. Das Signal wird wiederum mit einem anderen OPV um den Faktor 20 verstärkt. Jetzt geht es in die letzte Station den Schmitt-Trigger, hier wird also aus dem Sinussignal ein Rechtecksignal "gezaubert".
    Das Rechtecksignal geht wiederum in den AVR an einen Interrupt-Eingang wo man nun bequem die Zeit zwischen 2 Flanken messen kann. Hier ist der Code:
    Code:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include "USART_Util.h"
    #include <util/delay.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    
    volatile uint8_t flag=0;
    volatile unsigned int tcnt=0;
    volatile 	char s[11];
    volatile int count = 0;
    volatile int count1 = 0;
    volatile int count2 = 0;
    volatile int count3 = 0;
    
    uint16_t adc_init (int mux) {
    	
    uint16_t result;
    	ADMUX = mux;		//0b00100000
    
    	ADCSRA |= (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1);
      	ADCSRA |= (1<<ADSC);              // eine ADC-Wandlung 
     	while ( ADCSRA & (1<<ADSC) ) {
     	    ;    
     	}
      	result = ADCH;  
      	result = 0; 
    	_delay_ms (35);
    	ADCSRA |= (1<<ADSC);              // eine ADC-Wandlung 
      	while ( ADCSRA & (1<<ADSC) ) {
     		    
    	}
    	result = ADCH;
    	return result;
    	
    }
    
    uint16_t read_adc0 (void){
    	uint16_t y=0;	
    	ADMUX = 0b11100000;
    	ADCSRA |= (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1);
    	ADCSRA |= (1<<ADSC);              // eine ADC-Wandlung 
      	while ( ADCSRA & (1<<ADSC) ) {
    	}
    	y = ADCH;
    	return y;
    }
    
    
    int main (void) {
    
    	USART_Init(USART_BAUD_SELECT);
    	uint16_t data;
    	DDRD = 0x00;
    	adc_init(0);
    	USART_String("Hello World!\n");
    	DDRA = 0xFF;
    
    	GICR |= (1<<INT0);
    	MCUCR |= (1<<ISC00) | (1<<ISC01);
    
    	sei();	
    
    
    	while(1){
    
    	}
    
    	return 0;
    
    }
    
    
    
    ISR( INT0_vect ){
    	if(flag == 0){
    		flag = 1;
    		TCCR1B |= (1<<CS11) | (1<<CS10); //| (1<<CS10);
    		PORTA = 0x00;
    	}
    	else{
    		flag = 0;
    		TCCR1B = 0x00;
    	
    		if((TCNT1 >= 234) && (TCNT1 <= 300)){
                    count++;
            }
    
    		if(count == 25){
            	PORTA |= (1<<PA0);
    		count=0;
            }
    
    
    
            if((TCNT1 >= 151) && (TCNT1 <= 233)){
                count3++;
            }
    
            if(count3 == 25){
               	PORTA |= (1<<PA1);
    			count3 = 0;
            }
    
            if((TCNT1 >= 80) && (TCNT1 <= 150)){
                count2++;
            }
    
            if(count2 == 25){
                PORTA |= (1<<PA2);
    			count2=0;
    		}
    		TCNT1 = 0x00;
    	}
    }
    Die Auswertung klappt schon ganz gut allerdings funktioniert das nur aus maximal 50 cm Entfernung, das ist enttäuschend, da geplant war das man dem Roboter wie im Video aus ca. 1-2 Meter Entfernung Steuern kann. Leider weiß ich nicht weiter denn selbst die Erhöhung der Verstärkung bringt nicht wirklich ein besseres Ergebnis.
    Hat vielleicht schon jemand Anderes Erfahrung mit Mikrofonen und könnte mir Tipps geben? Danke im Vorraus.
    Im Anhang befindet sich ein Bild von dem Aufbau.

    KR-500
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken foto049.jpg  

  2. #2
    Erfahrener Benutzer Begeisterter Techniker Avatar von avrrobot
    Registriert seit
    12.01.2011
    Beiträge
    210
    Blog-Einträge
    9
    was tut es denn ab50 cm entfernung ?
    nichts, oder gibt es wirre signale aus?

  3. #3
    Benutzer Stammmitglied Avatar von KR-500
    Registriert seit
    26.12.2007
    Alter
    22
    Beiträge
    91
    Hi,

    also das Problem hat sich gelöst ich hab noch ein bisschen mit dem Verstärkungsfaktor gespielt und jetzt klappt es auch aus ein paar 1-2 Metern. Ich hab das ganze dann auf Lochraster gelötet. Ein Bild davon sieht man unten. Ich werde jetzt das ganze auf meinen kleinen Roboter bauen und den dann mal durch die Gegend fahren lassen Wenn es so weit werde ich ein Video machen.

    KR-500
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken foto82.jpg  

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.02.2005
    Ort
    Südtirol
    Beiträge
    283
    Hi, kannst du mal den Schaltplan zu dem teil Posten, bin nich ganz so fitt in Sachen OPV-Schaltungen =)

    Gruß Kalle

  5. #5
    Benutzer Stammmitglied Avatar von KR-500
    Registriert seit
    26.12.2007
    Alter
    22
    Beiträge
    91
    Hi,

    im Anhang ist der Schaltplan einmal als Bild und dann noch als Eagle-file. Die Abfrage des Mikros ist nun sehr gut, leider bin ich auf ein Problem gestossen, auf das wahrescheinlich auch der jenige, der das Video mit dem ASURO gemacht hat gestoßen ist. Die Motoren sind leider sehr laut und stören mit ihren geräuschen das Mikro, und so schaukelt sich das ganze leider auf und der Roboter wackelt komisch durch die Gegend Die einzige Lösung scheinen leisere Motoren zu sein. Oder hat jemand Anderes eine Idee?

    KR-500
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken schaltplan_177.png  
    Angehängte Dateien Angehängte Dateien

  6. #6
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.970
    Hallo!

    Man könnte nocht theoretisch die Geräusche von Motoren wegfiltern.

    MfG

  7. #7
    Benutzer Stammmitglied Avatar von KR-500
    Registriert seit
    26.12.2007
    Alter
    22
    Beiträge
    91
    Hi,

    das wäre natürlich eine Möglichkeit, leider sind die Geräusche, die die Motoren machen, hinter dem Schmitt-Trigger nicht mehr vom Pfeifen zu unterscheiden. Also bleiben wahrscheinlich nur leisere Motoren, ich werde trotzdem mal versuchen en Video von dem Aufbau zu machen.

    KR-500

  8. #8
    Erfahrener Benutzer Roboter-Spezialist Avatar von Thoralf
    Registriert seit
    16.12.2003
    Ort
    Dresden
    Beiträge
    530
    Elektretkapsel in Schaumstoff einpacken a la Schalldämpfer und die Anschlüsse über sehr flexible Kabel rausführen oder deine gesamte Schaltung in den Schaumstoffschalldämpfer und dann mit flexiblen Drähten rausführen um Körperschall zu vermeiden. Das wäre erst mal die einfachste Variante. Daraus ergibt sich eine Richtwirkung , die auch gewünscht sein kann. Man kann auch die Mikrofonanordnung gegen die Decke richten. Dann wird der Motorlärm auch gedämpft aber auch deine Stimme aus allen Richtungen empfangen. Vllt. mußt du dann auch die Verstärkung leicht erhöhen. Einfach ein bischen experimentieren.

    Erst dann würde ich an ein Mikrofon in Motornähe und über gegenphasige Einleitung in den Verstärker denken. Damit sind auch keine Wunder zu erwarten, da der Schall deiner Stimme und damit auch des Motorlärms je nach Entfernung (auch frequenzabhängig) die Phasenlage ändert und in verschiedenen Entfernungen zu den Wänden, der Decke und auch Möbel mal den Motorlärm eleiminiert und mal verstärkt.

    Vielleicht wäre auch ein drahtloses Mikrofon eine gute Lösung.

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    01.11.2009
    Beiträge
    46
    Hi,
    mir würden da spontan 2 Sachen einfallen..
    1) entweder ein Mikrofon mit Richtcharakter verwenden.. das würde aber dann bedeuten, dass der Bot deinen Standort erkennen muss und das Mikro auf dich ausrichten muss -> kompliziert

    2) einfacher dürfte PICtures Vorschlag sein.. schau dir doch mal an, auf welchen Frequenzen die Motoren typischerweise stören, wenn du ein wenig Glück hast kannst du diese Analog filtern (also bevor du das Signal wandelst)

    mfg

  10. #10
    Benutzer Stammmitglied Avatar von KR-500
    Registriert seit
    26.12.2007
    Alter
    22
    Beiträge
    91
    Hi,

    so es hat etwas länger gedauert aber ich hab es enlich geschafft ein Video von dem Aufbau zu machen.
    http://www.youtube.com/watch?v=AqvDTCAslPg

    Damit ist das Projekt vorerst fertig. Ich werde aber vielleicht das Thema Tonsteuerung noch einmal aufgreifen und das ganze über IIRs so wie in Elektor realisieren. Oder ich wage mich vielleicht sogar an eine FFT ran, aber das wird sich zeigen.

    KR-500

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •