- Messaggi: 376
- Ringraziamenti ricevuti 38
[Work in progress] Quando la noia colpisce...
- Matteo Garia
-
Autore della discussione
- Moderatore
-
Less
Di più
13 Anni 2 Mesi fa #1
da Matteo Garia
[Work in progress] Quando la noia colpisce... è stato creato da Matteo Garia
... Ci si trova a realizzare cose assurde! 
Partiamo dal principio: ero di fronte al pc, la sera, con la freedom davanti in cerca di idee da realizzare...
... strumento da laboratorio? naah, troppo noioso ...
... giochi con led? sono per bambini! ...
finchè mi casca l'occhio su di lei, presente su una mensola in camera mia da una decina di anni, costruita quand'ero piccolo, ricordo che fu uno dei regali di natale più belli mai ricevuti:
imageshack.us/photo/my-images/40/img0453dr.jpg/
Sospensioni indipendenti a quadrilatero, assetto sportivo, cambio meccanico realmente funzionante 5 marce + retro!
peccato per l'assenza della frizione, spero non mi crei problemi (al limite si scala con la doppietta :woohoo: )
Il Lego Technic è sempre stato stupendo nelle parti meccaniche
Dettaglio della parte più affascinante, il cambio:
imageshack.us/photo/my-images/715/img0458v.jpg/
Meccanicamente è come un cambio automobilistico, mancano i sincronizzatori (gli innesti sono sagomati in modo da "simulare" il lavoro dei sincro)
Ringraziando l'amico Simone che mi ha regalato un paio di servomotori kyosho, inizio con le modifiche al cambio per renderlo elettroattuato, sfruttando al più possibile pezzi Lego che posseggo e limitando l'uso di altri componenti (ci sono solo le viti di fissaggio dei servi...):
imageshack.us/photo/my-images/560/img0454uw.jpg/
imageshack.us/photo/my-images/163/img0461cbq.jpg/
imageshack.us/photo/my-images/837/img0459pf.jpg/
Spero si capisca.. Un servo muove la leva in direzione sinistra-destra (quello con la croce bianca, devo ancora fissarlo), mentre l'altro ingrana le marce, il difficile sarà sincronizzare per bene i movimenti per inserirle correttamente
Motore di trazione:
imageshack.us/photo/my-images/163/img0457d.jpg/
imageshack.us/photo/my-images/834/img0456r.jpg/
Recuperato da una stampante, ma probabilmente verrà sostituito, va alimentato a tensione troppo alta (non ho specifiche ma ad occhio è da 24V, a 12 genera pochissima coppia)
La sua gestione sarà semplice poichè l'inversione non verrà implementata (c'è la retro meccanica), quindi un mosfet che lo comanda in PWM ed un secondo mos in parallelo che si occuperà della frenata. Non intendo usare IC particolari specifici per poter sfruttare un po' di materiale che ho in casa
Altre cose che vorrei implementare saranno encoder sia sul motore che sull'asse di trasmissione, per leggere giri/min e velocità.
Mi manca il servo per lo sterzo, devo procurarmelo e montarlo
Ah, ovviamente la macchina sarà radiocomandata, non autonoma: se devo lasciare al computer il divertimento di guidare beh... non l'avrei realizzata
Il progetto è a tempo perso, fatto nei ritagli di tempo libero quando non ho cose "utili" da fare, percui verrà portato avanti molto lentamente...
Che ve ne pare... è un lavoro sufficientemente inutile?

Partiamo dal principio: ero di fronte al pc, la sera, con la freedom davanti in cerca di idee da realizzare...
... strumento da laboratorio? naah, troppo noioso ...
... giochi con led? sono per bambini! ...
finchè mi casca l'occhio su di lei, presente su una mensola in camera mia da una decina di anni, costruita quand'ero piccolo, ricordo che fu uno dei regali di natale più belli mai ricevuti:
imageshack.us/photo/my-images/40/img0453dr.jpg/
Sospensioni indipendenti a quadrilatero, assetto sportivo, cambio meccanico realmente funzionante 5 marce + retro!
peccato per l'assenza della frizione, spero non mi crei problemi (al limite si scala con la doppietta :woohoo: )
Il Lego Technic è sempre stato stupendo nelle parti meccaniche
Dettaglio della parte più affascinante, il cambio:
imageshack.us/photo/my-images/715/img0458v.jpg/
Meccanicamente è come un cambio automobilistico, mancano i sincronizzatori (gli innesti sono sagomati in modo da "simulare" il lavoro dei sincro)
Ringraziando l'amico Simone che mi ha regalato un paio di servomotori kyosho, inizio con le modifiche al cambio per renderlo elettroattuato, sfruttando al più possibile pezzi Lego che posseggo e limitando l'uso di altri componenti (ci sono solo le viti di fissaggio dei servi...):
imageshack.us/photo/my-images/560/img0454uw.jpg/
imageshack.us/photo/my-images/163/img0461cbq.jpg/
imageshack.us/photo/my-images/837/img0459pf.jpg/
Spero si capisca.. Un servo muove la leva in direzione sinistra-destra (quello con la croce bianca, devo ancora fissarlo), mentre l'altro ingrana le marce, il difficile sarà sincronizzare per bene i movimenti per inserirle correttamente
Motore di trazione:
imageshack.us/photo/my-images/163/img0457d.jpg/
imageshack.us/photo/my-images/834/img0456r.jpg/
Recuperato da una stampante, ma probabilmente verrà sostituito, va alimentato a tensione troppo alta (non ho specifiche ma ad occhio è da 24V, a 12 genera pochissima coppia)
La sua gestione sarà semplice poichè l'inversione non verrà implementata (c'è la retro meccanica), quindi un mosfet che lo comanda in PWM ed un secondo mos in parallelo che si occuperà della frenata. Non intendo usare IC particolari specifici per poter sfruttare un po' di materiale che ho in casa
Altre cose che vorrei implementare saranno encoder sia sul motore che sull'asse di trasmissione, per leggere giri/min e velocità.
Mi manca il servo per lo sterzo, devo procurarmelo e montarlo
Ah, ovviamente la macchina sarà radiocomandata, non autonoma: se devo lasciare al computer il divertimento di guidare beh... non l'avrei realizzata

Il progetto è a tempo perso, fatto nei ritagli di tempo libero quando non ho cose "utili" da fare, percui verrà portato avanti molto lentamente...
Che ve ne pare... è un lavoro sufficientemente inutile?

Si prega Accesso o Crea un account a partecipare alla conversazione.
- simonv92
-
- Giovane Utente
-
Less
Di più
- Messaggi: 21
- Ringraziamenti ricevuti 0
13 Anni 2 Mesi fa #2
da simonv92
Risposta da simonv92 al topic Re: [Work in progress] Quando la noia colpisce...
Vedo che ti sei dato subito da fare

Si prega Accesso o Crea un account a partecipare alla conversazione.
- Akuryu
-
- Premium Utente
-
Less
Di più
- Messaggi: 137
- Ringraziamenti ricevuti 3
13 Anni 2 Mesi fa #3
da Akuryu
Risposta da Akuryu al topic Re: [Work in progress] Quando la noia colpisce...
Spetta riscaldo la padella e faccio 2 popcorn, Mauro prepara le bibite che ci godiamo lo spettacolo!!
Si prega Accesso o Crea un account a partecipare alla conversazione.
13 Anni 2 Mesi fa #4
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: [Work in progress] Quando la noia colpisce...
...le bibite sono fuori la finestra, visto che da queste parti si e' riabbassata la temperatura.
...attento Matteo alla noia!
Se ti annoi troppo cosa fai uscire fuori!
Avere una meccanica pronta e' un buon vantaggio.
Non sottovalutare il piacere dell'osservare un robot autonomo!
Vederlo schivare ostacoli e' piacevole!
Saluti,
Mauro
...attento Matteo alla noia!
Se ti annoi troppo cosa fai uscire fuori!

Avere una meccanica pronta e' un buon vantaggio.
Non sottovalutare il piacere dell'osservare un robot autonomo!
Vederlo schivare ostacoli e' piacevole!

Saluti,
Mauro
Si prega Accesso o Crea un account a partecipare alla conversazione.
- Matteo Garia
-
Autore della discussione
- Moderatore
-
Less
Di più
- Messaggi: 376
- Ringraziamenti ricevuti 38
13 Anni 2 Mesi fa #5
da Matteo Garia
Risposta da Matteo Garia al topic Re: [Work in progress] Quando la noia colpisce...
Dunque, si procede!!
Ho iniziato a buttare giù qualche riga di codice molto ingarbugliata per gestire il cambio, partendo da un programmino di test per i servo per cercare le posizioni utili, immaginando la leva del cambio ho definito le varie posizioni sulla griglia.
Per ora il sistema di cambiata non è ottimizzato e prevede il passaggio dalla folle per qualsiasi cambio marcia, ovviamente ciò provoca notevole perdita di tempo
Il funzionamento è scandito da TMR0 regolato per fornire l'interrupt ogni 0.1ms esatti
Ogni 50ms viene eseguita la routine di selezione marcia, la quale si occupa di dare i temi corretti ai due servo (servo1, servo2)
Due piccole funzioni eseguite ad ogni interrupt inviano gli impulsi ai servo, si capisce quindi che la risoluzione è 0.1ms (10 posizioni possibili)
Se sarà necessario ridurrò il tempo di interrupt per avere maggior risoluzione
La routine sopra postata ha un contatore interno (cmd_counter) usato per dare i ritardi tra un valore e l'altro, confrontando tale contatore con il valore costante "shift_time"
se "shift_time" vale 10, quindi, tra un movimento e l'altro passano 500ms. Tale valore lo adatterò ai tempi di risposta della meccanica, o se sarà il caso definirò diversi ritardi tra un'operazione e l'altra, visto che il cambio marcia è diviso in 3 parti.
Ora anche per passare tra due marce poste sulla stessa verticale (esempio seconda e terza), perdo tempo passando dalla folle, assolutamente da eliminare :lol:
La griglia del cambio è diversa da quella solita delle auto:
R 2 4
|_|_|
| | |
1 3 5
servo_p1 indica la leva a sinistra, p2 al centro e p3 a destra; servo_up è la leva verso l'alto e servo_dn è la leva verso il basso
tutti i valori sono definiti ad inizio programma per poter esser comodamente modificati
Peccato che al momento di provare il tutto un servo sia passato a miglior vita!
Smontandolo ho scoperto che l'ic di controllo era una di quelle patacche coperte di resina, e premendolo con (molta) forza riprende a funzionare... maledette produzioni economiche :sick:
Dovrò procurarmene uno nuovo....
Se il codice non è comprensibile chiedete pure, mi rendo conto che non sono ancora molto capace a scrivere codice "chiaro"
Good Night!
Ho iniziato a buttare giù qualche riga di codice molto ingarbugliata per gestire il cambio, partendo da un programmino di test per i servo per cercare le posizioni utili, immaginando la leva del cambio ho definito le varie posizioni sulla griglia.
Per ora il sistema di cambiata non è ottimizzato e prevede il passaggio dalla folle per qualsiasi cambio marcia, ovviamente ciò provoca notevole perdita di tempo
Code:
void GearSelect(unsigned char g)
{
if(shift_counter==3){exit;} //Se la marcia è già inserita esce dalla routine
if (cmd_counter==shift_time) //verifico che sia trascorso il ritardo tra un'azione e l'altra
{
switch (g) //g -> marcia da inserire (0-> folle, 6-> retromarcia)
{
case 1: //first gear
{
switch (shift_counter)
{
case 0: servo1 = servo_neutral; break;
case 1: servo2 = servo_p1; break;
case 2: servo1 = servo_geardn; break;
}
}
break;
case 2: //second gear
{
switch (shift_counter)
{
case 0: servo1 = servo_neutral; break;
case 1: servo2 = servo_p2; break;
case 2: servo1 = servo_gearup; break;
}
}
break;
case 3: //third gear
{
switch (shift_counter)
{
case 0: servo1 = servo_neutral; break;
case 1: servo2 = servo_p2; break;
case 2: servo1 = servo_geardn; break;
}
}
break;
case 4: //fourth gear
{
switch (shift_counter)
{
case 0: servo1 = servo_neutral; break;
case 1: servo2 = servo_p3; break;
case 2: servo1 = servo_gearup; break;
}
}
break;
case 5: //fifth gear
{
switch (shift_counter)
{
case 0: servo1 = servo_neutral; break;
case 1: servo2 = servo_p3; break;
case 2: servo1 = servo_geardn; break;
}
}
break;
case 0: //neutral gear
{
switch (shift_counter)
{
case 0: servo1 = servo_neutral; break;
case 1: servo2 = servo_p2; break;
}
}
break;
case 6: //reverse gear
{
switch (shift_counter)
{
case 0: servo1 = servo_neutral; break;
case 1: servo2 = servo_p1; break;
case 2: servo1 = servo_gearup; break;
}
}
break;
}
cmd_counter=0; //azzero il contatore
shift_counter++;
}
cmd_counter++;
}
Il funzionamento è scandito da TMR0 regolato per fornire l'interrupt ogni 0.1ms esatti
Ogni 50ms viene eseguita la routine di selezione marcia, la quale si occupa di dare i temi corretti ai due servo (servo1, servo2)
Due piccole funzioni eseguite ad ogni interrupt inviano gli impulsi ai servo, si capisce quindi che la risoluzione è 0.1ms (10 posizioni possibili)
Se sarà necessario ridurrò il tempo di interrupt per avere maggior risoluzione
La routine sopra postata ha un contatore interno (cmd_counter) usato per dare i ritardi tra un valore e l'altro, confrontando tale contatore con il valore costante "shift_time"
se "shift_time" vale 10, quindi, tra un movimento e l'altro passano 500ms. Tale valore lo adatterò ai tempi di risposta della meccanica, o se sarà il caso definirò diversi ritardi tra un'operazione e l'altra, visto che il cambio marcia è diviso in 3 parti.
Ora anche per passare tra due marce poste sulla stessa verticale (esempio seconda e terza), perdo tempo passando dalla folle, assolutamente da eliminare :lol:
La griglia del cambio è diversa da quella solita delle auto:
R 2 4
|_|_|
| | |
1 3 5
servo_p1 indica la leva a sinistra, p2 al centro e p3 a destra; servo_up è la leva verso l'alto e servo_dn è la leva verso il basso
tutti i valori sono definiti ad inizio programma per poter esser comodamente modificati
Peccato che al momento di provare il tutto un servo sia passato a miglior vita!

Smontandolo ho scoperto che l'ic di controllo era una di quelle patacche coperte di resina, e premendolo con (molta) forza riprende a funzionare... maledette produzioni economiche :sick:
Dovrò procurarmene uno nuovo....
Se il codice non è comprensibile chiedete pure, mi rendo conto che non sono ancora molto capace a scrivere codice "chiaro"
Good Night!
Si prega Accesso o Crea un account a partecipare alla conversazione.
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.
Forum - Ultimi messaggi
-
- progetto can
- da marcelloraja
-
- MODULO GSM SIM900A
- da Mauro Laurenti
-
- Freedom III e compilazioni fallite
- da Mauro Laurenti
-
- Gestione degli errori su comunicazione seriale
- da Mauro Laurenti
-
- Timer0 e interrupt
- da Mauro Laurenti