"Ψηφιακός" και "Αναλογικός" έλεγχος κινητήρα
Επεξήγηση κώδικα:
Συνολικά ας ξεχωρίσουμε τρία κομμάτια του κώδικα.
1. Στο πρώτο κομμάτι του κώδικα ξεκινάμε με ορισμούς ώστε να συνεννοούμαστε με το Arduino. Έτσι δηλώνουμε σε ποιο pin αντιστοιχούν τα ονόματα (enA, in1, in2,....) που θα χρησιμοποιήσουμε παρακάτω
Όταν τοποθετούμε // ο Arduino καταλαβαίνει ότι ακολουθεί σχόλιο και δεν του δίνει καμία σημασία.
//Κινητήρας Α
int enA = 9; //Θα χρησιμοποιήσω το όνομα enA για το pin9 Προσοχή κάθε σειρά κλείνει με ";"
int in1 = 8;
//Θα χρησιμοποιήσω το όνομα in1 για το pin8
int in2 = 7;
//Θα χρησιμοποιήσω το όνομα in2 για το pin7
// Κινητήρας Β
int enB = 3;
//Θα χρησιμοποιήσω το όνομα enB για το pin3
int in3 = 5;
//Θα χρησιμοποιήσω το όνομα in3 για το pin5
int in4 = 4; //Θα χρησιμοποιήσω το όνομα in4 για το pin4
2. Στο void setup δηλώνουμε το αν τα pin που θα χρησιμοποιήσουμε θα είναι είσοδοι άρα θα συνδέσουμε αισθητήρες ή έξοδοι άρα θα συνδέσουμε ενεργοποιητές. Επίσης δηλώνουμε και την αρχική κατάσταση τους.
void setup() {
// Θέτω όλα τα pin εξόδους
pinMode(enA, OUTPUT); // Το enA (που πλέον είναι το pin9) θα είναι έξοδος
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
// Αρχική Κατάσταση Όλα τα pin των κινητήρων off
digitalWrite(in1, LOW); // Το in1 (που πλέον είναι το pin8) είναι off
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
3. Στο void loop γράφουμε την λειτουργία που θέλουμε να επαναλαμβάνει η κατασκευή μας.
void loop() {
// Αν αφήσουμε τα τζαμπεράκια και δεν συνδέσουμε καλωδιάκια στα enA και enB τότε ενεργοποιούνται σε πλήρη ταχύτητα.
// Σε αυτό το πρώτο παράδειγμα δεν τα συνδέουμε
// Ξεκίνα τους δύο κινητήρες
digitalWrite(in1, HIGH); // Ξεκίνα τον αριστερό μπροστά
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);// Ξεκίνα τον δεξιό μπροστά
digitalWrite(in4, LOW);
delay(2000); // καθυστέρησε 2000 χιλιοστά του Δευτερολέπτου "2 sec"
// Ας αλλάξουμε την φορά τους
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH); // Ξεκίνα τον αριστερό πίσω "Δίνουμε ανάποδο ρεύμα από το in2"
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH); // Ξεκίνα τον αριστερό πίσω "Δίνουμε ανάποδο ρεύμα από το in4"
delay(2000);
// καθυστέρησε 2000 χιλιοστά του Δευτερολέπτου "2 sec"
// Σβήσε τους Κινητήρες
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
delay(2000); // καθυστέρησε 2000 χιλιοστά του Δευτερολέπτου "2 sec"
}
Πρόγραμμα 2ο
// Συνδέσεις των pin
int enA = 9;
int in1 = 8;
int in2 = 7;
// Κινητήρας Β
int enB = 3;
int in3 = 5;
int in4 = 4;
void setup() {
// Όλα τα pin είναι έξοδοι
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
// Αρχικός Μηδενισμός
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
// Η παρακάτω συνάρτηση ενεργοποιεί, αυξάνει, μειώνει την ταχύτητα, και τελικά κλείνει τον κινητήρα Α.
void loop() {
// Λειτούργησε τον κινητήρα Α
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
// Αύξησε ταχύτητα
for (int i = 0; i < 256; i++) {
analogWrite(enA, i);
analogWrite(enB, 0);
delay(20);
}
// Μείωσε ταχύτητα
for (int i = 255; i >= 0; --i) {
analogWrite(enA, i);
analogWrite(enB, 0);
delay(20);
}
// Κλείσε τους κινητήρες
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}