Timer ingranditore con Keypad

Discussioni sui vari accessori necessari in camera oscura (tank, termometri, marginatori, taglierine, focometri, timer, esposimetri, etc..)

Moderatore: etrusco

Avatar utente
DanieleLucarelli
guru
Messaggi: 1154
Iscritto il: 12/08/2010, 16:56
Reputation:
Località: Livorno
Contatta:

Re: Timerino... della serie: proviamoci anche noi.

Messaggio da DanieleLucarelli »

Appena finito questo ho già progettato:

- Film-ino = Sviluppatrice automatizzata motorizzata
- Stamp-ino = Timer per trattamento stampe con agitatore motorizzato e gestione sviluppo fattoriale.

All'inizio avevo pensato di utilizzare una sola scheda Arduino che a secoda di dove era collegata gestiva l'apparecchio ma non sono sicuro di farcela. Se ci riuscissi il prezzo della scheda sarebbe ammortizzato su più strumenti.

Daniele.

P.S.
Ho notato che tutti i progetti realizzati con Arduino hanno un nome che termina in INO e mi sono adeguato.

Sent from Etrusco's iPhone that I have stolen 5 minutes ago. B-) =))



Telegram Vieni a scoprire il canale telegram di analogica.it - tantissime offerte su materiale fotografico analogico nuovo ed usato Offerte materiale analogico


Avatar utente
franny71
superstar
Messaggi: 2635
Iscritto il: 21/11/2011, 12:53
Reputation:
Località: Anzio (RM)

Re: Timerino... della serie: proviamoci anche noi.

Messaggio da franny71 »

grande Daniele!
io non ci capisco una cioffola, ma sono contento per te e per altri utenti che si vorranno cimentare... ;)
Franco
il mio Flickr

Я родилась даже не узнал

Avatar utente
mjrndr
guru
Messaggi: 1261
Iscritto il: 21/06/2012, 10:19
Reputation:
Località: Bergamo

Re: R: Timerino... della serie: proviamoci anche noi.

Messaggio da mjrndr »

DanieleLucarelli ha scritto: Sent from Etrusco's iPhone that I have stolen 5 minutes ago. B-) =))
Era ora che qualcuno glielo rubasse :D :D :D

Sempre a farci pesare che lui ha un iphone e usa tapatalk :D :D

Ma la scritta "posso chiederti come ci hai trovato" la scrivi tutte le volte o ce l'hai in firma? :D :D


Andrea

Avatar utente
hUMANtORCH
guru
Messaggi: 328
Iscritto il: 28/10/2012, 17:38
Reputation:

Re: Timerino... della serie: proviamoci anche noi.

Messaggio da hUMANtORCH »

DanieleLucarelli ha scritto:Dimenticavo il video del prototipo appena abbozzato:

http://www.farefoto.net/appo4u/Timerino.avi

Notare la bellezza dell'accensione con la citazione del forum a scorrimento.

Notate che se impostato UP non si riesce a impostare il tempo e il timer scocciato ci ricorda che siamo in modalità UP.

Notate l'inserimento del tempo con ingresso da destra verso sinistra (per impostare 10 sec. e 5 dec. bisogna scrivere 105).
Io non vedo il video :(

Grande Idea :D
amo il mio opposto,il mio negativo,il mio veleno è il migliore dei miei antidoti....è sbagliato....è impossibile....ma è vero,è reale!


http://www.flickr.com/photos/_humantorch_/

http://500px.com/_hUMANtORCH_

luca_dega
superstar
Messaggi: 1506
Iscritto il: 17/11/2011, 13:34
Reputation:

Re: Timerino... della serie: proviamoci anche noi.

Messaggio da luca_dega »

hUMANtORCH ha scritto:
Io non vedo il video :(
scarica VLC media player: è A GRATIS e legge qualsiasi cosa, anche file danneggiati.

Avatar utente
etrusco
moderatore
Messaggi: 4657
Iscritto il: 08/12/2009, 12:16
Reputation:
Località: Viterbo
Contatta:

Re: Timerino... della serie: proviamoci anche noi.

Messaggio da etrusco »

Molto spiritosi ... Complimenti!




Etrusco.

Sent from 'cà nisciun è fess'
ImmaginePssss, Hei! ... Ti sei ricordato di registrare la tua camera oscura su darkroom locator?

pensando - offerte sconti

Avatar utente
DanieleLucarelli
guru
Messaggi: 1154
Iscritto il: 12/08/2010, 16:56
Reputation:
Località: Livorno
Contatta:

Re: Timerino... della serie: proviamoci anche noi.

Messaggio da DanieleLucarelli »

Finito ieri... pensavo fosse più difficile.


Oggi gitarella a Bologna... lunedì posto schemi, componenti.

Intanto il codice:

Codice: Seleziona tutto

#include <SoftwareSerial.h>
#include <Keypad.h>
SoftwareSerial Serial7Segment(2, 12); //RX pin, TX pin

// Costanti
const byte ROWS = 4; //4 righe
const byte COLS = 3; //3 colonne
//const byte ledPin = 13; //Pin a cui è collegato il LED
const byte buzPin = 9; //Pin a cui è collegato il Buzzer
const byte pedPin = 13; //Pin a cui è collegato il Pedale
const byte relPin = 10; //Pin a cui è collegato il Relé

//Variabili
int scroll = 300;
int ncifra = 0;
int tempo;
int appo_tempo;
long old_mil = 0;
long errlet = 0;
int buttonState = 0;         // Stato del pedale
int lastButtonState = LOW;     // Appoggio per lo stato precedente del pedale
boolean up = true;
boolean avviato = false;
boolean premuto = false;

char tempString[4]; //Appoggio per sprintf
char key;
char benvenuto[12] = {'A', 'N', 'A', 'L', 'O', 'G', 'I', 'C', 'A', '.', 'I', 'T'};
char keys[ROWS][COLS] = {  //Mappatura keypad
	{'1','2','3'},
	{'4','5','6'},
	{'7','8','9'},
	{'*','0','#'}
	};
byte rowPins[ROWS] = {5, 4, 3, 2}; //pin a cui sono connessi gli output di riga del keypad
byte colPins[COLS] = {8, 7, 6}; //pin a cui sono connessi gli output di colonna del keypad
	
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup() {
  Serial.begin(9600);
  Serial.println(">>> Debug attivo <<<");
//  pinMode(ledPin, OUTPUT);      // led pin in Output
  pinMode(buzPin, OUTPUT);      // Buzzer pin in Output
  pinMode(relPin, OUTPUT);      // Relé pin in Output
  pinMode(pedPin, INPUT);       // Pedale pin in Input

  // Setup 7SegmentDisplay
  Serial7Segment.begin(9600); //Connessione con il display via Seriale a 9600 bps
  Serial7Segment.write('v'); //Reset del display - si forza il cursore ad andare al primo carattere
  Serial7Segment.write(0x7A);  // Brightness control command
  Serial7Segment.write((byte) 16);  // dimmest value (must type-def 0)


  Serial7Segment.write('A');
  delay(scroll);
  Serial7Segment.write('N');
  delay(scroll);
  Serial7Segment.write('A');
  delay(scroll);
  Serial7Segment.write('L');
  delay(scroll);
  Serial7Segment.write('N');
  Serial7Segment.write('A');
  Serial7Segment.write('L');  
  Serial7Segment.write('O');
  delay(scroll);
  Serial7Segment.write('A');
  Serial7Segment.write('L');  
  Serial7Segment.write('O');
  Serial7Segment.write('G');
  delay(scroll);
  Serial7Segment.write('L');  
  Serial7Segment.write('O');
  Serial7Segment.write('G');
  Serial7Segment.write('I');
  delay(scroll);
  Serial7Segment.write('O');
  Serial7Segment.write('G');
  Serial7Segment.write('I');
  Serial7Segment.write('C');
  delay(scroll);
  Serial7Segment.write('G');
  Serial7Segment.write('I');
  Serial7Segment.write('C');
  Serial7Segment.write('A');
  Serial7Segment.write(0x77);
  Serial7Segment.write(0b00001000);
  delay(scroll);
  Serial7Segment.write('I');
  Serial7Segment.write('C');
  Serial7Segment.write('A');
  Serial7Segment.write(0x77);
  Serial7Segment.write(0b00000100);
  Serial7Segment.write('I');  
  delay(scroll);
  Serial7Segment.write('C');
  Serial7Segment.write('A');
  Serial7Segment.write(0x77);
  Serial7Segment.write(0b00000010);
  Serial7Segment.write('I');  
  Serial7Segment.write('T');
  delay(scroll);
  delay(scroll);
  delay(scroll);
  Serial7Segment.write('A');
  Serial7Segment.write(0x77);
  Serial7Segment.write(0b00000001);
  Serial7Segment.write('I');  
  Serial7Segment.write('T');
  Serial7Segment.write(' ');  
  delay(scroll);
  Serial7Segment.write(0x77);
  Serial7Segment.write(0b01000000);
  Serial7Segment.write('I');  
  Serial7Segment.write('T');
  Serial7Segment.write(' ');  
  Serial7Segment.write(' ');    
  delay(scroll);
  Serial7Segment.write('T');
  Serial7Segment.write(' ');  
  Serial7Segment.write(' ');    
  Serial7Segment.write('0');      
  delay(scroll);
  Serial7Segment.write(' ');  
  Serial7Segment.write(' ');    
  Serial7Segment.write('0');      
  Serial7Segment.write('0');      
  delay(scroll);
  Serial7Segment.write(' ');  
  Serial7Segment.write('0');    
  Serial7Segment.write('0');      
  Serial7Segment.write('0');      
  delay(scroll);
  reset();
  delay(scroll);
  delay(scroll);
  say_up();
  errlet = millis();
  digitalWrite(relPin, LOW); // Spengo il Relé
}

void loop() {
  
  
  if (millis() - errlet <= 100) {
    
  } else {
    
    buttonState = digitalRead(pedPin);
    
    if (buttonState != lastButtonState) {
              Serial.println("Cambio Stato");
   
      if (buttonState == LOW) {     
        // Il pedale ha cambiato stato ed è stato rilasciato scateno l'inferno
                Serial.println("Rilasciato");
  
        premuto = true; 
      }
    }
    
    lastButtonState = buttonState;  
    errlet = millis();
    
  }


  if (avviato) {
    if (premuto) {
      //Spengi e pausa il timer
      digitalWrite(relPin, LOW); // Spengo il Relé
      premuto = false; // Mi preparo ad una nuova pressione
      avviato = false; // Metto ad avviato lo stato
            
    } else {
      if (up) {
        conta_up();
      } else {
        conta_down();
      }
    }

  } else {
    if (premuto) {
      if (up) {
        digitalWrite(relPin, HIGH); // Accende il Relé
        premuto = false; // Mi preparo ad una nuova pressione
        avviato = true; // Metto ad avviato lo stato
        old_mil = millis(); // Azzero il parziale dei millisecondi
        conta_up(); 
      } else {
        if (tempo > 0) {
            digitalWrite(relPin, HIGH); // Accende il Relé
          }
          premuto = false; // Mi preparo ad una nuova pressione
          avviato = true; // Metto ad avviato lo stato
          old_mil = millis(); // Azzero il parziale dei millisecondi
          conta_down();
      }
    } else {
     // Leggi tastiera
     gest_key();
    }
  }
}

void conta_down() {
  if (tempo > 0) {
    if (millis() - old_mil >= 100) {
      old_mil = millis();
      tempo = tempo - 1;
      scrivi_tempo();
      if (tempo == 0) {
        digitalWrite(relPin, LOW); // Accende il Relé  
        avviato = false;
        tempo = appo_tempo;
        scrivi_tempo();
      }
      if (tempo%10 == 0) {
        beep(200, 50);
      }    
    }  
  }
}

void conta_up() {
  if (millis() - old_mil >= 100) {
    old_mil = millis();
    tempo = tempo + 1;
    scrivi_tempo();
    if (tempo%10 == 0) {
      beep(400, 50);
    }    
  }
}

void say_up(){
  Serial7Segment.write('v'); //Reset display
  Serial7Segment.write('U');
  Serial7Segment.write('p');
  Serial7Segment.write(' ');
  Serial7Segment.write(' ');
  up = true;
  beep(400, 200);
  delay(1000);
  reset();
}

void say_down(){
  Serial7Segment.write('v');
  Serial7Segment.write('D');
  Serial7Segment.write('o');
  Serial7Segment.write('u');  
  Serial7Segment.write('N');
  up = false;
  beep(200, 200);  
  delay(1000);
  reset();  
}

void reset() {
  Serial7Segment.write('0');  
  Serial7Segment.write('0');    
  Serial7Segment.write('0');      
  Serial7Segment.write('0');    
  Serial7Segment.write(0x77);
  Serial7Segment.write(0b00000100);
}

void beep(int nota, int durata){  //Funzione di beep devo tenere conto della durata???
  tone(buzPin, nota, durata);
}

void gest_key() {  
  key = keypad.getKey();
  if (key) {
    switch (key){
      case '#':  //Cambio modalità da Count-Up a Count-Down
         if (up){
          say_down();
          ncifra = 0;
          tempo = 0;
        } else {
          say_up();
          ncifra = 0;        
          tempo = 0;
        }
        break;
      case '*': // Reset
      reset();
        ncifra = 0;
        tempo = 0;
        break;
       default:
         if (up){
           say_up();
         } else {
           switch (ncifra) {
             case 0:
               tempo = tempo + (key-48);
               ncifra++;
               break;
             case 1:
               tempo = tempo * 10 + (key-48);
               ncifra++;
               break;
             case 2:
               tempo = tempo * 10 + (key-48);
               ncifra++;
               break;
             case 3:
               tempo = tempo * 10 + (key-48);
               ncifra++;
               break;
             default:
               // Non faccio nulla
               break;
           }
         }
         appo_tempo = tempo;
         scrivi_tempo();
         }
  }
}

void scrivi_tempo() {
//   Serial7Segment.write('v'); //Reset display
   Serial7Segment.write(0x77); //Codice per invio funzioni specifiche
   Serial7Segment.write(0b00000100); //Accendo la virgola per 1 cifra decimale
   sprintf(tempString, "%04i", tempo); //Converte il tempo in una striga con gli zeri in testa
   Serial7Segment.write(tempString); // Stampo il tempo
}

Avatar utente
isos1977
superstar
Messaggi: 1784
Iscritto il: 13/09/2011, 22:23
Reputation:
Località: Milano

Re: Timerino... della serie: proviamoci anche noi.

Messaggio da isos1977 »

Anch'io sto sviluppando un timer con Arduino!

la parte software è quasi finita (sto facendo gli ultimi ritocchi) e sto aspettando che arrivino gli ultimi pezzi per assemblare il circuiti stampato definitivo .

nel mio ci sono due funzioni:
-timer - con un tasto definisci gli incrementi (lineare di 1 secondo, 1 stop, 1/2 stop, 1/3, 1/6). ci sono due tasti per incrementare e decrementare il tempo e un bottone start/stop/focus
-cronometro. con il tasto start/stop parte e si arresta il tempo. alla pressione successiva si azzera e riparte

ho optato per un display lcd rosso.

appena ho finito, lo condivido (anche per avere suggerimenti...)
"Se il fotografo non vede, la macchina fotografica non lo farà per lui" - Kenro Izu

Avatar utente
DanieleLucarelli
guru
Messaggi: 1154
Iscritto il: 12/08/2010, 16:56
Reputation:
Località: Livorno
Contatta:

Re: Timerino... della serie: proviamoci anche noi.

Messaggio da DanieleLucarelli »

Ho aggiunto al primo post le specifiche tecniche.

Avatar utente
isos1977
superstar
Messaggi: 1784
Iscritto il: 13/09/2011, 22:23
Reputation:
Località: Milano

Re: Timerino... della serie: proviamoci anche noi.

Messaggio da isos1977 »

DanieleLucarelli ha scritto: Il bello di Arduino è che si programma attaccandolo USB al PC, il brutto è che costa uno sproposito.
Il bello di Arduino è che è tutto italiano, il brutto è che costa una cifra.

Il timer non sarà economico riuscite ad indovinare perché?
Attualmente siamo intorno ai 45Euro ma mi mancano ancora alcuni pezzetti...
Una scheda arduini costa un po'.. ma è anche vero che alla fine lo schema è molto semplice e sono pochi pezzi. Io il mio l'ho sviluppato con la scheda, ma ora sto facendo il prototipo assemblando anche i componenti base di arduino e il costo è decisamente inferiore.

Comunque anch'io sono sui 45 euro.. più che altro perchè ho utilizzato un relè a stato solido che costa parecchio... ma sulla 220V preferivo andare sul sicuro...

:-h
"Se il fotografo non vede, la macchina fotografica non lo farà per lui" - Kenro Izu

Telegram Vieni a scoprire il canale telegram di analogica.it - tantissime offerte su materiale fotografico analogico nuovo ed usato Offerte materiale analogico


Rispondi