Το Στέκι των Κιθαρωδών

Μουσικά όργανα και εξοπλισμός => Εφέ => Μήνυμα ξεκίνησε από: Αυτάρεσκο Καθίκι Isnogood στις 23/04/17, 18:05

Τίτλος: "Προσομοίωση" Rotary Encoder Switch με momentary footswitches
Αποστολή από: Αυτάρεσκο Καθίκι Isnogood στις 23/04/17, 18:05
Καλησπέρα σε όλους.

Αφορμή για το παρόν post αποτέλεσε αυτό το βίντεο (https://www.youtube.com/watch?v=BujW8bSLNR0). Αυτό που θέλω είναι να φτιάξω μόνος μου ένα footswitch το οποίο να συνδέεται σε κάποια πετάλια ΕΗΧ που έχω (Cathedral/ Memory Man with Hazarai) και να τα ελέγχω κάπως πιο "απομακρυσμένα".

Ο Rotary encoder δουλεύει με τον εξής τρόπο, από όσο έχω καταλάβει: Έχει τρεις ακροδέκτες 1,2 και 3. Κατά την CW στροφή κάνουν πρώτα επαφή τα (2,3) και με μια μικρή καθυστέρηση τα (1,2). Κατά την CCW στροφή κάνουν επαφή πρώτα τα (1,2) και μετά τα (2,3). Διαβάζοντας ποιο από τα 2 κάνει πρώτα επαφή, το πετάλι αλλάζει μνήμες αντιστοίχως (Πάνω ή κάτω). Τέλος, όταν τον πιέζεις, κάνουν ταυτόχρονα επαφή τα (1,2,3). Υπάρχει κάποιος τρόπος να το καταφέρω αυτό με κάποιο χειροποίητο κύκλωμα?
Τίτλος: Απ: "Προσομοίωση" Rotary Encoder Switch με momentary footswitches
Αποστολή από: vegos στις 23/04/17, 19:45
Arduino is your friend :)
Αν έχεις ασχοληθεί (ή θες να ασχοληθείς) διαβάζεις τα παρακάτω:

Εγώ "παίζω" με αυτό το library: https://github.com/0xPIT/encoder το οποίο υποστηρίζει και acceleration.

Δεν θες κάτι τρομερό από πλευρά υλοποίησης.
"Διαβάζεις" τον encoder, και ανοιγοκλείνεις μερικά relay.

Στην ουσία θες από εξοπλισμό 1 arduino.
Για κάθε relay ένα απλό κυκλωματάκι με NPN transistor (2N2222), δίοδο (1N4148 αν και ότι και να βάλεις θα δουλέψει) και μια αντίσταση (4.7kΩ είναι μια χαρά).
Έναν 360 (endless) rotary encoder.

Στο Arduino θα έχεις περίπου 17 I/O, βγάλε 3 για τον rotary encoder σου μένουν 14. Οπότε οδηγείς 14 ρελέ.
Ή μπορείς να το πας λίγο πιο πέρα και να βάλεις Solid State Relays και να τα οδηγήσεις απευθείας ή ακόμα καλύτερα να βάλεις κάποιο IC του τύπου MAX491X (έχει μονά, διπλά, τετραπλά αν θυμάμαι καλά, αν και υπάρχουν και περισσότερα), που κι αυτό το οδηγείς απευθείας (και είναι και "clickless").

Aν θες sample κώδικα:
https://github.com/vegos/darkroomtimer

Δεν είναι ακριβώς αυτό που ζητάς, αλλά υπάρχει μέσα ο έλεγχος και του encoder και του relay.
Τίτλος: Απ: "Προσομοίωση" Rotary Encoder Switch με momentary footswitches
Αποστολή από: saved στις 23/04/17, 19:53
Ουφ.Πονοκεφαλος.
Εχω πιο απλη ληση.
Πουλα τα ολα και παρε μπασο.Δεν θα θες εφε,γλειτωνεις απο μπελαδες.
Σο σιμπλε
Τίτλος: Απ: "Προσομοίωση" Rotary Encoder Switch με momentary footswitches
Αποστολή από: Αυτάρεσκο Καθίκι Isnogood στις 24/04/17, 13:41
Ουφ.Πονοκεφαλος. Εχω πιο απλη ληση. Πουλα τα ολα και παρε μπασο.Δεν θα θες εφε,γλειτωνεις απο μπελαδες. Σο σιμπλε
Μπάσο "έπαιζα" παλιά. Τώρα γέρασα. :P . Και μπάσο να έπαιζα, πάλι εφέ θα έβαζα.

Arduino is your friend :)
Αν έχεις ασχοληθεί (ή θες να ασχοληθείς) διαβάζεις τα παρακάτω:
Στην ουσία θες από εξοπλισμό 1 arduino.
Για κάθε relay ένα απλό κυκλωματάκι με NPN transistor (2N2222), δίοδο (1N4148 αν και ότι και να βάλεις θα δουλέψει) και μια αντίσταση (4.7kΩ είναι μια χαρά).
Έναν 360 (endless) rotary encoder.
Μια στιγμή. Εγώ θέλω να έχω footswitch να κάνουν τη δουλειά του rotary encoder. Δεν κατάλαβα γιατί χρειάζομαι διόδους και rotary encoder. Για το input του Arduino?

Στο Arduino θα έχεις περίπου 17 I/O, βγάλε 3 για τον rotary encoder σου μένουν 14. Οπότε οδηγείς 14 ρελέ.
Εντάξει, για αυτό το απλό, θα προτιμήσω μικρότερες εκδοχές του. Αλλά και πάλι, ήθελα να "αποφύγω" το arduino, ή τελοσπάντων να έχω έναν πιο παραδοσιακό τρόπο.


Ή μπορείς να το πας λίγο πιο πέρα και να βάλεις Solid State Relays και να τα οδηγήσεις απευθείας [...]
Υποθέτω περιλαμβάνεις ακόμα το Arduino. Αν όχι, χρειάζομαι κάπως να προσθέσω τη καθυστέρηση του ενός ρελέ.
Τίτλος: Απ: "Προσομοίωση" Rotary Encoder Switch με momentary footswitches
Αποστολή από: vegos στις 24/04/17, 14:23
Μια στιγμή. Εγώ θέλω να έχω footswitch να κάνουν τη δουλειά του rotary encoder. Δεν κατάλαβα γιατί χρειάζομαι διόδους και rotary encoder. Για το input του Arduino?

OK, λάθος, νόμιζα ότι ήθελες να χρησιμοποιήσεις rotary encoder. Πάμε από την αρχή.

Στην υλοποίηση με relay, θες κι έναν driver (1 αντίσταση, 1 δίοδο, ένα τρανζίστορ).

Αν βάλεις footswitches, δύο πχ, απλά θες ένα κώδικα του στυλ:

if (button1_pressed)
{
  pos-=1;
  if (pos<1)
    pos=5; // Το μέγιστο των ρελέ
}
if (button2_pressed)
{
  pos+=1;
  if (pos>5)
    pos=1; // Το ελάχιστο των ρελέ
}

Οπότε πολύ χοντρικά, κάπως έτσι θα λουπάρεις μεταξύ των θέσεων.

Βέβαια θα χρειαστεί να κάνεις κι ένα debounce στα footswitches, αλλά αυτά είναι λεπτομέρειες για πιο μετά.
Χρησιμοποιώντας έναν μπαμπούινο, θα μπορέσεις να βάλεις και ένα πχ 7 segment led display και να βλέπεις και σε ποιο mode είσαι και πάει λέγοντας.

---

Edit:

Εναλλακτικά θα πρέπει να φτιάξεις ένα λογικό κύκλωμα, που να κάνει την ίδια δουλειά.
Νομίζω ότι θα υπάρχουν αρκετά ψάχνοντας με "relay logic flipflop toggle" ή κάτι τέτοιο...

Παρόλα αυτά, εγώ θα ακολουθούσα την λογική του Arduino καθώς μπορείς να το επεκτείνεις όσο θες (πχ midi control, display κλπ).
Τίτλος: Απ: "Προσομοίωση" Rotary Encoder Switch με momentary footswitches
Αποστολή από: Αυτάρεσκο Καθίκι Isnogood στις 24/04/17, 21:05
Από ότι έχω βρει, υπάρχουν time-delay relays, οπότε, θα κάνω μια μικρή έρευνα σε αυτά.
Τίτλος: Απ: "Προσομοίωση" Rotary Encoder Switch με momentary footswitches
Αποστολή από: Βραζίλης στις 28/04/17, 09:27
Στην υλοποίηση με relay, θες κι έναν driver (1 αντίσταση, 1 δίοδο, ένα τρανζίστορ).

Βέβαια θα χρειαστεί να κάνεις κι ένα debounce στα footswitches, αλλά αυτά είναι λεπτομέρειες για πιο μετά.

Γιατί να χρειάζεται driver; Το Arduino οδηγεί άνετα τα relay (από όσο έχω δοκιμάσει και παρακολουθήσει)

Debounce κάνει το Arduino. Δεν είχα ποτέ πρόβλημα με τα κουμπιά και τις βιβλιοθήκες που χρησιμοποίησα.

(Από ότι καταλαβαίνω, έχεις ασχοληθεί περισσότερο από εμένα, οπότε διόρθωσέ με αν κάνω λάθος)
Τίτλος: Απ: "Προσομοίωση" Rotary Encoder Switch με momentary footswitches
Αποστολή από: vegos στις 28/04/17, 13:00
Γιατί να χρειάζεται driver; Το Arduino οδηγεί άνετα τα relay (από όσο έχω δοκιμάσει και παρακολουθήσει)

Είναι μικρή η ένταση του ρεύματος που βγάζουν τα pins και το ρελέ είναι ηλεκτρομαγνήτης που πρέπει να διεγερθεί. Οπότε θα πρέπει να το τροφοδοτήσεις από άλλη πηγή, να πάρει περισσότερο ρεύμα (ένταση) και το pin απλά να δώσει την εντολή.

Στην ουσία, βάζεις ένα τρανζίστορ που κάνει τον διακόπτη, είτε NPN (κόβεις τη γή) είτε PNP (κόβεις το +).

Παράθεση
Debounce κάνει το Arduino. Δεν είχα ποτέ πρόβλημα με τα κουμπιά και τις βιβλιοθήκες που χρησιμοποίησα.

Software θα το κάνεις, εννοείται. Απλά την ώρα που πατάς ένα κουμπί, υπάρχει ένα σημείο όπου οριακά βραχυκυκλώνει, αυτό θα το διαβάσει ο arduinos και θα κάνει αυτό που θες. Πιθανότατα να χάσει για ms το connectivity ο διακόπτης και να το ξαναβρεί μετά, οπότε θα πάρει 2 φορές την εντολή, ή θα την παίρνει για όσο έχεις πατημένο το κουμπί κλπ.
Γενικά, καλό είναι στα κουμπιά να βάζεις είτε ένα απλό delay κάποιων ms (50-100) είτε ένα while pressed ώστε να παίρνει το command μόλις αφήσεις τον διακόπτη (πχ while (digitalRead(D5)==LOW) delay 1;).