Καλώς ήρθατε στο Μέρος II του οδηγού μας για το πώς να παρακολουθείτε την ανάδραση του Φορτίου ενός γραμμικού ενεργοποιητή. Στο Μέρος I περάσαμε τη διαδικασία καλωδίωσης και τη βασική κωδικοποίηση που απαιτείται για το παράδειγμα. Στον σημερινό οδηγό, θα εξετάσουμε λεπτομερώς τα διαφορετικά τμήματα του κώδικα καθώς και μερικούς τρόπους επεξεργασίας του. Ξεκινώντας, θα δούμε το τμήμα του κώδικα latchButtons().
Το πρώτο που θέλουμε να ελέγξουμε είναι το “debouncing” του κουμπιού: όταν πατηθεί το αριστερό κουμπί, πρέπει να υπολογιστεί ο χρόνος από το προηγούμενο πάτημα. Για να το κάνουμε αυτό, θα χρησιμοποιήσουμε την τελευταία τιμή που αποθηκεύτηκε στον κώδικα και έπειτα τη συνάρτηση millis() για να ελέγξουμε τον χρόνο. Όταν ο χρόνος είναι μεγαλύτερος από τον χρόνο αποθορυβοποίησης, η συνάρτηση θα ελέγξει εάν ο ενεργοποιητής μπορεί να επεκταθεί. Μόλις ικανοποιηθούν και οι δύο συνθήκες, η συνάρτηση θα συνεχίσει.
if (digitalRead(buttonLeft)==LOW)//left is forwards
{
currentTimedebounce = millis() - lastButtonpress;// check time since last press
if (currentTimedebounce > debounceTime && dontExtend == false)//once you've tripped dontExtend, ignore all forwards presses
{
leftlatch = !leftlatch;// if motor is moving, stop, if stopped, start moving
firstRun = true;// set firstRun flag to ignore current spike
fullyRetracted = false; // once you move forwards, you are not fully retracted
lastButtonpress = millis();//store time of last button press
return;
}//end if
}//end btnLEFT
Το επόμενο τμήμα είναι η βρόχος μέσα στη συνάρτηση motorForward(), συγκεκριμένα οι δύο καθυστερήσεις. Ο βρόχος ξεκινά ενεργοποιώντας τον ελεγκτή κινητήρα, ο οποίος θέτει σε λειτουργία τον κινητήρα του γραμμικού ενεργοποιητή. Αν είναι η πρώτη φορά που εκτελείται ο βρόχος, θα υπάρξει μεγαλύτερη καθυστέρηση. Η καθυστέρηση αγνοεί την αιχμή Ρεύματος που συμβαίνει όταν ο κινητήρας ενεργοποιείται. Βεβαιωθείτε ότι δεν ρυθμίζετε την καθυστέρηση υπερβολικά μεγάλη, γιατί μόλις ξεκινήσει, δεν θα έχετε έλεγχο. Όταν ξεκινήσει ο κινητήρας, το τμήμα getFeedback() χρησιμοποιείται για να ελεγχθεί ο αισθητήρας Ρεύματος.
while (dontExtend == false && leftlatch == HIGH) {
digitalWrite(EnablePin, HIGH);
analogWrite(PWMPinA, speeed);
analogWrite(PWMPinB, 0);//move motor
if (firstRun == true) delay(firstfeedbacktimedelay);
else delay(feedbacktimedelay); //small delay to get to speed
getFeedback();
firstRun = false;
latchButtons();
}//end while

Στη συνέχεια, θα εξετάσουμε τα τμήματα της ρουτίνας get feedback(), η οποία ξεκινά διαβάζοντας το αναλογικό pin που συνδέεται με τον αισθητήρα. Ξεκινά ελέγχοντας αν ο κινητήρας βρίσκεται στα όριά του και ο κώδικας αναγνωρίζει τα όρια όταν το Ρεύμα διαβάζει 0.
Δυστυχώς, μερικές φορές μπορεί να υπάρξει λανθασμένη ένδειξη, γι’ αυτό είναι σημαντικό να οριστεί ένας μετρητής. Αυτός ο μετρητής πρέπει να μετρά μέχρι το hitLimitsmax πριν σταματήσει ο κινητήρας· αν μετρήσει λιγότερο, θα γίνει επαναφορά.
if (CRaw == 0 && hitLimits < hitLimitsmax) hitLimits = hitLimits + 1;
else hitLimits = 0; // check to see if the motor is at the limits and the current has stopped
Μετά από αυτό, ακολουθούν τα όρια διαδρομής. Όταν ο κινητήρας του γραμμικού ενεργοποιητή κινείται προς τα εμπρός και φτάσει στο όριο, θα απενεργοποιήσει το δεξί λουκέτο (right latch). Αν ο κινητήρας κινηθεί προς τα πίσω, θα απενεργοποιήσει το αριστερό λουκέτο. Ο παρακάτω κώδικας δείχνει μόνο το δεξί λουκέτο, αλλά ο κώδικας για το αριστερό είναι ίδιος.
if (hitLimits == hitLimitsmax && rightlatch == HIGH) {
rightlatch = LOW;
hitLimits = 0;
}//end if
Το όριο Ρεύματος ελέγχεται και το μέγιστο όριο ορίζεται. Αν ξεπεραστεί το όριο, θα απενεργοποιηθεί το αριστερό λουκέτο και ο κινητήρας δεν θα επεκτείνεται πλέον. Για να ξεκινήσει ξανά η επέκταση, πρέπει να αντιστραφεί ο κινητήρας.
if (CRaw > maxAmps) {
dontExtend = true;
leftlatch = LOW; //stop if feedback is over maximum
}//end if
Αυτό μας φέρνει στο τέλος του Μέρους II της παρακολούθησης της ανάδρασης Φορτίου ενός γραμμικού ενεργοποιητή. Αυτή τη φορά εμβαθύναμε σε συγκεκριμένα τμήματα του κώδικα και εξηγήσαμε πώς λειτουργούν. Αν θέλετε να παραγγείλετε κάποια από τις μονάδες που χρησιμοποιήσαμε σε αυτό το παράδειγμα, μπορείτε να παραγγείλετε online ή να επικοινωνήσετε μαζί μας για να παραγγείλετε τηλεφωνικά. Αν έχετε οποιεσδήποτε ερωτήσεις ή απορίες σχετικά με τα προϊόντα μας, είμαστε πάντα έτοιμοι να βοηθήσουμε.