dott.cicala Inserito: 27 dicembre 2018 Segnala Inserito: 27 dicembre 2018 (modificato) Mi hanno regalato questo starter kit Clonuino Rev3....non sapendo della mia avversione verso il mondo arduino C'è un gran numero di componenti, sensori, motorini ,un DVD pieno zeppo di esempi e programmini già fatti....tutto sommato è molto interessante. Mi ha ricordato quelle scatole come l' Elettro Bral o il Meccano che ricevevo da bambino. Adesso sono obbligato a giocarci Modificato: 27 dicembre 2018 da dott.cicala
dnmeza Inserita: 27 dicembre 2018 Segnala Inserita: 27 dicembre 2018 anchio stò "giocando" con arduino, 😃😙 Stefano è bello ritornare "Bambini" 😅🤣 AUGURI, di Buone Feste !!! buon divertimento, con le Tue iniziative combinerai sicuramente qualcosa di BELLO !!!!!
luigi69 Inserita: 27 dicembre 2018 Segnala Inserita: 27 dicembre 2018 Come si chiamava il puffo che si lamentava sempre ? Brontolone ? Io odio quella cosa li che ti hanno regalato . . . .
dott.cicala Inserita: 27 dicembre 2018 Autore Segnala Inserita: 27 dicembre 2018 29 minuti fa, luigi69 scrisse: Io odio quella cosa li che ti hanno regalato Anche io la pensavo così ma vista la gioia negli occhi dei miei figli che me l'hanno regalato...ho cambiato idea.
luigi69 Inserita: 27 dicembre 2018 Segnala Inserita: 27 dicembre 2018 Dott. certamente. Se la metti così le cose cambiano . . .
dott.cicala Inserita: 27 dicembre 2018 Autore Segnala Inserita: 27 dicembre 2018 Auguri Danilo!!.....io non ho bisogno di tornar bambino, secondo mia madre e confermato da mia moglie, sono rimasto un po' indietro (loro dicono "un po' scemo")
dnmeza Inserita: 27 dicembre 2018 Segnala Inserita: 27 dicembre 2018 Esagerato 🤣🤣🤣, io mi sto divertendo a creare con arduino, un prova differenziale ed ora anche un soff starter, che mi serve per i miei hobby in legno, con calma e tempo penso che li farò, mi sto procurando il materiale, moc3020, Transistor, ecc.... spero per i primi dell'anno o al max per fine gennaio di finirli, 🤒, ciao
ilguargua Inserita: 27 dicembre 2018 Segnala Inserita: 27 dicembre 2018 2 ore fa, dott.cicala scrisse: Mi hanno regalato questo starter kit Clonuino Rev3.... Ecco, per dire, a me hanno regalato un maglione... No dico, poi lamentatevi anche, te e quello che nello sgabuzzino trova elettronica vintage, quando nel mio abbondano solo gli scarafaggi... Scherzo, era solo per farvi a tutti gli auguri in ritardo! (ma il maglione me l'hanno regalato veramente!) Ciao, Ale.
Ivan Botta Inserita: 27 dicembre 2018 Segnala Inserita: 27 dicembre 2018 Quote Anche io la pensavo così ma vista la gioia negli occhi dei miei figli che me l'hanno regalato...ho cambiato idea. Ottima decisione, la felicità dei figli è la miglior cosa che ci sia!! Quote sono rimasto un po' indietro (loro dicono "un po' scemo") Sei in buona compagnia.......la mia.
Livio Orsini Inserita: 28 dicembre 2018 Segnala Inserita: 28 dicembre 2018 12 ore fa, dott.cicala scrisse: ..io non ho bisogno di tornar bambino, secondo mia madre e confermato da mia moglie, sono rimasto un po' indietro (loro dicono "un po' scemo") Mantenere, in una certa misura, un po' di infantilismo è una cosa bellissima basta, come sempre, non esagerare. Comunque i tuoi figli ti hanno fatto un bellissimo regalo; ti devono voler molto bene per cercare di assecondare le tue passioni. Inoltre è anche un bel kit. 13 ore fa, dott.cicala scrisse: Mi ha ricordato quelle scatole come l' Elettro Bral o il Meccano che ricevevo da bambino. E si son prorpio questi regali che iniziano a rovinarti. Se invece del piccolo elettricista e del meccano mi avessero regalato, che so, il piccolo speculatore forse oggi sarei come Soros (che roba brutta)
Riccardo Ottaviucci Inserita: 28 dicembre 2018 Segnala Inserita: 28 dicembre 2018 a me regalarono questi a suo tempo il primo è stato fatale ...
dott.cicala Inserita: 28 dicembre 2018 Autore Segnala Inserita: 28 dicembre 2018 22 ore fa, dnmeza scrisse: un prova differenziale ed ora anche un soff starter, Interessante, ti invito a renderci partecipi così da ravvivare un po' l'ambiente Io sono in attesa che mi venga qualche idea. Ho provato il programmino che gestisce il motore passo passo da encoder e funziona male. Si perde qualche impulso e il motore a volte più che dei passi fa dei balzi.... Devo ancora indagare se è dovuto all'encoder o al codice.
dnmeza Inserita: 28 dicembre 2018 Segnala Inserita: 28 dicembre 2018 48 minuti fa, dott.cicala scrisse: Interessante, ti invito a renderci partecipi così da ravvivare un po' l'ambiente non manchero, appeno mi arriva il materiale e l'avro provato
Livio Orsini Inserita: 29 dicembre 2018 Segnala Inserita: 29 dicembre 2018 Ottima idea! Aspettiamo con ansia le prossime applicazioni. Visto che non c'è costruire Hw, magari darò il mio contributo. 11 ore fa, dott.cicala scrisse: Devo ancora indagare se è dovuto all'encoder o al codice. Stefano, se vuoi, metti il codice in una discussione così magari ci diamo un'occhiata e ne discutiamo.
dott.cicala Inserita: 29 dicembre 2018 Autore Segnala Inserita: 29 dicembre 2018 Eccolo qua #include "Stepper.h" #define STEPS 32 // Number of steps for one revolution of Internal shaft // 2048 steps for one revolution of External shaft volatile boolean TurnDetected; // need volatile for Interrupts volatile boolean rotationdirection; // CW or CCW rotation const int PinCLK=2; // Generating interrupts using CLK signal const int PinDT=3; // Reading DT signal const int PinSW=4; // Reading Push Button switch int RotaryPosition=0; // To store Stepper Motor Position int PrevPosition; // Previous Rotary position Value to check accuracy int StepsToTake; // How much to move Stepper // Setup of proper sequencing for Motor Driver Pins // In1, In2, In3, In4 in the sequence 1-3-2-4 Stepper small_stepper(STEPS, 8, 10, 9, 11); // Interrupt routine runs if CLK goes from HIGH to LOW void isr () { delay(4); // delay for Debouncing if (digitalRead(PinCLK)) rotationdirection= digitalRead(PinDT); else rotationdirection= !digitalRead(PinDT); TurnDetected = true; } void setup () { pinMode(PinCLK,INPUT); pinMode(PinDT,INPUT); pinMode(PinSW,INPUT); digitalWrite(PinSW, HIGH); // Pull-Up resistor for switch attachInterrupt (0,isr,FALLING); // interrupt 0 always connected to pin 2 on Arduino UNO } void loop () { small_stepper.setSpeed(700); //Max seems to be 700 if (!(digitalRead(PinSW))) { // check if button is pressed if (RotaryPosition == 0) { // check if button was already pressed } else { small_stepper.step(-(RotaryPosition*50)); RotaryPosition=0; // Reset position to ZERO } } // Runs if rotation was detected if (TurnDetected) { PrevPosition = RotaryPosition; // Save previous position in variable if (rotationdirection) { RotaryPosition=RotaryPosition-1;} // decrase Position by 1 else { RotaryPosition=RotaryPosition+1;} // increase Position by 1 TurnDetected = false; // do NOT repeat IF loop until new rotation detected // Which direction to move Stepper motor if ((PrevPosition + 1) == RotaryPosition) { // Move motor CW StepsToTake=50; small_stepper.step(StepsToTake); } if ((RotaryPosition + 1) == PrevPosition) { // Move motor CCW StepsToTake=-50; small_stepper.step(StepsToTake); } } digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); }
Lorenzo-53 Inserita: 30 dicembre 2018 Segnala Inserita: 30 dicembre 2018 Tempo addietro ho letto un articolo sul proliferare di kit per Arduino, spiegavano che in pratica non tutti i moduli erano affidabili, forse l'encoder ha dei problemi
Livio Orsini Inserita: 30 dicembre 2018 Segnala Inserita: 30 dicembre 2018 Scusa Stefano ma come piloti lo stepper? Usi la classica interfaccia basata sul 298? Io qualche tempo fa avevo fatto un qualche cosa con uno stepper usando una vecchia interfaccia fatta da me e non usando le funzioni di libreria. Usare arduino mi riporta alle tecniche di debug di 40 e più anni fa, quando si usava solo la teletype. Io dividerei il problema in 2. Ad esempio, con il PC che sfrutta la seriale come interfaccia dai il dto corrispondente al numero di passi e verifichi l'esecuzione. Anche direzione e numero di passi ricevuti dall'encoder li puoi visualizzare sul terminale seriale.
dott.cicala Inserita: 30 dicembre 2018 Autore Segnala Inserita: 30 dicembre 2018 (modificato) Lo stepper è un cosino piccolissimo che viene comandato direttamente da un buffer ULN2003, è proprio questo L'encoder è questo Il problema sta proprio nell'encoder che genera gli impulsi un po' a casaccio, fa proprio schifo. L'ho appurato tramite l'analizzatore di stati logici. Ne ho uno Omron professionale come questo, ma non ho ancora provato a collegarlo Modificato: 30 dicembre 2018 da dott.cicala
Livio Orsini Inserita: 30 dicembre 2018 Segnala Inserita: 30 dicembre 2018 Ero andato a rivedermi il mio programma ed anch'io, confrontando ill tuo, ero giunto alla medesima conclusione: il difettio eraq nel comando. 4 ore fa, dott.cicala scrisse: Il problema sta proprio nell'encoder che genera gli impulsi un po' a casaccio, fa proprio schifo. Son quelli usati come potenziometri digitali; però sei sicuro che sia lui e non il modo come li leggi?.
ilguargua Inserita: 30 dicembre 2018 Segnala Inserita: 30 dicembre 2018 Io per quegli encoder uso sempre questo codice, che usa o 2 interrupt o un timer : /* * rotary_sm.ino -- State machine implementation of rotary encoder driver * Interrupt driven; supports 2 types of interrupts: * * Polled interrupts; enable by defining TIMER2INT * * Pin change interrupts: enalbe by defining PINCHANGEINT * (Do NOT enable both at the same time) * * This program is developed from the code at: * http://www.buxtronix.net/2011/10/rotary-encoders-done-properly.html * Since this code was in the form of an arduino library, and I had unresolvable * references that I could not figure out, I just modified it as a single sketch. * The only library support required is if you want to use interrupt polling, * and then the MsTimer2 library needs to be installed. */ /* Define PINCHANGEINT if you want to interrupt on any encoder pin change */ #define PINCHANGEINT /* --- OR --- */ /* Define TIMER2INT if you want to use periodic interrupts to poll the encoder */ //#define TIMER2INT /* Define ENABLEPULLUPS if there are no external pull-ups on encoder AB pins */ //#define ENABLEPULLUPS /* Define to enable the ISR debug flag */ //#define ISRFLAG /* You may need to install this library (MsTimer2) from the arduino site */ #ifdef TIMER2INT #include <MsTimer2.h> #endif #define DIR_NONE 0x00 // No complete step yet. #define DIR_CW 0x10 // Clockwise step. #define DIR_CCW 0x20 // Anti-clockwise step. unsigned int state; unsigned int A = 2; // pins connected to the encoder (digital_pin 2) unsigned int B = 3; // " (digital_pin 3) unsigned int ISRflag = 5; // " (digital_pin 3) int count = 0; // count each indent int old_count = 0; // check for count changed /* * The below state table has, for each state (row), the new state * to set based on the next encoder output. From left to right in, * the table, the encoder outputs are 00, 01, 10, 11, and the value * in that position is the new state to set. */ // State definitions state table (emits a code at 00 only) // states are: (NAB) N = 0: clockwise; N = 1: counterclockwiswe #define R_START 0x3 #define R_CW_BEGIN 0x1 #define R_CW_NEXT 0x0 #define R_CW_FINAL 0x2 #define R_CCW_BEGIN 0x6 #define R_CCW_NEXT 0x4 #define R_CCW_FINAL 0x5 const unsigned char ttable[8][4] = { {R_CW_NEXT, R_CW_BEGIN, R_CW_FINAL, R_START}, // R_CW_NEXT {R_CW_NEXT, R_CW_BEGIN, R_CW_BEGIN, R_START}, // R_CW_BEGIN {R_CW_NEXT, R_CW_FINAL, R_CW_FINAL, R_START | DIR_CW}, // R_CW_FINAL {R_START, R_CW_BEGIN, R_CCW_BEGIN, R_START}, // R_START {R_CCW_NEXT, R_CCW_FINAL, R_CCW_BEGIN, R_START}, // R_CCW_NEXT {R_CCW_NEXT, R_CCW_FINAL, R_CCW_FINAL, R_START | DIR_CCW}, // R_CCW_FINAL {R_CCW_NEXT, R_CCW_BEGIN, R_CCW_BEGIN, R_START}, // R_CCW_BEGIN {R_START, R_START, R_START, R_START} // ILLEGAL }; void setup( ) { pinMode( A, INPUT ); pinMode( B, INPUT ); #ifdef ENABLEPULLUPS digitalWrite( A, HIGH ); // set pullups digitalWrite( B, HIGH ); // " #endif #ifdef TIMER2INT MsTimer2::set( 1, T2_isr ); // interrupt polling: MsTimer2::start( ); #endif #ifdef PINCHANGEINT attachInterrupt( 0, AB_isr, CHANGE ); // pin-change interrupts: attachInterrupt( 1, AB_isr, CHANGE ); #endif #ifdef ISRFLAG pinMode( ISRflag, OUTPUT ); // time the ISR digitalWrite( ISRflag, HIGH ); // set pull-up ON #endif state = (digitalRead( A ) << 1) | digitalRead( B ); // Initialise state. old_count = 0; Serial.begin( 9600 ); Serial.println( "Rotary Encoder Tests" ); } #ifdef PINCHANGEINT void AB_isr( ) { // Grab state of input pins. unsigned char pinstate = (digitalRead( A ) << 1) | digitalRead( B ); // Determine new state from the pins and state table. state = ttable[state & 0x07][pinstate]; if( state & DIR_CW ) count++; if( state & DIR_CCW ) count--; } #endif #ifdef TIMER2INT void T2_isr( ) { #ifdef ISRFLAG digitalWrite( ISRflag, HIGH ); #endif // Grab state of input pins. unsigned char pinstate = (digitalRead( A ) << 1) | digitalRead( B ); // Determine new state from the pins and state table. state = ttable[state & 0x07][pinstate]; if( state & DIR_CW ) count++; // count up for clockwise if( state & DIR_CCW ) count--; // count down for counterclockwise #ifdef ISRFLAG digitalWrite( ISRflag, LOW ); #endif } #endif void loop( ) { if( old_count != count ) { Serial.println( count ); old_count = count; } } Ciao, Ale.
dott.cicala Inserita: 30 dicembre 2018 Autore Segnala Inserita: 30 dicembre 2018 Non mi sono ancora abituato alle lungaggini dell' arduinese. Non ci sono i fronti di salita-discesa? verrebbe una cosa elementare //************************************************************************* // tA= Traccia A // tB= Traccia B // rA= Fronte salita traccia A // rB= Fronte salita traccia B // fA= Fronte discesa traccia A // fB= Fronte discesa traccia B // Impulsi = conteggio attuale encoder //************************************************************************* // Incremento if((rA &! tA)||(rB && tA)||(fA && tB)||(fB &! tB)){Impulsi++}; // Decremento if((rB &! tA)||(rA && tB)||(fB && tA)||(fA &! tB)){Impulsi--};
ilguargua Inserita: 30 dicembre 2018 Segnala Inserita: 30 dicembre 2018 23 minuti fa, dott.cicala scrisse: Non ci sono i fronti di salita-discesa? Che io sappia no, se non per gli interrupts. Ciao, Ale.
dott.cicala Inserita: 30 dicembre 2018 Autore Segnala Inserita: 30 dicembre 2018 (modificato) magari una cosa così funziona tA=(digitalRead(trA)==HIGH); tB=(digitalRead(trB)==HIGH); // Fonte salita traccia A rA= tA &! app1; app1=tA; // Fonte discesa traccia A fA= !tA && app2; app2 =tA; // Fonte salita traccia B rB= tB &! app3; app3=tB; // Fonte discesa traccia B fB= !tB && app4; app4 =tB; // Incremento if((rA &! tA)||(rB && tA)||(fA && tB)||(fB &! tB)){Impulsi++}; // Decremento if((rB &! tA)||(rA && tB)||(fB && tA)||(fA &! tB)){Impulsi--}; Modificato: 30 dicembre 2018 da dott.cicala
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora