Pages: 1 2 [3] 4   Go Down
Author Topic: Presentazione e domanda doppia alimentazione.  (Read 3594 times)
0 Members and 1 Guest are viewing this topic.
0
Online Online
Faraday Member
**
Karma: 47
Posts: 5955
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

yep  smiley
arigrazie
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Offline Offline
Newbie
*
Karma: 0
Posts: 28
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ottimo suggerimento Leo.
Comunque se MsTimer2 richiama una funzione seguendo la logica
MsTimer2::set(unsigned long ms, void (*f)())

anche la prima versione del tuo codice non era errata.
Bastava infatti richiamare la funzioneOrologio ogni 1000 ms, senza bisogno della variabile millisecondi:
MsTimer2::set(1000, funzioneOrologio);

mentre se si è interessati a tenere traccia anche dei millisecondi, si deve usare la seconda versione del codice, ma richiamandola ogni ms:
MsTimer2::set(1, funzioneOrologio);

Giusto?

Quindi ad una prima idea il codice che mi serve per attivare un servo ad una data ora (12:30:01) dovrebbe essere una cosa del tipo:
Code:
#include <MsTimer2.h>

byte secondi=0;
byte minuti=0;
byte ore=0;

void attivaServo() {
//    [...]  funzione che attiva il servo
}

void setup() {

  MsTimer2::set(1000, funzioneOrologio);
  MsTimer2::start();
}

void funzioneOrologio() {
    secondi++;
    if (secondi>59) {
      secondi=0;
      minuti++;
      if (minuti>59) {
        minuti=0;
        ore++;
        if (ore>23) {
          ore=0;       
      }
    }
  }
}

void loop() {
  if (ore == 12 && minuti == 30 && secondi == 1){
      attivaServo();
    }
 
}

sono al lavoro e non ho potuto testare quanto sopra smiley

Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 333
Posts: 22924
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Non ho mai usato la MsTimer2 (uso i timer a mano) per cui non sapevo che si potesse impostare anche il n° di millisecondi di intervallo.

Il tuo codice è quasi corretto, nel senso che devi mettere un check per controllare che il servo non sia attivato più volte, dato che la funzione loop verrà eseguita diverse volte prima che l'if non sia più vero (ossia prima che passi il secondo) e poi reimpostare a falso il check una volta che è passato l'orario dell'allarme, altrimenti la volta successiva non verrà eseguita.
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 28
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao ho finalmente finito il mio progetto e da una settimana funziona egregiamente erogando il cibo alla mia gatta  smiley.
Uniche 2 note negative, delle quali chiedo consiglio a voi:
come già dettomi nel 1° post, il servo motore anche da fermo rimane attivo, infatti ogni tanto (ogni minuto o due) sento un piccolo rumore di assestamento (immagino per tenere l'angolo che gli ho imposto) seppure effettivamente non rilevo movimenti sensibili.
C'è un modo per evitare che sia attraversato dalla corrente e che quindi rimanga "spento definitivamente" quando non è impiegato, per evitarmi rumuori e consumi inutili?

Per tenere conto del tempo impiego un codice con il meccanismo indicato da me 2 post addietro, tuttavia ho notato che ogni giorno il dispenser eroga circa 1 minuto e qualche secondo dopo l'orario impostato, quindi l'arduino ogni giorno "va avanti di un minuto", sapreste suggerirmi il motivo e nel caso una possibile soluzione?
Grazie
Logged

Milan, Italy
Offline Offline
Sr. Member
****
Karma: 0
Posts: 349
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao,
io di solito uso questo circuito, collegando l'alimentazione che dipende dalla rete elettrica al contatto normalmente aperto del rele, la pila al contatto normalmente chiuso del rele e l'arduino al contatto centrale, poi alimento la bobina del rele con l'alimentazione dipendente dalla rete e arduino prende l'alimentazione dalla 220, se manca la luce il rele cambia stato e arduino viene alimentato dalla pila.
ATTENZIONE quando parlo di tensione dipendente dalla rete intendo la 9/12 volt presa da un alimentatore non della tensione di rete a 220 volt che non va MAI collegata ad arduino.


* Senza titolo-1.jpg (18.61 KB, 459x510 - viewed 20 times.)
« Last Edit: October 26, 2011, 10:30:14 am by bigjohnson » Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 28
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie bigjohnson, quella parte l'avevo già risolta alimentando l'arduino con la pila dall'entrata USB  smiley

Per quanto riguarda:
Ciao ho finalmente finito il mio progetto e da una settimana funziona egregiamente erogando il cibo alla mia gatta  smiley.
Uniche 2 note negative, delle quali chiedo consiglio a voi:
come già dettomi nel 1° post, il servo motore anche da fermo rimane attivo, infatti ogni tanto (ogni minuto o due) sento un piccolo rumore di assestamento (immagino per tenere l'angolo che gli ho imposto) seppure effettivamente non rilevo movimenti sensibili.
C'è un modo per evitare che sia attraversato dalla corrente e che quindi rimanga "spento definitivamente" quando non è impiegato, per evitarmi rumuori e consumi inutili?

Per tenere conto del tempo impiego un codice con il meccanismo indicato da me 2 post addietro, tuttavia ho notato che ogni giorno il dispenser eroga circa 1 minuto e qualche secondo dopo l'orario impostato, quindi l'arduino ogni giorno "va avanti di un minuto", sapreste suggerirmi il motivo e nel caso una possibile soluzione?
Grazie

Nessuna idea?
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 333
Posts: 22924
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Puoi usare la swRTC, è una libreria che ho sviluppato per far tenere ad Arduino il tempo in maniera un po' precisa.
Siccome l'Arduino UNO usa un risonatore e non un cristallo vero e proprio, avrai delle differenze tra il tempo calcolato e quello reale ma la lib possiede una funzione per effettuare una correzione temporale per annullare questa differenza.
La trovi nel thread "swRTC" della prima pagina.
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 28
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie del suggerimento...proverò e ti saprò dire.

Per quanto riguarda invece il servo costantemente alimentato, forse potrei usare un relè che poco prima dell'erogazione del dispenser si attivi per alimentare il servo motore e si spenga togliendo corrente al servo una volta terminata l'erogazione...certo non è una soluzione molto egante, ma al momento non me ne sovvengono altre...
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 333
Posts: 22924
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma un semplice motorino DC non fa al caso tuo? D'altra parte si tratta di aprire uno sportellino, immagino: ti serve sapere di quanto lo sportellino è stato aperto? Sarà un'apertura a tempo, quindi basta che tu cronometri i secondi che vuoi lo sportellino stia aperto.

O mi sbaglio?
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 28
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

No, il meccanismo l'ho già fatto e funziona perfettamente e si basa su un disco che ruotando si riempie e poi girando dall'altra parte si svuota (ho allegato una foto)  smiley

Più che altro, il nuovo problema che ho notato è che la pila, pur essendo il dispenser sempre collegato alla 220V, si è scaricata.
Mi viene da pensare che quindi arduino non abbia escluso completamente l'alimentazione USB 5v(la pila) mentre contemporaneamente era collegata l'alimentare da rete (9v)


* DispenserCat.jpg (461.09 KB, 2081x2774 - viewed 17 times.)
« Last Edit: October 29, 2011, 03:59:12 am by Razzo82 » Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 333
Posts: 22924
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

1) vedo un LED infilato tra il pin 13 ed il pin GND. Errore! Serve una R di limitazione! La R che si dice esserci su quel pin è in realtà a servizio del piccolo led integrato sulla UNO, quello segnato con "L". E tale R+LED è su una linea parallela. Quindi, la R serve sempre.

2) il regolatore di tensione che è attaccato al jack "succhia" sempre qualcosina dalla batteria. Secondo me dovresti mettere un partitore di tensione a leggere la tensione in arrivo dall'alimentazione esterna ed un fotoaccoppiatore per staccare la batteria quando l'alimentazione primaria è presente.
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 28
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie mille, il led in realtà me l'ero scordato li da un altro progetto, in effetti non aveva alcuna utilità smiley .

Una curiosità, per togliere l'alimentazione al servo, ho pensato a vari metodi con i componenti che ho a disposizione, ma non sono esperto di elettronica potreste dirmi quale usare?
1) usare un transistor NPN BC547B come interruttore dei 9V per il servo (ma ho paura che il tranistor si bruci)
2) usare un transistor NPN BC547B per controllare l'induttanza del relè che a sua volta c/sollegherebbe il servo
3) usa un 1310-L298N (driver doppio full bridge per motori DC) ma mi pare uno spreco usare un driver doppio (e per una sola direzione)
4) altro?

grazie mille  smiley-cool
Logged

0
Online Online
Faraday Member
**
Karma: 47
Posts: 5955
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Leo lui si lamenta che si scarichi la batteria messa sulla USB, non sul jack. Al jack tiene l'alimentatore esterno.

Quindi in realta' non dovrebbe consumre perche' la UNO gia' prevede questo controllo con l'operazionale U1A

Metti in tester in serie alla pila e capiamo se veramente passa corrente e quanta ne passa
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 333
Posts: 22924
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ah, ok. I valori che ha messo mi hanno tratto in inganno. Poi parlava di USB... forse si riferisce al pin Vin?
Logged


0
Online Online
Faraday Member
**
Karma: 47
Posts: 5955
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

credo che si e' creato un connettore con la spina USB su una batteria, cosi' usa l'ingresso usb per la batteria di backup.
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Pages: 1 2 [3] 4   Go Up
Jump to: