Buongiorno ragazzi,
spero di trovarvi bene. Mi chiamo Nicola, sono un fotografo, e sto cercando di realizzare con Arduino un controller per un Telecinema.
Vi spiego: ho delle pellicole 8mm (immaginatevi le pellicole del cinema, con migliaia di fotogrammi da proiettare) che voglio scansionare frame by frame. Voglio modificare un proiettore sostituendo il motore con un motore passo passo e relativa cinghia/riduttore:
Arduino ha un controller (joystic) per controllare il motore passo passo. Se sposto la leva a sinistra il motorino gira antiorario (riavvolge), se sposto la leva a destra il motorino gira orario (avvolge), se invece clicco parte la procedura di scansione. Procedura che posso riassumere come:
a. Motore gira per un determinato numero di giri, poi si ferma, mettendo in posizione il fotogramma successivo;
b. Arduino dice alla reflex di scattare una foto;
c. --> torna ad a.
Finora sono riuscito a cablare il joystic ed il motore passo passo, e il fast forward e fast rewind funzionano (quindi se sposto la leva indietro il motore riavvolge e se sposto la leva avanti il motore avvolge).
Questo è il codice che uso:
/*
* TeleCine V0.2 - Joystick funzionante
*/
// Includo libreria Stepper
#include <Stepper.h>
// Definisco numero di passi per ogni giro
#define STEPS 32
// Definisco i pin dello stepper
#define IN1 11
#define IN2 10
#define IN3 9
#define IN4 8
// Inizializzo la libreria Stepper
Stepper stepper(STEPS, IN4, IN2, IN3, IN1);
// Joystic output connesso ad A0
#define joystick A0
void setup()
{
}
void loop()
{
// leggo il valore analogico dal potenziometro
int val = analogRead(joystick);
// se il joystick è a metà ferma il motore
if( (val > 500) && (val < 523) )
{
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
else
{
// muove il motore nella prima direzione
while (val >= 523)
{
// Mappa la velocità tra 5 e 500 rpm
int speed_ = map(val, 523, 1023, 5, 500);
// Setto la velocità del motore
stepper.setSpeed(speed_);
// Muovo il motore (1 step)
stepper.step(1);
val = analogRead(joystick);
}
// Muovo il motore nell'altra direzione
while (val <= 500)
{
// Mappa la velocità tra 5 e 500 rpm
int speed_ = map(val, 500, 0, 5, 500);
// set motor speed
stepper.setSpeed(speed_);
// Muovo il motore (1 step)
stepper.step(-1);
val = analogRead(joystick);
}
}
}
Uso Arduino Uno R3, preso da un kit che ho comprato su Amazon con una guida di base e diversi componenti, si chiama Elegoo Most Complete Starter Kit UNO R3 Project.
Adesso devo implementare la procedura che ho descritto prima.
Quindi:
Se clicco sul joystick (che a quanto ho capito ha il click come comando digitale, non analogico) parte la seguente routine:
- a. Il motore passo passo fa un giro in senso orario e si ferma (semplifichiamo ad un giro per adesso);
- b. Arduino dice alla reflex di scattare (va collegata con connettore minijack)
- c. torna ad a.
Se clicco di nuovo sul joystick la procedura si ferma.
Mi date per favore una mano ad implementare questa routine? Non riesco ad uscirne!
Grazie mille,
Nicola.