Benvenuto su VideoMakers.net
Iscriviti per condividere la tua passione sul principale sito web italiano dedicato al VideoMaking!

Gli eventuali inserti pubblicitari all'interno delle discussioni sono visibili solo se non hai eseguito l'accesso al forum; ricordati di eseguire l'accesso o, se non sei ancora registrato, fallo QUI

Clicca qui per leggere le regole del forum
La Sezione dedicata a tutte le discussioni sul Fai Da Te.

Moderatore: Moderatori

Regole del forum: Clicca per leggere le regole del forum.

Gli eventuali inserti pubblicitari all'interno della discussione sono visibili solo se non hai eseguito l'accesso al forum; ricordati di eseguire l'accesso o, se non sei ancora registrato, fallo QUI
da matim
#1176096
Apro questo 3D per non continuare questo dove ho iniziato a scrivere.
Ho acquistato :
-1 clone arduino (sto aspettando un altro clone, ma nano da integrare nel progetto finito)
-2 motori wantai 42byghw811
-2 driver toshiba tb6560 (gia' assemblati con tutto il necessario eg. microstepping ecc ecc)
-2 batterie al piombo 12V-7.5A
-1 LCD 16x2
-1 joystick (triste...) tipo comando console con pulsante integrato
-1 step down per alimentare il arducino
Ho recuperato :
-1 joystick da 5K da una vecchia radio RC guasta

Per sommi capi :
Le batterie in serie alimentano i due driver/motori a 24V configurati in microstep 1/16 (3200 passi/giro).
Lo step-down preleva 12V da una delle batterie portandolo a 8V circa per alimentare l arducino
Il joy RC (con la corsa piu' lunga e comoda) pilota pan e tilt
Il joy della playstation (con poca escursione) gestisce un menu se premuto. Il menu consente (muovendo il joy) di aumentare o diminurire in maniera indipendente
la velocita' di rotazione dei motori.
Al momento il "programma" che ho scritto non e' molto elegante. E' pieno di IF qua e IF la' ma visto i 16Mhz di arducino non penso sia necessario renderlo piu' snello.
Magari in futuro per poter programmare movimenti per un eventuale time-lapse...boh si vedra'. Manca ancora tutta la parte meccanica.
Sul mio tavolo funziona tutto alla grande, mi fa venir voglia di metterlo in commecio 8) . Non vedo l' ora di assemblarlo, magari salta fuori una boiata . . .



PS
Per postare un video devo averlo prima uppato su yutube ?
Non ho trovato istruzioni, ma sono un po' ciecato . . .
Mi sa che ho cannato anche a postare l immagine. Chiedo venia . . :(
Allegati
proto.jpg
proto.jpg (106.1 KiB) Visto 4695 volte
Ultima modifica di matim il sab, 13 giu 2015 - 13:01, modificato 1 volta in totale.
da spirit74
#1176217
E si.. ma con "Arduino" è troppo semplice...(per modo di dire).

Per inserire le immagini ti consiglio "postimage" come spiegato qua.

Attendiamo di vedere il resto e magari anche il programmino...

Ciao
da matim
#1197207
Riecchime :-)
Piu vado avanti e piu' viene una roba (modestamente) [CUT] !
Sicuramente spieghero' qui come ho fatto a realizzare il tutto, ma sto pensando seriamente di mettere il tutto in vendita montato, finito.
Purtroppo ci vorra' ancora un po' di tempo. Ho provato ha piantare delle monetine, ma non e' cresciuto nulla :no:
A presto !

Matim
da spirit74
#1197209
Be ! Comincia a farci vedere qualcosetta !
Buon lavoro !
da matim
#1198018
Due screen dello sviluppo del braccio portante (pan) e del carter portamotore/cinghia.
Alluminio 3mm per il braccio. Peso totale 180g compresi i distanziali in abs. L' altezza utile all' interno e' di circa 40cm. 25cm circa di larghezza utile interna.
I due carter in abs pesano 18g per il tilt mentre 26g quello per il pan senza motori ma completi di meccanica di trasmissione, cuscinetti e l' elettronica che serve.
Sto finendo il plate regolabile in altezza (per centrare l asse di rotazione tilt con il centro dell' obiettivo) per la foto/telecamera.
Domanda :
L' attacco standard al crane e' diametro 50mm ?
Al prossimo giro postero' i collegamenti elettrici dei driver, 2joystick e display con arduino + lo sketch per farlo funzionare.
Data l intenzione della messa in vendita non sara' l ultima versione con array a matrice, ma un po' meno snello ciclo if then else che comunque funziona benissimo per muovere due motori . . .
Ovviamente non sara' verde e rosso :lol:
Allegati
seventech720.jpg
seventech720.jpg (43.38 KiB) Visto 4590 volte
blocco-motore720.jpg
blocco-motore720.jpg (33.1 KiB) Visto 4590 volte
da spirit74
#1198028
Si denota un deciso impegno !

Dai disegni l'aspetto pare davvero professionale...
come realizzi i particolari ? Te li fai tagliare da una officina specializzata ?

Continua così ! Bravo !
da matim
#1198120
Update
Inizio scusandomi con tutti se questo topic sembra piu' un blog personale che un fai da te e ringraziando spirit74 per l incoraggiamento :)
Quindi grazie spirit74 e . . . si, faro' tagliare il tutto da un' officina specializzata mentre le parti in abs saranno stampate al laser.
La ditta che stampa mi fornira' anche boccole e cuscinetti in materiale "plastico" a zero usura. Sono leggerissimi e (a detta loro...) piu' resistenti dell' acciaio.
Effettivamente ho visto una campionatura di boccole (o bronzine) che non hanno bisogno di lubrificante e paiono indistruttibili oltre ad essere leggerissimi e super scorrevoli.
Super anche il prezzo 3 volte superiore ad un abec 11 in acciaio, maledetti polimeri !

Come detto nel precedente post, ecco lo schema di collegamento e lo sketch per far muovere il tutto.
Come dicevo (anche se funzionante) e' stato abbozzato alla brutos e messo nel dimeticatoio in favore di una programmazione piu' pulita ed espandibile che non pubblichero' per ovvi motivi.
Alla fine il lavoro lo fanno i driver ed i motori e questi mostriciattoli da 3 Ampere muovono tutti i 3200 passi (in microstepping) con amore senza perdere step :love:
Ovviamente e' necessario munirsi degli stessi motori citati nel primo post che supportano tale amperaggio ed una torsione di 4,8Kg/Cm
I microswitch dei driver a disegno sono appunto impostati per erogare 3 ampere in microstepping 1/16.

Poi,

Alcuni LCD hanno catodo ed anodo inveriti. Ovviamente non accade nulla di grave, ma non si ha retroilluminazione. Controllate il vostro datasheet.
Nello schema i pot sono due entrambe da 10k. Uno per il contrasto e l' altro per la retroilluminazione.

Una delle due batterie ha montato in parallelo uno step-down per alimentare Arduino direttamente a 7V.

Il joy per il menu e' un classico minithumb da 10k con interruttore a pulsante. C'e' una resistenza sul pulsante per non mandare proprio in corto tutto quando chiude ...

Una parte dello sketch serve a fare lo "0" del joystick di manovra motori. I dati sono relativi al joy in mio possesso da 5k. Sara' sicuramente necessario variarli.
Rimando a questa discussione per approfondire la funzione "map" di Arduino (la prima a caso cercando con google...) : http://www.provalotu.com/robotica-2/arduino-e-la-funzione-map/

E' necessario aggiungere alcune librerie come si vede nello sketch

E bon . . . :ciao:

Immagine

Codice: Seleziona tutto
/* uso del display LCD 16x2 standard Hitachi HD44780 
 Circuito:
 * pin RS collegato al pin digitale 7
 * pin E (Enable) collegato al pin digitale 6
 * pin D4 collegato al pin digitale 5
 * pin D5 collegato al pin digitale 4
 * pin D6 collegato al pin digitale 3
 * pin D7 collegato al pin digitale 2
 * pin R/W collegato al GND
 * pin 1 e pin 4 collegati a GND
 * pin 2 collegato a +Vcc
 * centrale del potenziometro/trimmer da 10 KOhm collegato al pin 3 del'LCD
 * pin SX potenziometro/trimmer collegato a +Vcc
 * pin DX potenziometro/trimmer collegato a GND
 * i pin SX e DX del potenziometro/trimmer possono essere interscambiati
*/
/* uso dei drivere singolo asse TB6560
 Circuito:
 - Motore X
 * CLK+ (step) collegato a pin digitale 9
 * CW+ (senso di rotazione) collegato a pin digitale 8
 * CLK- CW- collegato A GND
 - Motore Y
 * CLK+ (step) collegato a pin digitale 11
 * CW+ (senso di rotazione) collegato a pin digitale 10
 * CLK- CW- collegato A GND
*/
#include <LiquidCrystal.h>  // carica la libreria per il display
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);  // dico alla libreria dove sono connessi i pin LCD
#include <AccelStepper.h>  // carica la libreria per i motori
AccelStepper stepperX(1, 9, 8);  // dico alla libreria dove sono connessi i pin dei controller X
AccelStepper stepperY(1, 11, 10);  // dico alla libreria dove sono connessi i pin dei controller Y
/*
  JOYSTICK Movimento motori
  Definizione pin ingresso joystick analogico
*/
#define asseX A1
#define asseY A0
/*
  JOYSTICK Movimento menu
  Definizione pin ingresso joystick analogico e pulsante analogico
*/
#define menuX A5
#define menuY A4
#define pulsA A3

int s=0; // questo mi serve per aggiornare il display ogni tot cicli (vedi sezione motori piu avanti)
int m=0; // questo mi serve per aggiornare lo stato del menu ogni tot cicli (vedi sezione menu piu avanti)
int X=50;
int Y=50;
void setup() {
/*   
   Questo blocco oltre ad avere funzione estetica, da tempo ai driver
   stepper di accendendersi correttamente
*/ 
  lcd.begin(16, 2);   // Numero di colonne ed il numero di righe di lcd
  lcd.print(" MATIM (C) 2015");   // Visualizzo il messaggio sul display
  delay(1500);  // aspetto un secondo e mezzo
  lcd.setCursor(0, 1);  // vado a capo
  lcd.print("..Initializing..");  // Visualizzo il messaggio sul display
  delay(2000);  // aspetto due secondi
  lcd.clear();  // pulisco lo schermo
/*
  JOYSTICK motori e menu
  Definisce come arudino deve interpretare i segnali (che sono tutti di input)
*/ 
  pinMode( asseX,INPUT );
  pinMode( asseY,INPUT );
  pinMode( menuX,INPUT );
  pinMode( menuY,INPUT );
  pinMode( pulsA,INPUT );
 
/*
  MOTORI X e Y
  Definisce velocita' massima
*/   
  stepperX.setMaxSpeed(3000);
  stepperY.setMaxSpeed(3000);
 

}
 
void loop() { 

  // TEST SERIALE VERIFICA DATI
 // Serial.print( "Corrente del pulsante: " );
 // Serial.print( analogRead( buttA ) );
 // Serial.print( "\n" );
 
// cerco di fare uno zero data l alta sensibilita' del joystick
  int mapX = analogRead(asseX);  // assegno a mapX la lettura del pot per il remap
  int mapY = analogRead(asseY);  // assegno a mapY la lettura del pot per il remap
  mapY = map(mapY, 20, 920, -10, 10); // adesso al centro e' 0 e va a +500 o -500
  mapX = map(mapX, 100, 990, -10, 10); // adesso al centro e' 0 e va a +500 o -500
  mapX = constrain(mapX,-100,100); // fisso i valori min max per non andare fuori scala
  mapY = constrain(mapY,-100,100); // fisso i valori min max per non andare fuori scala
  if (mapX == 1 || mapX == -1 ) { mapX=0;}
  if (mapY == 1 || mapY == -1 ) { mapY=0;}
/*
  MENU
  controllo se e' stato mosso il joystick-bottone del menu
  el caso visualizzo sull LCD le modifiche
*/ 
  m++;
  if (m>400) {
    m=0;
    if (analogRead(pulsA) == 0)   {
    delay(500); 
    while (analogRead(pulsA) >= 50)  {
    X = constrain(X,1,100);
    Y = constrain(Y,1,100);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("--- Set  Vel ---");
    lcd.setCursor(1, 1);
    lcd.print("Pan:");
    lcd.setCursor(5, 1);
    lcd.print(X);
    lcd.setCursor(8, 1);
    lcd.print("Tilt:");
    lcd.setCursor(13, 1);
    lcd.print(Y);
     switch (analogRead(menuX) ) {
       case 1023:
       X++;
       break;
       case 0:
       X--;
       break;
                                  }
     switch (analogRead(menuY) )  {
       case 1023:
       Y--;
       break;
       case 0:
       Y++;
       break;
                                   }
       delay(250);
                                     }
                                  }
               }
/*
  if (analogRead(pulsA) == 0) {
    lcd.clear();
    lcd.print("Button OK :");
    lcd.setCursor(9, 1);
    lcd.print( analogRead( pulsA ) );
    delay(1500);
  } 
 
  if (analogRead(menuX) == 1023) {
    lcd.clear();
    lcd.print("X Right:");
    lcd.setCursor(9, 1);
    lcd.print( analogRead( menuX ) );
    delay(1500);
  } 
  if (analogRead(menuX) == 0) {
    lcd.clear();
    lcd.print("X Left:");
    lcd.setCursor(9, 1);
    lcd.print( analogRead( menuX ) );
    delay(1500);
  }
 
   if (analogRead(menuY) == 0) {
    lcd.clear();
    lcd.print("Y Up:");
    lcd.setCursor(9, 1);
    lcd.print( analogRead( menuY ) );
    delay(1500);
  } 
  if (analogRead(menuY) == 1023) {
    lcd.clear();
    lcd.print("Y Down:");
    lcd.setCursor(9, 1);
    lcd.print( analogRead( menuY ) );
    delay(1500);
  }
*/ 
/*
  MOTORI
  comando i motori con il joystick in base ai parametri impostati nel menu
  e visualizzo le coordinate sull LCD
*/
    s++;        // ho dichiarato i=0 quando i arriva a 500 il display viene aggiornato ed i torna a 0
    if (s>500) {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print( "Pan  Vel : " );
    lcd.setCursor(11, 0);
    lcd.print(mapX);
    lcd.setCursor(0, 1);
    lcd.print( "Tilt Vel : " );
    lcd.setCursor(11, 1);
    lcd.print(mapY);
    s=0;
    }
   
// Test movimento motori
   if (mapX == 0) {
   stepperX.setCurrentPosition(0);
   stepperX.stop();
    }
   if (mapY == 0) {
   stepperY.setCurrentPosition(0);
   stepperY.stop();
    }
   
 
   
   stepperX.setSpeed(mapX*X);
   stepperX.runSpeed();
   stepperY.setSpeed(mapY*Y);
   stepperY.runSpeed();
   
 

}



 
da spirit74
#1198174
Grazie a te matim per l'impegno e lo spirito di condivisione !!!!
Per coloro che sappiano leggere schema e sketch (il listato in linguaggio C) di Arduino è già tutto bello e pronto all'uso !!!
Ottimo anche lo schema realizzato con il praticissimo "fritzing"...occorre solo precisare che le due schede rappresentate come basette 1000 fori sono in realtà la schamnatizzazione dei due drivers per i rispettivi motori (sicuramente particolari mancanti nella libreria dei componenti di Fritzing).
Certo che con Arduino diventa subito tutto più veloce, pulito e professinale...non oso dire semplice dato che occorre comunque farsi le ossa relativamente al linguaggio di programmazione...che mi riservo di studiare con cura in un momento di tranquillità...

Ottimo lavoro ! Non c'è dubbio !
Alla prossima...
da eNnvi
#1198655
Mi ricorda i miei vecchi codici per un piatto robotizzato. L'unica differenza è che al tempo avevo messo anche una imu per avere la funzione di tenerlo stabile orizzontale al terreno ;)

Ti do solo 3-4 consigli al volo.

Indenta il listato ti prego, il mio prof di programmazione 1 ha tolto 1 punto (su 30) ad ogni riga indentata sbagliata :evil: l'ide di arduino ha l'auto format (ctrl+t mi pare) che lo indenta già bene. Rende il codice molto più leggibile fidati (ma magari l'hai indentato ed è stato il forum a sballartelo quindi se è così chiedo venia).

Il "delay(500);" lo usi per evitare la doppia lettura del pulsante immagino. Quello che vuoi fare si chiama debounce e se vuoi uscirne con un prodotto vendibile devi implementarlo correttamente (l'uso di millis() in arduino serve a questo in pratica).

Le batterie al piombo sono pesanti, ed in molti casi pericolose (strano lo dica rispetto a quelle che voglio consigliare), ti consiglio le lipo che alla fin dei conti costano meno (c'è un famoso negozio online di modellismo cinese che vende cose di qualità, hanno anche magazzini in inghilterra ed europa quindi non aspetti troppo ed eviti la dogana, ovviamente nei magazzini europei le cose costano un filo di più). Dovrai però prevedere un circuito di ricarica adatto ovviamente, cosa che comunque avresti dovuto fare con le Pb.

Per evitare fluttuazioni il pulsante del "menu" deve essere collegato ad un input digitale e non analogico (anche se in realtà i pin Ax di arduino posso essere usati come IO digitali) con la dovuta resistenza di pullup o pulldown (a seconda) al fine di forzare lo stato logico (nel tuo caso dovrebbe essere una pullup, direi da 10k fino a 1M).

Solo un paio di consigli, poi libero tu di seguirli
per il resto il lavoro promette bene :wink:
da spirit74
#1198662
Ottimi consigli ! :birra:
da matim
#1201997
@eNnvi
Ciao e grazie dei consigli :) non posso che darti ragione ! il codice fa pettare (!) ed il pulsante che chiude su di un pin analogico con una resistenza non si puo' vedere, ma questo lo avevo gia' sottolineato in partenza. E' una versione (neppure) alfa di quando ho avuto in mano tutti i componenti ed ho iniziato a buttar giu' qualcosa. Funziona, tutto qui :)
Allo stato attuale di sviluppo ci sono due ATmga328p. Uno pilota i driver dei motori e manda i dati di velocita' e posizione al secondo che pilota un lcd 128x64 pixel. La comunicazione e' bidirezionale.
La funzione e' puramente estetica (si puo' inibire/spegnere), ma premendo un pulsante (su pin digitale e resistenza di pull down !) si accede ad un menu' che consente di variare la velocita' dei motori e programmare movimenti per un time lapse.
Per le batterie ho scelto il piombo perche' non hanno effetto memoria e quando non riescono piu' ad erogare gli ampere necessari a far muovere il tutto, le metti in carica e stop. In oltre, bastano pochi componenti per fare un caricabatteria.
Le LiPo hanno bisogno di piu' cura ed un elettronica di gestione piu' complessa pero' mi hai messo una pulce nell' orecchio. Mi sa che mi tocca riprogettare tutto il box batterie/driver e circuito di ricarica !
Allego una foto con i progressi attuali. Intanto il tempo passa, sembra il Duomo di Milano !
Ciao e grazie per il supporto :birra:

Immagine
da eNnvi
#1202273
bella l'idea, io quasi quasi a questo punto interfaccerei un touchscreen resistivo ;) comunque non capisco perchè 2 atmega quando uno basta e avanza, l'lcd al massimo lo multiplexi con uno shift register o un port expander i2c.

Il vantaggio delle lipo era il grande risparmio di peso. Il circuitino di ricarica puoi prenderlo da molti rivenditori, costa circa 2€ e non hai problemi.

Per la parte di alimentazione dei micro cosa fai? intendo hai un 7805 o uno step-down serio? lo fai girare a 16MHz stile arduino o a 8MHz con oscillatore interno?

Per il movimento hai pensato di usare il nunchuck della wii al posto dei 2 joystick? ti permetterebbe i 2 assi del joy, i 3 assi dell'accelerometro e i 3 del giroscopio e pio avresti 2 pulsanti comodi da premere con l'indice. Infine puoi pilotarlo anche stando più lontano dal controllo (beh hai circa 2 metri di limite in realtà causa protocollo i2c)
da matim
#1202350
Il touch resistivo e' un' ottima idea. Eliminerei anche due potenziometri (aggiunti di recente per controllare direttamente la velocita' di rotazione senza entrare in nessun menu) e i 4 pulsanti presenti per il menu . . .
Il problema del display non e' la disponibilta' di pin liberi, ma le ingombranti e "lente" librerie che unite alle ingombranti e "lente" librerie per gli stepper, generano un po' di problemi tipo perdita di passo e/o rallentamento generale dl funzionamento. Questo l' ho notato con tutte le librerie stepper (non solo quella che ho fatto io) + u8glib o altre parallele, seriali o i2c che siano . . . Minima spesa + massima resa = un altro ATmega. Comunicano via i2c (lib. wire) senza blocchi di sorta, magari sai dirmi il perche' . . .
Mi sto informando per le LiPo. Una 24V 10A non e' proprio economica (anche se sicuramente piu' leggera). Con 2 euro, al momento, non ho trovato nulla di affidabile che faccia il lavoro di scarica (almeno fino al 20% o cosi' ho capito) per poi caricare come si deve.
In ogni caso non e' possibile integrare tutto nel telecomando. Ci sara' un box con le batterie (LiPo o Pb) relativo circuito di carica/scarica, i due driver stepper , lo step-down ed una ventola (o un mega dissipatore, c'e' da vedere bene gli spazi) . Un rj45 cat6 andra' ai motori mentre un mini din (6 poli a vite) al telecomando che avra' un morsetto tipo super clamp da attaccare alla barra del crane o che sara' possibile tenere in mano.
Al momento la tensione dei micro e' trasformata da uno step-down che monta un lm2596. Sono mesi (sig! sob!) che funziona e credo verra' implementato anche nel progetto finito.Mai avuto problemi.
Il nunchuck, pero' te lo boccio. Al di la' dell aspetto estetico troppo casalingo, il joy ha una corsa troppo breve per fare movimenti precisi. I joy per RC standard (radiocomando per modellismo) montano potenziometri di buona fattura ed hanno una corsa abbastanza lunga da gestire l algoritmo che ho scritto (vabe' dai e' una funzioncina :P ) per la curva di velocita'/accelerazione degli stepper.
Al di la' delle ore spese tra programmazione, disegno meccanico ed acquisto di componenti inutili (il famoso rischio di impresa :kill: ) mi sono accorto di aver fatto un bell' investimento !
Non so quindi cosa alla fine verra' implementato e cosa no o se ci saranno diverse opzioni tipo che so . . senza display, con display touch, con LiPo o senza LiPo.
Il problema e' che i costi stanno diventando importanti e per quanto stia diventando pian piano un prodotto valido, la gente preferisce andare a farsi spennare in via Condotti.
#1224994
Ciao,

Sarei interessato a quest'apparecchio. Vorrei poter girare dei video dinamici qua e là. È possibile sapere le funzioni che hai implementato nel sistema ? [MOD CUT: per la vostra sicurezza non lasciare indirizzi mail privati]
da iachidda
#1224995
Ciao Lamberto88
Probabilmente ti è sfuggita una parte del Regolamento!
Ti invito cortesemente a presentarti nell'apposita sezione Presentazioni, prima di iniziare a postare le tue richieste.
Grazie per l'attenzione,
ciao Daniele.

Sul discorso distanza non c'è problema, c[…]

un topic dovrebbe essere questo http://www.videoma[…]

Hai letto già qui si come procedere corrett[…]

Ciao Franco , tutto lo Staff ti dà i[…]