2012.01.21.
13:08

Írta: harsanyireka

Alapok: Kiolvasás analóg és digitális pinből, LED fade-elés

Kiolvasás digitális pinből

 

Szükség lesz egy nyák mikro nyomógombra, 10 kiloOhmos ellenállásra, dugaszolós próbapanelre. Az ábrán látható módon kösd össze őket. A nyomógomb azért van középen hogy a lábai ne legyenek egymáshoz bekötve, mivel a próbapanel közepén ott nincs átvezetés.

button.png

 A dugaszolós próbapanel összeköttetései:

breadboard1.gif

 

"Az elektromos áram töltéssel rendelkező részecskék rendezett áramlása.

Egyenáramnál az áramforrásnak pozitív és negatív pólusa van, az áram megszakítás nélkül folyik a vezetékben és az Ohm-törvény segítségével egyszerűen kiszámítható.

A váltakozó áram esetén az áramot létrehozó váltakozófeszültség értéke ismétlődően (periodikusan) ellentétes értékeket vesz fel (vagyis a pólusok váltakoznak)." http://hu.wikipedia.org/wiki/%C3%81ram

Habár az elektronok a negatív töltéstől a pozítív felé áramlanak, az elektronikában az áram folyási iránya mindig a pozitívtól a negatív felé vannak értelmezve. "konvencionális áram iránya ellentétes az elektronok tényleges áramlási irányával fémekben, a tipikus elektromos vezetőkben, ami félreértések forrása az elektronika kezdői számára." 
http://hu.wikipedia.org/wiki/Elektromos_t%C3%B6lt%C3%A9s#T.C3.B6lt.C3.A9s_az_elektrotechnik.C3.A1ban

 

Arduino kód a nyomógombhoz:

/*
  DigitalReadSerial
 Reads a digital input on pin 2, prints the result to the 
serial monitor
///A 2. digitális pint bemenetként használjuk, a kiolvasott
eredményt soros porton továbbítjuk
 
 This example code is in the public domain.
 */

void setup() {
  Serial.begin(9600); //soros kom. bekapcsolása, 9600 bps
  pinMode(2, INPUT);  //2. pint bemenetként inicializáljuk
}

void loop() {
  //integerként defíniáljuk a bejövő adatot
int sensorValue = digitalRead(2);
  //egész szám, válotzó
//a kapott értéket kiírjuk (serial monitor)
Serial.println(sensorValue);
}

 

A jobb felső sarkoban lévő gombbal tudod megnyitni a serial monitort. Vagy 0-t vagy 1-t ír ki attól függően hogy meg van-e nyomva a gomb.

 

SZINTAXISOK

digitalRead(pin);

pin: annak a pinnek a száma, amiből ki akarod olvasni az adatot, integer=egész szám. A kapott érték lehet HIGH (1, be) vagy LOW (0, ki).

 

int var = val;

var: az általad elnevezett integer változód neve

val: az érték amit ehhez a változóhoz hozzárendelsz

Speciális esete ha folyamatosan növekvő vagy csökkenő változót akarsz: (int x; x= x+1; vagy x= x-1;)

 

Serial.begin(9600); és Serial.println(val, format);

Az elsővel bekapcsoljuk a soros kommunikációt 9600 bit/sec-on, a másodikkal kiíratjuk a kapott adatokat

val: az érték amit ki akarunk iratni - bármilyen adat lehet

format: elhagyható, ilyankor decimális számrendszet használ (ha oda akarjuk írni: DEC -tizes ,HEX -tizenhatos számrendszer, OCT -nyolcas, BIN -kettes számrendszer)

 

 

Kiolvasás analóg pinből

 

Ehhez egy 1 kiloOhmos potmétert fogunk használni. Ezzel a feszültséget tudjuk szabályozni, egyfajta változtatható ellenállásként alkalmazható.  potenciométer

AnalogReadSerial_BB.png

Első lába az 5V pinbe megy, a középső az analóg A0-ba, és a harmadikat le kell földelni. Kiolvasáshoz az analogRead() funkciót fogjuk használni, ami egy számértéket ad vissza 0-1023 között (a használt feszültséghez arányosítva, pl 5V=1023).

Arduino kód:

/*
  AnalogReadSerial
 Reads an analog input on pin 0, prints the result to 
the serial monitor
//Az A0 analóg pinből kiolvasott értéket küldi soros portra This example code is in the public domain. */ void setup() { Serial.begin(9600); } void loop() { int sensorValue = analogRead(A0); Serial.println(sensorValue); }

 

SZINTAXISOK

analogRead(pin);

pin: annak az analóg pinnek a száma amiből ki akarunk olvasni

pinMode(A0, OUTPUT);
digitalWrite(A0, HIGH);

 

LED fade-elés

 

220 Ohmos ellenállásal bekötjük a LED a digitális 9 pinbe:

simplefade_bb.pngled_magyarazat.gif

1. a rövidebb lába a negatív. 2. itt le vn csapva az oldala. 3. a LED rajzi jele. Minden alkatrésznek van ilyen áramköri jele. 4. a pozitív tábánál van az ellenállás.

Az analogWrite() funkciót használjuk a feladathoz, ami PWM-mel működik. Hihetetlenül gyorsan kapcsolja a pin állapotát ki-be így idézi elő a fade effektet. 0-255 közötti értéket használ, pl. az analogWrite(127); 50%-ot jelent.

PWM=pulse with modulation=impulzus-szélesség moduláció

pwm.gif

kép: www.cnv.hu/gallery/cikkek/elektronika/pwm%20magyarazat.jpg

Arduino kód:

/*
 Fade
 
 This example shows how to fade an LED on pin 9
 using the analogWrite() function.
// a 9. pinbe kötött LED fade-elése This example code is in the public domain. */ int brightness = 0; //LED fényerejét változóként adjuk meg int fadeAmount = 5; // fade effekthez használt érték void setup() { // 9 pint kimenetként deklaráljuk: pinMode(9, OUTPUT); } void loop() { // a brightness nevű változó értékét kiküldjük: analogWrite(9, brightness); //loop következő lefutásához megváltoztatjuk a fényerőt: brightness = brightness + fadeAmount; //a fade-elés irányát megváltoztatjuk ha a végére ért: if (brightness == 0 || brightness == 255) { fadeAmount = -fadeAmount ; /// +ból -, -ból + lesz } //30 ms-t várunk hogy lássuk a fényerő csökkenést : delay(30); }

 

SZINTAXIS

analogWrite(pin, value);

PWM pinre küldhetünk vele értéket, hogy analog tulajdonsággal ruházzuk fel a digitalis pint.

 

pin: amelyik pwm pint kimenetként használjuk

value: értéke 0-255 között

(emlékeztető: az analogRead() 0-1023 között olvas ki)

 

 

FELADAT:

http://arduino.cc/en/Tutorial/BarGraph For ciklus, if, else -szerepel a kódban.

 

forrás: http://arduino.cc/en/Tutorial/DigitalReadSerialhttp://arduino.cc/en/Reference/DigitalRead,

http://arduino.cc/en/Tutorial/DigitalPinshttp://arduino.cc/en/Reference/Inthttp://arduino.cc/en/Reference/Serial

http://arduino.cc/en/Serial/Printlnhttp://arduino.cc/en/Tutorial/AnalogReadSerial

http://arduino.cc/en/Tutorial/AnalogInputPinshttp://arduino.cc/en/Tutorial/Fade

http://arduino.cc/en/Reference/AnalogWritehttp://arduino.cc/en/Tutorial/PWM

cc-by-sa3s.jpg

Szólj hozzá!

Címkék: leckék

2012.01.18.
18:53

Írta: harsanyireka

Arduinio telepítése, windows hibakeresés

Ha nem tudod feltölteni, a következőket nézd meg a Device Managerben / Eszközkezelőben:

Hiányzik-e a driver (sárga felkiáltójel jelzi ha igen - frissítsd), ha nem akkor melyik portot használod:

Device Manager.jpg

 devicemanager.jpg

Ha nem hiányzik a drivered, néha az is segít ha átdugod a gépen egy másik USB-be. Ne felejtsd el a Tools menüben leellenőrizni a Serial Portot utána. Illetve ha rosszul állítod be a board típusát, akkor szintén nem tölti fel a kódot.

Arduino UNO esetén magától telepíti a drivert ha rádugod USB-vel a gépedre. Ha nem sikerült, akkor manuálisan kell megtenned ezt http://forum.arduino.cc/index.php/topic,118440.0.html 

forrás: http://arduino.cc/en/Guide/Windows#toc1http://arduino.cc/en/Guide/Troubleshooting

cc-by-sa3s.jpg

 

 

Szólj hozzá!

Címkék: leckék

2012.01.16.
18:53

Írta: harsanyireka

Kopogás érzékelése piezoval

knock.jpg

 

 

"piezoelektromosság olyan elektromos jelenség, melynek során bizonyos anyagokon (kristálykerámia) összenyomás hatására elektromos feszültség keletkezik, illetve elektromos feszültség hatására alakváltozás jön létre." / bővebben: http://hu.wikipedia.org/wiki/Piezoelektromoss%C3%A1g

A piezo hangszórók csak megfelelő polaritással működnek, ez azt jelenti hogy meghatározott irányban kell hogy ármenjen rajta az áram, ezért a fekete vagy kék drótját a földbe még a pirosat az analóg pinbe kell kötni. Plusz 1MOhm-os ellenállást is használunk, ugyanebből a pinbe kell a másik Gnd (földelés) pinbe kötni, hogy megóvjuk az arduinot. (Piezo hangszoró 12V DC gerjesztő áramkörrel.)

Műanyag borítás nélkül is beszerezhető a piezo, fényes lemezeknek látszanak, könnyebb őket szenzorként használni, pl. lehet nyomogatni. Akkor működnek a legjobban ha az érzékelő felületük erősen neki van támasztva valaminek, vagy fel van ragasztva. Így néz ki: https://www.youtube.com/watch?v=Xuw9frP1GNo&feature=related
piezo.jpg 

Léteznek hajlékony piezo-film lapok, vagy kisebb elemek, ezekkel nagyobb felületen lehet érzékelni.

pizoelectricfilm.jpg

A lejebb található kódban, a piezóból érkező adatok egy általunk megadott küszöbértékhez vannak viszonyítva. Próbáld meg növelni vagy csökkenteni ezt az értéket, hogy  kihasználd a szenzorod teljes érzékanységi tartományát.

Arduino kód:

/* Knock Sensor - Kopogás szenzor

This sketch reads a piezo element to detect a knocking sound.
It reads an analog pin and compares the result to a set threshold.
If the result is greater than the threshold, it writes
"knock" to the serial port, and toggles the LED on pin 13.

The circuit:
* + connection of the piezo attached to analog in 0
* - connection of the piezo attached to ground
* 1-megohm resistor attached from analog in 0 to ground

http://www.arduino.cc/en/Tutorial/Knock

created 25 Mar 2007
by David Cuartielles <http://www.0j0.org>
modified 30 Aug 2011
by Tom Igoe

This example code is in the public domain.

*/


// defíniáljuk az állandókat, ezek nem változnak majd
const int ledPin = 13; // la 13 digit pinbe tegyünk LEDet
const int knockSensor = A0; // piezot az analog pin0-ba kötjük
const int threshold = 50; // 0-100-ig, az a küszöbérték amihez
// viszonyítjuk hogy a hang kopogás-e vagy sem
// ezt növeld vagy csökkentsd hogy működjön a szenzor

// ezek a változók:
// ez a változó tárolja a szenzor pin-jéből kiolvasott értéket:
int sensorReading = 0;
// ez a változó tárolja el a LED utolsó állását:
int ledState = LOW; 


void setup() {
pinMode(ledPin, OUTPUT); // deklaráljuk a ledPin-t OUTPUT-ként
Serial.begin(9600); // bekapcsoljuk a serial portot
}

void loop() {
// olvassuk ki és tároljuk el a szenzor értékét:
sensorReading = analogRead(knockSensor);

// ha a kiolvasott érték nagyobb mint a küszöb érték:
if (sensorReading >= threshold) {
// kapcsold át a ledPin állapotát
// ! boolean jelentése: nem
// ledÁllapota = nem ledÁllapottal, tehát az ellenkezőjével
ledState = !ledState;
// frissítsd a LEDpin értékét az aktuális állapotával:
digitalWrite(ledPin, ledState);
// a "Knock!" string-et küldd vissza a sz.gépnek:
// a string-et karakterek tárolására használjuk
Serial.println("Knock!");
}
delay(100);
// késleltetés, hogy elkerüljük a
// serial port buffer túlterhelését
}

 

Serial portot használunk. Ha a jobb felső sarokban megnyomod a Serial Monitor gombot, láthatod ahogy kiírja a "Knock!" stringet, amikor érzékeli a piezo szenzo a hangot.

forrás: http://www.arduino.cc/en/Tutorial/KnockSensor

http://arduino.cc/en/Tutorial/Knock

cc-by-sa3s.jpg

Szólj hozzá!

Címkék: leckék

2012.01.13.
22:34

Írta: harsanyireka

Dallam lejátszása hangszórón, és tone() funkció

Dallam lejátszása hangszórón

 

Egy 8 Ohm-os mini hangszóró és egy 100 Ohm-os ellenállás kell hozzá. Közben megnézzük a library használatát.

melody.jpg speaker_bb.png

Kell hozzá a "pitches.h" file, ehhez a következő kódot egy alap szövegszerkesztőben illeszd be és mentsd el a file-t azon a néven. A .h a header file kiterjesztése, ez tartalmazza a függvény meghatározásokat és definíciókat a library számára, pl. egy class függvényben belül definiálhatod a változókat amire szükséged van. (A .cpp kiterjesztésű a source file, ez tartalmazza a tényleges kódot.) De maradjunk ennél a példánál. Az arduino mappa libraries mappájában hozd létre a Melody nevű mappát és ide tedd bele a most készített pitches.h file-t, csak így fog működni. Az arduino program újraindítása után bekerül a Sketch/Import Library legördülő menübe a Melody, innen fogjuk használni. Nyiss új sketch-t, másold me az ardino kódot (lejjebb találod). Az #include "pitches.h" sort kitörölheted, ezután szedd elő az előbb említett legördülő menüből a melody-t, így megjeleni a következő sor #include <pitches.h> ezután működik a kód. 

 

A pitches.h file kódja: 

/*************************************************
 * Public Constants
 *************************************************/

#define NOTE_B0  31
#define NOTE_C1  33
#define NOTE_CS1 35
#define NOTE_D1  37
#define NOTE_DS1 39
#define NOTE_E1  41
#define NOTE_F1  44
#define NOTE_FS1 46
#define NOTE_G1  49
#define NOTE_GS1 52
#define NOTE_A1  55
#define NOTE_AS1 58
#define NOTE_B1  62
#define NOTE_C2  65
#define NOTE_CS2 69
#define NOTE_D2  73
#define NOTE_DS2 78
#define NOTE_E2  82
#define NOTE_F2  87
#define NOTE_FS2 93
#define NOTE_G2  98
#define NOTE_GS2 104
#define NOTE_A2  110
#define NOTE_AS2 117
#define NOTE_B2  123
#define NOTE_C3  131
#define NOTE_CS3 139
#define NOTE_D3  147
#define NOTE_DS3 156
#define NOTE_E3  165
#define NOTE_F3  175
#define NOTE_FS3 185
#define NOTE_G3  196
#define NOTE_GS3 208
#define NOTE_A3  220
#define NOTE_AS3 233
#define NOTE_B3  247
#define NOTE_C4  262
#define NOTE_CS4 277
#define NOTE_D4  294
#define NOTE_DS4 311
#define NOTE_E4  330
#define NOTE_F4  349
#define NOTE_FS4 370
#define NOTE_G4  392
#define NOTE_GS4 415
#define NOTE_A4  440
#define NOTE_AS4 466
#define NOTE_B4  494
#define NOTE_C5  523
#define NOTE_CS5 554
#define NOTE_D5  587
#define NOTE_DS5 622
#define NOTE_E5  659
#define NOTE_F5  698
#define NOTE_FS5 740
#define NOTE_G5  784
#define NOTE_GS5 831
#define NOTE_A5  880
#define NOTE_AS5 932
#define NOTE_B5  988
#define NOTE_C6  1047
#define NOTE_CS6 1109
#define NOTE_D6  1175
#define NOTE_DS6 1245
#define NOTE_E6  1319
#define NOTE_F6  1397
#define NOTE_FS6 1480
#define NOTE_G6  1568
#define NOTE_GS6 1661
#define NOTE_A6  1760
#define NOTE_AS6 1865
#define NOTE_B6  1976
#define NOTE_C7  2093
#define NOTE_CS7 2217
#define NOTE_D7  2349
#define NOTE_DS7 2489
#define NOTE_E7  2637
#define NOTE_F7  2794
#define NOTE_FS7 2960
#define NOTE_G7  3136
#define NOTE_GS7 3322
#define NOTE_A7  3520
#define NOTE_AS7 3729
#define NOTE_B7  3951
#define NOTE_C8  4186
#define NOTE_CS8 4435
#define NOTE_D8  4699
#define NOTE_DS8 4978
 
 

Arduino kód:

/*
  Melody
 
 Plays a melody 
 
 circuit:
 * 8-ohm speaker on digital pin 8
 
 created 21 Jan 2010
 modified 30 Aug 2011
 by Tom Igoe 

This example code is in the public domain.
 
 http://arduino.cc/en/Tutorial/Tone
 
 */

 #include "pitches.h" // Sketch/Import Library-ból szedjük elő:

// a dallam hangjegyei, megszólalás sorrendjében:
int melody[] = {
  NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4};

// hangjegyek hossza: 4 = negyed hang, 8 = nyolcad hang, stb.:
int noteDurations[] = {
  4, 8, 8, 4,4,4,4,4 };

void setup() {
  // a dallam hangjegyének ismétlődése,
  // most 8 hangjegyet használunk, ezért:
  for (int thisNote = 0; thisNote < 8; thisNote++) {

    // a hangjegyek hosszának kiszámításához,  
    // osszuk el a másodpercet, arányosan,
    //pl. a negyed hang = 1000 / 4, a nyolcad = 1000/8, stb.
    int noteDuration = 1000/noteDurations[thisNote];
    tone(8, melody[thisNote],noteDuration);

    // hogy elkülönítsük a hangjegyeket, 
    // tegyünk közéjük szünetet
    // ennek időtartama + 30% -nál úgy tűnik jól működik:
    int pauseBetweenNotes = noteDuration * 1.30;
    delay(pauseBetweenNotes);
    // megállítja a lejátszást:
    noTone(8);
  }
}

void loop() {
  // nem ismételjük meg a dallamot.
}

 

Írd át a kódot, tetszőleges dallamra!

Standard library-ket akarsz használni a hivatalos oldalról, akkor letöltés után előbb telepíteni kell azokat. Kicsomagolás után egy .h és egy .cpp kiterjesztésű file-t találsz. Az arduino mappában találtsz egy libraries mappát, ide kell tenni, bár már alapból tartalmazza őket. Vagy ide hozhatsz létre saját library-t.

Az arduino program újraindítása után a Sketch / Import Library menüből tudod őket előszedni és használni.

 

Tone() funkció

 

Ez a példa bemutatja hogy kell használni a tone() parancsot, hogy generáljunk egy az analóg bemenet értékét követő hajlítást.

Ha nincs benne az arduino/libraries mappában akkor a TONE LIBRARY: http://code.google.com/p/rogue-code/wiki/ToneLibraryDocumentation INNEN LETÖLTHETŐ!

Kell hozzá egy 8 Ohmos mini hangszóró, egy fényellenállás, 100 Ohmos és 4,7 kiloOhmos ellenállás. Az ábra szerinti bekötésben:

arduino_speaker_photocell_bb.png

Ez lesz belőle:

 

Arduino kód:

/*
Pitch follower

Plays a pitch that changes based on a changing analog input

circuit:
* 8-ohm speaker on digital pin 8
* photoresistor on analog 0 to 5V
* 4.7K resistor on analog 0 to ground

created 21 Jan 2010
modified 30 Aug 2011
by Tom Igoe

This example code is in the public domain.

http://arduino.cc/en/Tutorial/Tone2

*/


void setup() {
// inicializáljuk a soros portot
Serial.begin(9600);
}

void loop() {
// kiolvassuk a szenzort:
int sensorReading = analogRead(A0);
// írjuk ki ezt az értéket serial monitorral
Serial.println(sensorReading);
// képezzük le a hangot az analóg bemenet értékére
// változtassuk meg a minimum, maximum bemeneti értéket
// a szenzortól kapott értéknek megfelelően:
int thisPitch = map(sensorReading, 400, 1000, 100, 1000);

// lejátszás
tone(9, thisPitch, 10);

}

 

 

forrás: arduino.cc/en/Tutorial/Tonehttp://arduino.cc/it/Hacking/LibraryTutorial

http://arduino.cc/en/Reference/Librarieshttp://arduino.cc/en/Tutorial/Tone2

 

Szólj hozzá!

Címkék: leckék

2012.01.10.
15:55

Írta: harsanyireka

Hogyan kell forrasztani? (angol)

 Bár angolul van, de minden lépés illusztrált:

Szólj hozzá!

Címkék: forrasztás

süti beállítások módosítása