2011.12.26.
19:35

Írta: harsanyireka

Arduino projektek

Szólj hozzá!

Címkék: projektek

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)

dc-motor-control_DC_Motor_1.jpg

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

 

1 komment

Címkék: szenzorok

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