16-10-2012
Op http://arduino.cc/en/Reference/Tone staat netjes beschreven hoe de opdracht luidt om geluid uit een Arduino te halen. Om te kijken hoe die verschillende instellingen klinken heb ik een
opzetje gemaakt met 3 potmeters zodat de 3 waarden in te stellen zijn.
tone(aangesloten luidspeaker, toonhoogte, duur)
De site http://code.google.com/p/rogue-code/wiki/ToneLibraryDocumentation waar ik ook de afbeelding van heb gebruikt heeft hele goede informatie.
Nu heb ik daarbij ook (3e potmeter) een waarde rust om in te stellen.
Dan kan je GELUIDHOOGTE PULSLENGTE en RUST instellen waardoor je ook bepaalde efecten kan instellen.
Die 3 potmeters b.v. 1 kOhm zijn met de buitenste pootjes aan één kant verbonden met de 5V plus en en andere kant met de 5V min. De loper kan dus van 5V plus naar 5V min bediend worden.
Sluit één potmeters aan op analoog 0 t/m 2.
Houdt rekening met:
(http://arduino.cc/forum/index.php/topic,28055.0.html)
Since Tone uses Timer2 and Timer2 is an eight bit timer, frequencies less than 31 Hz are not possible.
in other words, change this
tone(SPK_PIN, 0, REST_LENGTH)
To this
noTone(SPK_PIN)
delay(REST_LENGTH)
Hiervan moet ik nog even verder uitzoeken wat het voor of nadeel is.
Er wordt ook nog aan gegeven dat je een 4010 IC kan gebruiken om de frequentie nog lager te kunnen maken.
The range of frequencies that can be produced depends on the microcontroller clock frequency and the timer which is being used:
MCU clock 8 bit timer Flow 16 bit timer Flow Fhigh
8 MHz 16 Hz 1 Hz (1/16 Hz) 4 MHz
16 MHz 31 Hz 1 Hz (1/8 Hz) 8 MHz
Although Fhigh can go as high as 8 MHz, the human hearing range is typically as high as 20 kHz.
Tone accuracy is dependent on the timer prescalar. Frequency quantization occurs as the frequencies increase per prescalar.
If you used a 16 bit timer (e.g. timer 1, or timers 3,4,5 on '1280), you could generate "tones" down to 1/8 Hz (one cycle every 8 seconds), although the library only accepts integers for frequency.
After all is said and done, because play() only accepts unsigned integers for frequency, the maximum frequency that can be produced is 65535 Hz - which, after rounding, results in a 65573.77 Hz "tone" on a 16 MHz part. Even if play accepted larger values for frequency, you couldn't achieve better than around 80KHz with the Tone library because the pin toggling is done in software. Each toggle, in software, requires AT LEAST 50+ cycles.
Waarom deze mededeling? De potmeter kan een bereik weergeven van 0 t/m 1023. Doe je een simpele opdracht dan zal de frequentie ook tussen 0 en 1023 in te stellen zijn.
65535/1023 is grofweg 64. Elke stap van de frequentie potmeter moeten we dus met 64 vermeningvuldigen. De pauze's lijkt me niet echt te groot hoeven te zijn en die delen we door 4 waardoor je de max. waarde 255 krijgt.
(afbeelding van arduino.cc)
Potmeter 1 is aangesloten op plus, min en analoog 0 van de Arduino. De andere potmeter sluit je ook aan op de plus min en Arduino 1 en 2.
int speaker=8;
int waarde;
int interupt;
int pauze;
void setup(){
Serial.begin(9600);
}
void loop(){
waarde= analogRead(0)*64;
interupt= analogRead(1)/4;
pauze= analogRead(2)/4;
tone(speaker,waarde,interupt);
tone(11,waarde,interupt);
Serial.print("Waarde ");
Serial.print(waarde);
Serial.print(" Tijd ");
Serial.print(interupt);
Serial.print(" Pauze ");
Serial.println(pauze);
delay(pauze);
}
Met deze sketch moet je redelijk het bereik kunnen instellen. En de waarden op de PC kunnen aflezen.
De robotstap gaat aanvangen, nu de Hbrug met geluid en via afstandbediening aangestuurd.
Het is niet erg mooi maar lijkt een beetje op een moter geluid.
tone(11,30,30);
delay(vertr);
tone(10,40,40);
delay(vertr);
vertr is dan een vertraging bij stilstand van ongeveer 50 en bij volgas ongeveer 20 msec.
Als je dus je moter er aan wil koppelen die stilstaat (analogWrite 0) en volgas (analogWrite 255) dan is 50-20=30 en 255-50=205 255/30=0,14
Elke motor stap tussen 0 en 255 moet je vermenigvuldigen met 0,14 en dat van de vertr aftrekken.
Zie
hier
Voor de versterking raad ik de 3 Watt stereo GF1002 Amplifier aan. Kompleet uit China. Hoef je dus geen print te ontwerpen.
Bronnen:
howtomechatronics arduino-touch-screen-music-player-alarm-clock-project
makezine.com
1002 bij Ali