vineri, 31 ianuarie 2014

Generare sunete cu Arduino

   Un mod de avertizare, in afara celei optice (aprinderea unul LED sau bec) este si cea acustica (sonora).
   Pentru inceput am incercat ceva simplu, folosind un difuzor piezo, care se gaseste in pachetul numit Arduino Starter Kit si are codul PKM22EPP-40.
   Prima sursa de inspiratie a fost articolul Learn Arduino, Lesson 10. Making Sounds scris de Simon Monk de la Adafruit.
   Schema de conectare este foarte simpla:
   Am folosit placuta Arduino facuta de Nelu Gulie, difuzorul piezo si 2 fire cu conectori mama-tata:
   Am incarcat sketch-ul din articol, apoi l-am modificat pentru mai multe tipuri de sunete, cel care mi-a placut fiind cel ce imita alarma de la calea ferata, cand e bariera lasata.
   Sketch-ul, despre care am mentionat mai inainte, este:
/*
inspired by Adafruit Arduino - Lesson 10. Pseudo Thermin
adapted sketch by niq_ro from http://www.tehnic.go.ro &
http://nicuflorica.blogspot.com/
version 2.1.1 - Craiova, 31.01.2014
*/
 
int speakerPin = 12;
 
void setup()
{
}
 
void loop()
{
  for (int i=1; i < 100; i++)
  {
  int pitch = 200 + i *20;
  tone(speakerPin, pitch);
  delay(10); 
  }
  noTone(speakerPin);
  delay(500);
}
   Am facut si postat filmuletul Arduino + piezo speaker, in care am incarcat mai multe sketch-uri si, astfel, am obtinut mai multe tonuri, sunete, etc:
   Ulterior, m-am gandit sa conectez un contact fara retinere (push button) si doar atunci sa se genereze sunete. Aceasta tasta o s-o conectez la pinul D9, iar contactul o sa fie catre masa.
   Sketch-ul va fi:
/*
inspired by Adafruit Arduino - Lesson 10. Pseudo Thermin
adapted sketch by niq_ro from http://www.tehnic.go.ro &
http://nicuflorica.blogspot.com/
version 2.1.2 - Craiova, 31.01.2014
*/
 
int speakerPin = 12;   
int buttonPin = 9;     // the number of the pushbutton pin
int buttonState = 0;         // variable for reading the pushbutton status
 
void setup()
{
 pinMode(buttonPin, INPUT);    
  
}
 
void loop()
{
  digitalWrite(buttonPin, HIGH); // pull-ups on
  
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

  // check if the pushbutton is pressed.
  // if it is, the buttonState is LOW:
  if (buttonState == LOW) {     
  for (int i=1; i < 100; i++)
  {
  int pitch = 200 + i *20;
  tone(speakerPin, pitch);
  delay(10); 
  }
  noTone(speakerPin);
  delay(500);    
  } 
}
   Montajul, folosind aceeasi placuta Arduino facuta de Nelu, a fost compleata cu un fir cu conectori tata-tata, un pin fiind pus la D9, iar celalalt in aer, pe care-l conectez la masa, cand vreau sa fac contactul pentru generarea sunetelor:
iar schema de conexiuni este:
   Filmuletul Arduino + piezo speaker (II) arata modul de functionare al acestui montaj:
   Daca nu aveti un difuzor piezo, puteti folosi unul obisnui, care are o impedante uzuala de 4 ohmi pentru cele auto, 8 ohmi pentru difuzoarele de casa si 16 ohmi in jucarii, mai sunt si difuzoare de 32 ohmi folosite la unele casti... oricum rebuie inseriate cu o rezistenta de minim 100 ohmi, pentru a evita suprasolicitatea iesirii microcontrolerului.

01.02.2014
   Am facut un test cu un mic difuzor de 0,5W si 8 ohmi, recuperat dintr-o veche carcasa de calculator, inseriat cu o rezistenta de 200 ohmi:
 
 
   Nivelul acustic este mai redus decat cu difuzorul piezo, poate si din cauza valorii mari a rezistentei aditionale cu care am incercat...

Un comentariu: