luni, 29 aprilie 2013

Comanda motor de HDD (pas cu pas) din tastatura

Pentru conectarea motorului la placa de dezvoltare Arduino Uno a fost folosita schema de aici http://e-robot-x.blogspot.ro/p/electronica_17.html .
Alimentarea poate fi separata sau se poate folosi tensiunea de 3,3V de pe placa asa cum am folosit eu in filmuletul postat, depinde de motorul folosit.


Cod:

//comanda motor pas cu pas de la tastatura  *Adi Ivan*
//apasa  „+„ pentru rotire dreapta LED pin 13 aprins,apasa „ –„ pentru rotire stanga LED pin 13 stins, apasa „0„ pentru STOP si LED pin 13 va clipi intermitent

int incomingByte = 0;                                    //pentru intrare serial data
int motorPin1 = 8;
int motorPin2 = 9;
int motorPin3 = 10;
int motorPin4 = 11;
int delayTime = 64;

void setup() {
                Serial.begin(9600);                     // deschidere port serial si setare rata de transfer a datelor la 9600 bps

//seteaza iesirea
  pinMode(13, OUTPUT);
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);
}

void loop() {

                // trimite date doar cand primeste date de la tastatura:
                if (Serial.available() > 0) {
                // citeste numarul introdus de la tastatura:
                incomingByte = Serial.read();

                // afiseaza in Serial Monitor numarul introdus:
                Serial.print("S-a tastat: ");
                Serial.println(incomingByte - 48, DEC); //S-a scazut 48 pentru a afisa in Serial Monitor exact numarul tastat (a se vedea codul ASCII)
                }
if(incomingByte==45)                                   //stinge LED-ul conectat la pinul 13. (- este 45 in cod ASCII) si roteste motorul spre stanga
{
  digitalWrite(13, LOW);                              // stinge LED-ul conectat la pinul 13
  digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, HIGH);
  delay(delayTime);
 }
if(incomingByte==43)                                   //aprinde LED-ul conectat la pinul 13. (+ este 43 in cod ASCII) si roteste motorul spre dreapta
{
  digitalWrite(13, HIGH);                               // aprinde LED-ul conectat la pinul 13
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, HIGH);
  delay(delayTime);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
 }

if(incomingByte==48)                                   //aprinde intermitent LED-ul conectat la pinul 13. (0 este 48 in cod ASCII) si opreste motorul
{
  digitalWrite(13, HIGH);                               // aprinde LED-ul conectat la pinul 13
  delay(500);                                                  // asteapta 0,5 secunde
  digitalWrite(13, LOW);                               // stingeLED-ul conectat la pinul 13
  delay(500);                                                  // asteapta 0,5 secunde

  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
 }

}

Semnificatie culori:

Rosu - instructiuni pentru motor
Verde -  instructiuni pentru LED-ul conectat la pin 13 Arduino Uno
Alb - instructiuni preluare comenzi de la serial monitor si restul codului incarcat