2010.12.10.
11:56
Írta: harsanyireka
MAX MSP és Ardunio
Potmétert az analóg 0 pinbe kötjük, serial monitorral kiolvassuk az adatot, és soros porton átküldjük a MAX-nak, ahol az ablakban egy grafikont rajzolhatunk a poti segítségével a beolvasott értékekből:
max és arduino file itt: http://arduino.cc/en/Tutorial/Graph
A MAX-ben lehet hogy át kell állítani a portot.
Szólj hozzá!
Címkék: leckék soros port
2010.12.09.
14:57
Írta: harsanyireka
DC motor H-híddal - kapcsolóval (L293NE, L293DNE)
Kell egy 10KOhm-os ellenállás, egy kétállású SPDT kapcsoló (on-on), 1 DC motor (3V elég, az arduino csak 5V-ot bír meghajtani) és h-híd. A h-hídnak mindkét oldalát be kell kötni a feszültségbe és a földelésbe is, de csak azt az oldalát kell bekapcsolni amelyiket használod. (EN lábra kell HIGH jelet küldeni.)
A H-híd lábainak kiosztása:
Összeépítés próbapanelen, egy motorral, de egyenlőre a 9V elemet ne kössük rá, mert az USB kábel is elég ahhoz hogy forogjon egy 3V-os motor, a kondenzárot is lehagyható.
Kód:
const int switchPin = 2; // kapcsoló bemenete const int motor1Pin = 3; // H-híd 1. lába const int motor2Pin = 4; // H-híd 2. lába const int enablePin = 9; // H-híd engedélyezése pin const int ledPin = 13; // LED void setup() { // a kapcsoló pint bemenetként használjuk: pinMode(switchPin, INPUT); // a többit kimenetként: pinMode(motor1Pin, OUTPUT); pinMode(motor2Pin, OUTPUT); pinMode(enablePin, OUTPUT); pinMode(ledPin, OUTPUT); //engedélyezni kell a H-hidat hogy működjön, azaz be kell kapcsolni digitalWrite(enablePin, HIGH); // 3x felvillan a LED. Ez egyszer történik meg. // a többszöri villanás hibát jelez, pl. a motor kiégett blink(ledPin, 3, 100); } void loop() { // ha a kapcsoló be van kapcsolva, akkor ez egyik irányba forog a motor if (digitalRead(switchPin) == HIGH) { digitalWrite(motor1Pin, LOW); // a H-híd 1. lábát kikapcsolja digitalWrite(motor2Pin, HIGH); // a H-híd 2. lábát bekapcsolja } // ha ki van kapcsolva, akkor a másik irányba: else { digitalWrite(motor1Pin, HIGH); // a H-híd 1. lábát bekapcsolja digitalWrite(motor2Pin, LOW); // a H-híd 2. lábát kikapcsolja } } /* LED villogtatása */ void blink(int whatPin, int howManyTimes, int milliSecs) { int i = 0; for ( i = 0; i < howManyTimes; i++) { digitalWrite(whatPin, HIGH); delay(milliSecs/2); digitalWrite(whatPin, LOW); delay(milliSecs/2); }
}
http://itp.nyu.edu/physcomp/Labs/DCMotorControl
SN754410 chippel (by Omer Wibke)
forrás: http://fritzing.org/projects/dc-motor-control/
Fritzing (arduino szimulátor) file-t is le lehet innen tölteni hozzá.
kód:
int switchPin = 2; // switch input int motor1Pin = 4; // H-bridge leg 1 (pin 2, 1A) int motor2Pin = 5; // H-bridge leg 2 (pin 7, 2A) int enablePin = 12; // H-bridge enable pin int ledPin = 13; // LED void setup() { // set the switch as an input: pinMode(switchPin, INPUT); // set all the other pins you're using as outputs: pinMode(motor1Pin, OUTPUT); pinMode(motor2Pin, OUTPUT); pinMode(enablePin, OUTPUT); pinMode(ledPin, OUTPUT); // set enablePin high so that motor can turn on: digitalWrite(enablePin, HIGH); // blink the LED 3 times. This should happen only once. // if you see the LED blink three times, it means that the module // reset itself,. probably because the motor caused a brownout // or a short. blink(ledPin, 3, 100); } void loop() { // if the switch is high, motor will turn on one direction: if (digitalRead(switchPin) == HIGH) { digitalWrite(motor1Pin, LOW); // set leg 1 of the H-bridge low digitalWrite(motor2Pin, HIGH); // set leg 2 of the H-bridge high } // if the switch is low, motor will turn in the other direction: else { digitalWrite(motor1Pin, HIGH); // set leg 1 of the H-bridge high digitalWrite(motor2Pin, LOW); // set leg 2 of the H-bridge low } } /* blinks an LED */ void blink(int whatPin, int howManyTimes, int milliSecs) { int i = 0; for ( i = 0; i < howManyTimes; i++) { digitalWrite(whatPin, HIGH); delay(milliSecs/2); digitalWrite(whatPin, LOW); delay(milliSecs/2); } }
Plusz találtam egy blogot, ahol L293Dne h-híddal vezérel Miklós egy motort: http://www.miklos.blog.br/2009/11/controlar-motores-dc-com-l293d.html
Szólj hozzá!
Címkék: motorok h híd
2010.12.04.
21:14
Írta: harsanyireka
sharp infrás távolságszenzor RGB LEDdel
Sharp GP2Y0A21YK infravörös távolságszenzor:
Ez a szenzor háromszögeléses módszerrel működik. Egy keskeny infravörös fényt bocsát ki, ami visszaverődik a tárgyakról. Ezt egy érzékelő egy optikával leképezi egy CCD-re. A távolságtól függően más szögben érkezik meg a visszavert fény, tehát más CCD pixelre érkezik, ebből számolja ki a tárgy távolságát.
Kód:
/*
Sharp infra távolságszenzor, RGB LED-del.
Több változót definíálunk, és külön írjuk le a fügvényeket.
*/
int avgFactor = 5; //meghatározza a kiolvasások számát, a többszöri kiolvasás lassabb, de pontosabb
int runningTotal;
int distRead;
int distAvg; //kiolvasott távolság átlaga
int i;
int ledR = 9; // piros
int ledB = 10; // kék
int ledG = 11; // zöld
int sharpIR = 2; // Sharp IRED kimenet az Analog 2 pin
void setup()
{
Serial.begin(9600);
testLED(); //függvény, minden szín fél másodpercet világít majd kikapcsol
}
void loop()
{
runningTotal = 0;
distRead = 0;
distAvg = 0;
getDist(); //integer, szenzorból kilvasott számérték
colorLEDs(distAvg); //függvény
}
//==========================================================================================
// FÜGGVÉNYEK
//==========================================================================================
//==========================================================================================
// kiolvassuk a távolságot a Sharp infravörös szenzorból
//==========================================================================================
int getDist()
{
for (i=0; i < avgFactor; i++)
{
distRead = analogRead(sharpIR);
runningTotal += distRead;
//// kimenet megállapítása:
//Serial.print("i = ");
//Serial.println(i, DEC);
//Serial.print("runningTotal = ");
//Serial.println(runningTotal, DEC);
}
distAvg = (runningTotal / avgFactor);
//// kimenet megállapítása:
//Serial.print("distAvg = ");
//Serial.println(distAvg, DEC);
return distAvg;
}
//==========================================================================================
// függvény: ami a távolság függvényében változtatja a színt
//==========================================================================================
void colorLEDs(int)
{
if (distAvg >= 500) //ha a távolság > 500 bekapcsolja a pirosat
{
redLED();
}
else if ((distAvg >= 200) && (distAvg < 500)) //ha 200 < távolság > 500, sárgát bekapcsolja
{
yellowLED();
}
else if (distAvg < 200) //ha a távolság < 199, akkor a zöldet bekapcsolja
{
greenLED();
}
}
//==========================================================================================
// függvény: teszt, mindegyik szín fél másodpercig ég:
//==========================================================================================
void testLED()
{
redLED();
delay(500);
yellowLED();
delay(500);
greenLED();
delay(500);
offLED();
}
//======================================
// LED szín függvények
//======================================
// piros világít
void redLED() {
analogWrite(ledR, 0);
analogWrite(ledB, 255);
analogWrite(ledG, 255);
}
// sárga világít
void yellowLED() {
analogWrite(ledR, 70);
analogWrite(ledB, 240);
analogWrite(ledG, 10);
}
// zöld világít
void greenLED() {
analogWrite(ledR, 255);
analogWrite(ledB, 255);
analogWrite(ledG, 0);
}
// kikapcsol:
void offLED() {
analogWrite(ledR, 255);
analogWrite(ledG, 255);
analogWrite(ledB, 255);
}
Szólj hozzá!
Címkék: szenzorok
2010.12.04.
16:39
Írta: harsanyireka
szenzorok: poti, fényellenállás (LDR), force sensitive resistor
Potméter
A 13 digitális pinbe megy egy LED, negatív lábbal a földelésbe (Gnd). A poti 3 lába a következő pinekbe megy: 5V, Gnd, analóg 2:
A potit lecserélhetjük analóg szenzorokra: fotóellenállás (LDR) a látható fény erejét méri:
nyomásérzékeny szenzor (force-sensitive resistor, pressure sensor)
Kód:
int sensorPin = 2; // szenzor pin
int ledPin = 13; // LED pin
int val = 0; // szenzor értékének tárolására jó, integer: egész számot tárol
void setup() {
Serial.begin(9600); // soros port bekapcsolása
pinMode(ledPin, OUTPUT); // LED pint kimenetként használjuk
pinMode(sensorPin, INPUT); // potméter pint bemenetként
}
void loop() {
if (Serial.available() > 0) {
sensorPin = Serial.read();}
val = analogRead(sensorPin); // kiolvassa a poti pinből asz értékel
digitalWrite(ledPin, val); // a LED fényereje megegyezik ezzel az értékkel
Serial.print(val, DEC); // írja ki a kiolvasott értéket serial monitoron
Serial.print(","); // a kiírt számok közé tegyen vesszőt
}
////felső menüben a legutolsó gomb a serial monitor, ha ráklikkelsz
////megnyílik az ablak amiben az értékeket kiírja