Porta scorrevole

Ciao ragazzi, chiedo scusa se ho fatto un quesito simile in hardware, ma la parte hardware e' conclusa, ora mi sorge un gran dubbio, ho una porta scorrevole, ma non so come creare il codice.
Cosa deve fare? Semplicemente quando rileva una variazione nella fotoresistenza/quando viene premuto un pulsante (ambo le cose per 2 secondi) quindi quando il segnale rimane high per 2 secondi, arduino deve dare corrente, quando non sara piu high deve togliare corrente , a che cosa, vi chiederete, dara' e togliera' corrente ad un relè DPDT che servira' ad invertire la rotazione, precisamente quando avra' corrente fara' spingere il motore in un senso viceversa quando non l'avra fara' spingere il motore in un altro. Qualcuno puo' aiutarmi?

Il programma è esattamente identico alla chiusura/apertura di un cancello elettrico.
Quindi devi avere

  • una uscita per accensione motore
  • una uscita per relè inversione
  • un ingresso fotocellula
  • un ingresso pulsante

Troverai diversi programmi in giro.

steve-cr:
Il programma è esattamente identico alla chiusura/apertura di un cancello elettrico.
Quindi devi avere

  • una uscita per accensione motore
  • una uscita per relè inversione
  • un ingresso fotocellula
  • un ingresso pulsante

Troverai diversi programmi in giro.

non proprio e ti dico il perche', io sto facendo un ascensore, quando arriva il piano devono passare 2 secondi e poi si deve aprire la porta, se la fotoresistenza non rileva la cabina per almeno 2 secondi le porte devono rimanere chiuse. In giro per internet non ho trovato nulla di simile e comunque non saprei come adattare un cancello in cui devi premere a mano il bottone per farlo aprire con il passaggio di una cabina per ascensore

mi sembra che quando parli di corrente e relè stai facendo riferimento all'utilizzo di alta tensione e non bassa o bassissima come previsto nel forum.. in attesa di tue delucidazioni io mi astengo... ::slight_smile:

miky_police:
mi sembra che quando parli di corrente e relè stai facendo riferimento all'utilizzo di alta tensione e non bassa o bassissima come previsto nel forum.. in attesa di tue delucidazioni io mi astengo... ::slight_smile:

... ed io attendo le sue spiegazioni !

Guglielmo

io sto facendo un ascensore, quando arriva il piano devono passare 2 secondi e poi si deve aprire la porta....

non spiega cosa solleverà questo ascensore, se è alimentato a 220v o a 18/24/36v. Diversamente se dobbiamo supporre che sia un motoriduttore il discorso cambia. pensavo che da regolamento non si può menzionare e/o utilizzare la 220v (io, un po tendo ad estremizzare il concetto forse, escludendo anche riferimenti non direttamente espliciti). Se questo 3d così postato non è contro regolamento, significa che mi sono posto un problema inutile. In caso chiedo venia.

miky_police:
non spiega cosa solleverà questo ascensore, se è alimentato a 220v o a 18/24/36v.

Difatti ho già detto che stò aspettando spiegazioni, perché se fosse un progetto con motori a 220V, chiuderei il thread, ma sino a quando l'OP NON ci da delucidazioni occorre solo attendere ed evitare illazioni.

Guglielmo

Scusa Guglielmo, pensavo che la mia affermazione fosse fuori luogo al mio post #3 e che la tua richiesta di delucidazioni fossero appunto rivolte a me e non all'op.. :smiley:

EDIT: rileggendo in effetti io mi astengo e tu attendi :smiley:

miky_police:
... e che la tua richiesta di delucidazioni fossero appunto rivolte a me e non all'op.. :smiley:

Ahi ahi ahi ... hai letto male ... :slight_smile:

gpb01:
... ed io attendo le sue spiegazioni !

Guglielmo

gpb01:
Ahi ahi ahi ... hai letto male ... :slight_smile:
Guglielmo

no scusate ragazzi forse non mi sono espresso correttamente, uso un h bridge per cambiare il senso di rotazione del motore, il tutto e' un progettino giocattolo, la cabina pesa si e no 20 grammi XD

Lo ha infatti detto anche nell'altro thread:

Salve a tutti ragazzi, sto facendo un mini ascensore, il problema e' che non ho idea di come fare le porte scorrevoli,

gtanix:
no scusate ragazzi forse non mi sono espresso correttamente, uso un h bridge per cambiare il senso di rotazione del motore, il tutto e' un progettino giocattolo, la cabina pesa si e no 20 grammi XD

Perfetto, nessun problema :slight_smile:

Guglielmo

quindi raga qualche altro consiglio?

#9 Perfetto!
#10 lo cercavo per risalire alla situazione iniziale, ma non lo trovavo. Grazie per il link!

Ps: penso che devi strutturare sull'utilizzo di millis() il tuo progetto. nel senso che esegui ciclicamente la lettura delle fotoresistenze e nel caso in cui leggono la presenza fissi il millis() della prima lettura, poi ciclicamente

 if (tempoPorta - millis() >= 2000) {
tempoPorta = millis();
//fai quello che devi
}

che ne dite di una cosa del genere?

void setup ()
{
  pinMode (7, OUTPUT); //fanno tutte e 3 parte di un motore infatti e' giusto un esempio
  pinMode (8, OUTPUT);
  pinMode (9, OUTPUT);

}

void loop ()
{
  if (tempoPorta - millis() >= 2000)
  {
    tempoPorta = millis();
    digitalWrite (8, HIGH);
    digitalWrite (7, LOW);
    digitalWrite (9, 30);
    delay (900);
    digitalWrite (7, HIGH);
    digitalWrite (8, LOW);
    digitalWrite (9, 100);
    delay (900);

  }
}

forse è meglio se fai

 if ( millis() - tempoPorta >= 2000)

e queste due righe, cosa dovrebbero fare ?

  digitalWrite (9, 30);
...........
  digitalWrite (9, 100);

brunello22:
forse è meglio se fai

 if ( millis() - tempoPorta >= 2000)

e queste due righe, cosa dovrebbero fare ?

  digitalWrite (9, 30);

...........
  digitalWrite (9, 100);

imposta la velocita' del motorino, l ho scritto diverso per fare una prova ma in realta' basta scriverlo una volta sola

Forse volevi scrivere analogWrite(9, 100 );

brunello22:
Forse volevi scrivere analogWrite(9, 100 );

si esatto scusami, comunque ci siamo quasi, purtroppo non ho modo di testare con millis perche non ho ancora le fotocellule, ma suppongo funzionino come un tasto, quindi non mi rimane che dire ad arduino: quando il tasto rimane premuto per 2 secondi apri e chiudi la porta una sola volta. purtroppo non saprei proprio come dirgli di farlo una sola volta e non saprei proprio come fare una cosa del genere
:

byte confronto ()
{
  boolean uguale = true;
for (byte val = HIGH);
{if ( millis() - tempoPorta >= 2000)
{
fai quello che devi fare
}

}
}

che ne dite?

Brunello grazie per la correzione tuo #15 su millis().
Svistona (gaffona) :smiley: