fpőksaőfp

A következő címkéjű bejegyzések mutatása: arduino kapcsolások. Összes bejegyzés megjelenítése
A következő címkéjű bejegyzések mutatása: arduino kapcsolások. Összes bejegyzés megjelenítése

2015. június 16., kedd

Analóg kimenet (Szervóvezérlés) /Arduino kapcsolások #5/

Analóg kimenet (Szervóvezérlés)

A hobbiszervók vezérléséhez szükséges jel, tekinthető egy speciális PWM jelnek is, ahol a jel impulzusszélessége és periódusideje a szervó adatlapjában megadott értékek köze kell hogy essen (impulzusszélesség: 1-2ms közötti érték, periódusidő: max. 20ms).
/*
* Szervo poziciojanak valtoztatasa potenciometer-rel
*/#include <Servo.h>  // szervokonyvtar


Servo mikroszervo;  // mikroszervo nevu szervo objektum
int potPin = 5;  // potenciometer A5-re kotve
int val;    // valtozo a mert ADC ertek tarolasara 


void setup()
{
mikroszervo.attach(9);  // mikroszervo Pin9-re kotve
}


void loop()
{
val = analogRead(potPin);    // ADC ertek beolvasasa
val = map(val, 0, 1023, 0, 179);  // ADC ertek atalakitasa
mikroszervo.write(val);  // szervopozicio beallitasa
delay(100);      // varakozas
}
A program elején belinkelem az Arduino szervókonyvtárat és létrehozok egy mikroszervo nevű szervóobjektumot. A mikroszervo.attach(9) utasítással hozzárendelem a szervót a 9-es lábhoz.
A kód megméri a potenciométer feszültségét, és egy ezzel arányos pozícionáló jelet ad a szervóra. Az ADC 0-1023 közé eső számot ad végeredményül, a szervópozíció beállításához viszont 0-179 közé eső szögértéket kell megadni paraméterként. A map() utasítással lehet a 0-1023 közé eső ADC eredményt 0-179 közé eső számmá alakítani. 

Analóg kimenet (PWM) /Arduino kapcsolások #4/

Analóg kimenet (PWM)


Technikai értelemben ez nem egy hagyományos analóg kimenet, mert a kimeneten nem egy 0V és 5V közé eső feszültség jelenik meg. A PWM jel (impulzus szélesség moduláció) az analóg kimeneti lábra meghatározott ideig felváltva 0V-ot és 5V-ot kapcsol. A két feszültség idejének az egymáshoz viszonyított arányát változtatva tudjuk a jel kitöltési tényezőjét változtatni, ezáltal változtatni a lábon lévő átlagfeszültség szintjét. 

Az Arduino hat digitális lába képes PWM jelet előállítani (Pin 3, 5, 6, 9, 10 és 11). Az analoWrite(PWM_Pin, szám) parancsnak egy 0-255 közé eső számot adva paraméterül könnyen változtatható a PWM jel kitöltési tényezője.

analogWrite(láb, érték);  - ha egy lábat kimenetnek állítottunk be, és a láb képes PWM-re, akkor ezzel az utasítással adhatunk rá PWM jelet. A függvénynek paraméterként egy 0 - 255 közötti értéket kell megadni a kitöltési tényező beállításához (0=0%=0V, 255=100%=5V)

Az alábbi példa a PWM használatát mutatja be:

/*
* LED fenyerejenek valtoztatasa potenciometer-rel
*/


int potPin = 5;  // potenciometer A5-re kotve
int val;    // valtozo a mert ADC ertek tarolasara  
int ledPin = 9;  // LED Pin9-re kotve


void setup() 

pinMode(ledPin, OUTPUT);  // a LED-hez tartozo lab kimenet 



void loop() 

val = analogRead(potPin);  // ADC ertek beolvasasa 
analogWrite(ledPin,val/4);  // LED-nek PWM jel
delay(100);    // varakozas 
}
A kód megméri a potenciométer feszültségét, és egy azzal arányos kitöltési tényezőjű PWM jelet ad a LED-re. Az ADC 0-1023 közé eső számot ad végeredményül, a PWM-nek az analogWrite() utasításban viszont egy 0-255 közé eső számot kell megadni paraméterként. Ezért az ADC eredményét el kell osztani 4-el, hogy 0-255 közé eső számot kapjunk. A potencimétert tekergetve a LED fényereje változtatható. 

Analóg bemenet / Arduino kapcsolások #3/

Analóg bemenet

Az alábbiakban az analóg bemenetek használatára mutatok példát: 
A potenciométer úgy viselkedik mint egy feszültségosztó kapcsolás, amiben az ellenállások értékét változtatjuk. Ezáltal a potenciométer kimenetén megjelenő feszültség függ a tekerőgomb állásától.

/*
* ADC hasznalata potenciometer-rel 
*/
int potPin = 5;  // potenciometer A5-re kotve
int val;    // valtozo a mert ADC ertek tarolasara 


void setup() 

Serial.begin(9600);   // 9600 baud-os soros port beallitasa



void loop() 

val = analogRead(potPin);  // ADC ertek beolvasasa
Serial.println(val, DEC);  // a mert ADC ertek PC-re kuldese
delay(100);  // varakozas 
}
 setup() részben a serial.begin() paranccsal egy 9600 baud sebességű soros kommunikációs portot hozok létre, amivel adatokat lehet küldeni/fogadni az Arduino és pl. a PC között.

A loop() részben a kód megméri a potenciométer feszültségét az analogRead() utasítással, és a mért ADC értéket a Serial.println() paranccsal elküldi a PC-re.
Az adatokat a PC-n a Soros monitoron keresztül követhetjük figyelemmel. 



Digitális bemenet /Arduino kapcsolások #2/

Digitális bemenet

A digitális bemenetek használatára is nézzünk egy egyszerű példát: 
Az előző példához képest csak annyi a változás, hogy a Pin2 láb és GND közé egy nyomógombot kötöttem.

/*
* Nyomogomb
*/
int ledPin = 9; // LED Pin9-re kotve
int inputPin = 2; // nyomogomb Pin2-re kotve
int val = 0; // a nyomogomb allapotat tarolo valtozo
void setup()
{
pinMode(ledPin, OUTPUT); // a LED-hez tartozo lab kimenet
pinMode(inputPin, INPUT); // a nyomogombhoz tartozo lab bemenet
digitalWrite(ledPin, LOW); // LED kikapcsolasa
}
void loop()
{
val = digitalRead(inputPin); // nyomogomb allapotanak lekerdezese
if (val == HIGH)  // ha a nyomogomb nincs lenyomva
{
digitalWrite(ledPin, HIGH);  // LED bekapcsolasa
}
else  // kulonben
{
digitalWrite(ledPin, LOW); // LED kikapcsolasa
}
}

A program elején elnevezem a 2-es lábat inputPin-nek és létrehozok egy egész típusú, a nyomógomb  állapotát tároló val nevű változót.

A setup() részben LED-hez tartozó lábat kimenetnek, a nyomógombhoz tartozó lábat pedig bemenetnek állítom be.

A loop() részben a digitalRead() utasítással lekérdezem a nyomógomb állapotát, majd egy cikluson belül megvizsgálom hogy le van-e nyomva a gomb és a gomb állapotától függően kapcsolom ki/be a LED-et.
Analóg Jelek

Korábban láthattuk, hogy az analóg jelek csak alacsony (0V) vagy magas (5V) szintűek lehetnek. Az analóg jelek ezzel szemben a 0V és 5V között bármilyen értéket felvehetnek. Az Arduino hat speciális bemeneti lábbal rendelkezik, amelyek képesek ezeket a feszültségértékeket beolvasni. Ez a hat speciális bemenet rendelkezik egy 10 bites analóg-digitális átalakítóval (ADC), ami képes a 0V és 5V közé eső feszültséget mérni és egy ezzel arányos 0 és 1023 közé eső 10 bites számmá alakítani.
Analóg bemenet

Az analóg lábak alapértelmezettként bemenetek, és az analogRead() utasítással lehet a rajtuk lévő feszültséget mérni.
analogRead(láb);  - ezzel az utasítással mérhető meg ADC-vel egy analóg lábon lévő feszültség. A függvény 0 - 1023 közötti értéket ad vissza eredményül.