* [[file:///home/csanyipal/Emacs/Org-mode/Minden_tudas_ide_vezet__innen_talalhato_meg.org][Vissza a Mindentudáshoz C-c C-o]] * Arduino ** Exhibition What you've made with Arduino. http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?board=projects ** Uses Of Arduino Arduino is a general purpose I/O board. - An example of input would be a temperature sensor, - an example of an output would be a relay. In this example application, the Arduino could be programmed as - a computerised temperature controller. This is but one application of the Arduino, others would include: - Robots, - Embedded Electronics, - Web Devices via Ethernet Shield, etc. A range of completed projects can be found on the Arduino Forums here: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?board=projects ** Melyik Arduino készletet vegyem meg? *** Fritzing Starter Kit / Arduino Uno http://www.tinkersoup.de/product_info.php?products_id=363 *** STARTER KIT Get a Fritzing Starter Kit to start learning Arduino and support Fritzing http://fritzing.org/shop/starter-kit/ ** PéldaProjektek Arduinoval *** dallam_Melody_terv **** A program magyarázata ***** A program fejléce /* Dallam Ez a program piezoelektromos kristállyal dallamot játszik. Megfelelő gyakorisággal 5V (HIGH), majd 0V (LOW) feszültséget küld a piezoelektromos kristályra. A HIGH és a LOW érték váltakozása tulajdonképpen szögletes hullám: __ _____ ___ 5V _| |__| |____| |_ 0V szün magas szün magas szün magas szün A négyszögletes hullám szöneteinek, magas, és alacsony részeinek időbeli hosszúsága meghatározható az Arduino lap beprogramozásával. A piezoelektromos kristály egy vékony, körlap alakú fémlemezre (membránra) van ragasztva, ezért a membrán a kristállyal együtt változtatja alakját: 5V feszültségnél a membrán kidomborodik, 0V feszültségnél pedig visszanyeri eredeti, sík alakját. Ha a membrán ezt az alakváltozást megfelelő gyakorisággal (rezgésszámmal) teszi, akkor a rezgésszámnak megfelelő magasságú hangot hoz létre. Az áramkör: - a piezo elem + (piros) kivezetése csatlakozik a digitális 9-ik tűre, - a piezo elem - (fekete) kivezetése le van földelve. http://arduino.cc/en/Tutorial/Melody Készítette: dátum ismeretlen, szerző ismeretlen. Magyarra fordította és átírta 2012. július 6-án Csányi Pál A zenei hang magasságát a következő matematikai képlet adja: magasIdeje = időszakasz / 2 = 1 / (2 x hangRezgésszáma) ahol a magasIdeje a négyszöghullám magas részének időbeli hossza. A különböző hangokat a következő táblázat írja le: hang rezgésszám időszakasz magasIdeje c 261 Hz 3830 1915 d 294 Hz 3400 1700 e 329 Hz 3038 1519 f 349 Hz 2864 1432 g 392 Hz 2550 1275 a 440 Hz 2272 1136 h 493 Hz 2028 1014 C 523 Hz 1912 956 Ez a példaprogram public domain szabadalom alatt áll. */ ***** A program testének részei ****** Változók megadása // a piezoelektromos kristály "hangszóró" a 9-ik // digitális tűre van csatlakoztatva int hangszoroTu = 9; // a hangjegyek száma a dallamban int ahangjegyekszama = 28; // a dallam egy sorozatban vannak megadva // a betűk a hangjegyeket, a végén a szóköz szünetet jelent char hangjegysor[] = "cecegg cecegg Chagfa gfedcc "; // az egymást követő hangok hossza egy sorozatban van megadva int hanghossza[] = { 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1,1,1,1,2,1,1,1,1,1,1,2,1,4 }; int sebesseg = 300; ****** szolaHang függvény // létrehozza a szolaHang függvényt, amely megszólaltatja a hangot // a függvény két egész számú változót kér, melyek: hang és idotartam // a hang változó a szolaHangjegyHangja függvényben kap értéket // Itt rezegtetjük meg a membránt! void szolaHang(int hang, int idotartam) { // alább egy ismétlődő rész következik: // tedd, míg i kisebb (időtartam x 1000L) értékénél // Mi az L? Válasz itt, az U & L formatters cím alatt: // http://arduino.cc/en/Reference/IntegerConstants // i értékét növeld minden lépésben a hang változó kétszeresével // i += hang * 2 jelentése: i = i + hang x 2 for (long i = 0; i < idotartam * 1000L; i += hang * 2) { // 5 Voltot adunk a piezoelektromos kristálynak digitalWrite(hangszoroTu, HIGH); // legyen 5V a 'hang' értékének megfelelő időhosszig delayMicroseconds(hang); // 0 Voltot adunk a piezoelektromos kristálynak digitalWrite(hangszoroTu, LOW); // legyen 0V a 'hang' értékének megfelelő időhosszig delayMicroseconds(hang); } } ****** szolaHangjegyHangja függvény // létrehozza a szolaHangjegyHangja függvényt, amely // kér egy betűjel (hangjegy), és egy egész számú (idotartam) változót, // megadja a hangjegyek neveit és a nekik megfelelő hosszúságú időtartamot, // ameddig majd kapják a szögletes hullám MAGAS értékét. void szolaHangjegyHangja(char hangjegy, int idotartam) { char hangjegynevek[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'h', 'C' }; int hangok[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 }; // lejátssza a hangjegy nevének megfelelő hangot for (int i = 0; i < 8; i++) { // ha a hangjegyeknevek sorozatból az egyik elem // megfelel a hangjegy változó pillanatnyi értékének if (hangjegynevek[i] == hangjegy) { // akkor hívja a szolaHang függvényt a következő változókkal // hangok és időtartam; itt a hangok[i] értéke // lesz a hang változó értéke a szolaHang függvény számára szolaHang(hangok[i], idotartam); } } } ****** Beállítások // a digitális 9-ik tű kimenetre van beállítva void setup() { pinMode(hangszoroTu, OUTPUT); } ****** Hurok rész // ezt ismételgeti, míg le nem játszotta // a dallam összes hangját void loop() { // amíg az i változó értéke nem lesz 28, addig ismétli // a lenti parancsokat, vagyis lejátssza egyenként // a dallam hangjait for (int i = 0; i < ahangjegyekszama; i++) { // ha a hangjegysor eleme szóköz, if (hangjegysor[i] == ' ') { // akkor szünet lesz egy darabig delay(hanghossza[i] * sebesseg); // ez a szünet } else { // máskülönben megszólal egy hang a hangjegysorból // hívjuk a szolaHangjegyHangja függvényt, megadva neki a // a hangjegysor egyik elemét, a hang hosszát szorozva a sebességgel szolaHangjegyHangja(hangjegysor[i], hanghossza[i] * sebesseg); } // szünet a dallam hangjai között delay(sebesseg / 2); } } ***** A program működése