Arduino Forum

International => Italiano => Generale => Topic started by: simonsdec on Mar 13, 2018, 01:11 pm

Title: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Mar 13, 2018, 01:11 pm
salve a tutti mi sono presentato in precedenza mi chiamo Simone e frequento il 5anno nell'istituto tecnico industriale itis volta di Roma.
Il mio obbiettivo per quest'anno è realizzare un'ascensore di 3 piani con l'utilizzo di arduino,girovagando per il web e per questo forum ho trovato un codice molto interessante ma non riesco a capire alcune funzioni,
potreste darmi una mano voi che siete più esperti in arduino stesso?
non vorrei realizzare un progetto senza la totale conoscenza di ciò che sto realizzando.
Inoltre vorrei andare a modificare il progetto stesso cercando di ampliarlo.... potreste darmi una mano?
grazie a tutti quelli che riusciranno a darmi dei consigli utili

Code: [Select]

#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>


//motore cabina
int avm = 13; // Motore marcia avanti
int inm = 12; // Motore marcia indietro

//motore porta cabina
int po = 11; // Apertura porte
int pc = 10; // Chiusura porte

//finecorsa
int fp4 = 9; // Finecorsa piano 4
int fp3 = 8; // Finecorsa piano 3
int fp2 = 7; // Finecorsa piano 2
int fp1 = 6; // Finecorsa piano 1

//tasti piano
int tp4 = 5; //Tasto piano 4
int tp3 = 4; //Tasto piano 3
int tp2 = 3; //Tasto piano 2
int tp1 = 2; //Tasto piano 1

//dichiaro variabili
int P = 0;
int PT = 0;
int c = 0;
int d = 1;
int e = 0;
int val1 = 0;    
int val2 = 0;    
int val3 = 0;
int val4 = 0;    
int val5 = 0;  
int val6 = 0;
int val7 = 0;    
int val8 = 0;    

String readString; //string
boolean LEDON = false; //LED status flag

void setup()
{
//configuarazione pin
pinMode(avm, OUTPUT);
pinMode(inm, OUTPUT);
pinMode(po, OUTPUT);
pinMode(pc, OUTPUT);
pinMode(fp4, INPUT);
pinMode(fp3, INPUT);
pinMode(fp2, INPUT);
pinMode(fp1, INPUT);
pinMode(tp4, INPUT);
pinMode(tp3, INPUT);
pinMode(tp2, INPUT);
pinMode(tp1, INPUT);
Serial.begin(9600);
}

void loop( )
{

//inizio programma


finecorsa:
val1 = digitalRead(fp1);  
val2 = digitalRead(fp2);  
val3 = digitalRead(fp3);  
val4 = digitalRead(fp4);
if (val1 == HIGH) {                 //controllo finecorsa piano 1
PT = 1 ;
goto pulsante;                      //si PIANO=1
}else if (val2 == HIGH) {           //controllo finecorsa PIANO=2
PT = 2 ;
goto pulsante;
}else if (val3 == HIGH) {
PT = 3 ;
goto pulsante;
}else if (val4 == HIGH) {
PT = 4 ;
goto pulsante;
}else
goto finecorsa;



//fine controllo piani

pulsante:
if (c == 0 && PT>0){
P = PT;
c = 1;
}else
val5 = digitalRead(tp1);  
val6 = digitalRead(tp2);  
val7 = digitalRead(tp3);  
val8 = digitalRead(tp4);
if (val5 == HIGH) {                   //controllo tasto piano 1
P = 1 ;
e = 1;
goto motore;                          //si PIANO=1
}else if (val6 == HIGH) {             //no controllo tasto PIANO=2
P = 2 ;
e = 1;
goto motore;
}else if (val7 == HIGH) {
P = 3 ;
e = 1;
goto motore;
}else if (val8 == HIGH) {
P = 4 ;
e = 1;
goto motore;
//fine controllo tasti piani
}


motore:                                 //avvio motore

if (P < PT) {                 //ascensore sotto alla destinazione
digitalWrite(avm, LOW);
digitalWrite(inm, HIGH);
d = 1;                            //cabina sale
goto porte;  
}else if (P > PT) {              //ascensore sopra alla destinzione
digitalWrite(inm, LOW);
digitalWrite(avm, HIGH);    //cabina scende
d = 1;    
goto porte;  
}else if (P == PT) {                    //ascensore a destination
digitalWrite(avm, LOW);                 //motore spento
digitalWrite(inm, LOW);
d = d+1;
goto porte;  
 }                    //fine avvio motore



porte: //apertura porte
if (d == 2 && e == 1) {  
digitalWrite(po, HIGH);
delay(500);  
digitalWrite(po, LOW);
delay(3000);        
digitalWrite(pc, HIGH);
delay(500);
digitalWrite(pc,  LOW);
delay(500);
e=0;
}else goto finecorsa;


}
Title: Re: realizzazione di un ascensore a 3 piani
Post by: gpb01 on Mar 13, 2018, 01:15 pm
Beh ... magari se metti il link al codice a cui ti riferische e spieghi un po' meglio le tue "pretese", magari qualcuno ti può anche aiutare, così ... non si sa nenache di quale codice stai parlando ...

Guglielmo
Title: Re: realizzazione di un ascensore a 3 piani
Post by: gpb01 on Mar 13, 2018, 01:22 pm
Ma il REGOLAMENTO (http://forum.arduino.cc/index.php?topic=149082.0) lo vogliamo leggere seriamente ? ? ?

In conformità al suddetto regolamento, punto 7, devi editare il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra). Grazie.

Guglielmo
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Mar 13, 2018, 01:51 pm
va bene così?

io non riesco a capire alcune funzioni :
String readString; //string
boolean LEDON = false; //LED status flag
ho cercato su internet ma non riesco a capire cosa stia a significare

goto pulsante; // non riesco a capire il significato
pulsante:

Code: [Select]

if (c == 0 && PT>0){
 P = PT;
 c = 1;
 }else
val5 = digitalRead(tp1);  
val6 = digitalRead(tp2);  
val7 = digitalRead(tp3);  
val8 = digitalRead(tp4);
if (val5 == HIGH) {                   //controllo tasto piano 1
P = 1 ;
e = 1;
goto motore;                          //si PIANO=1
}else if (val6 == HIGH) {             //no controllo tasto PIANO=2
P = 2 ;
e = 1;
goto motore;
}else if (val7 == HIGH) {
P = 3 ;
e = 1;
goto motore;
}else if (val8 == HIGH) {
P = 4 ;
e = 1;
goto motore;
//fine controllo tasti piani
}


motore:                                 //avvio motore

if (P < PT) {                 //ascensore sotto alla destinazione
digitalWrite(avm, LOW);
digitalWrite(inm, HIGH);
d = 1;                            //cabina sale
goto porte;  
}else if (P > PT) {              //ascensore sopra alla destinzione
digitalWrite(inm, LOW);
digitalWrite(avm, HIGH);    //cabina scende
d = 1;    
goto porte;  
}else if (P == PT) {                    //ascensore a destination
digitalWrite(avm, LOW);                 //motore spento
digitalWrite(inm, LOW);
d = d+1;
goto porte;  


anche questa parte non riesco a capirla......
Title: Re: realizzazione di un ascensore a 3 piani
Post by: gpb01 on Mar 13, 2018, 02:16 pm
Ma lo hai letto il mio post ? ? ? :o :o :o

DEVI EDITARE, a questo punto entrambi i tuoi post e mettere tutto il codice tra i tag CODE ... ovvero: [ code ] (senza gli spazi dentro) prima del codice e [ /code ] (sempre senza gli spazi) dopo il codice in modo che:

Code: [Select]
il codice sia racchiuso così

Guglielmo
Title: Re: realizzazione di un ascensore a 3 piani
Post by: krypton18 on Mar 13, 2018, 07:28 pm
Quote
non vorrei realizzare un progetto senza la totale conoscenza di ciò che sto realizzando
Se è questo il tuo proposito, ti consiglio innanzitutto di studiare i rudimenti del linguaggio C. L'ambiente di sviluppo di Arduino, oltre ad utilizzare le istruzioni e i tipi di dato standard dei linguaggi C/C++, ne utilizza anche di propri. Quindi, dopo aver appreso le basi della programmazione generica, dovresti consultare la reference di Arduino ogni volta che hai un dubbio su cosa sia un'istruzione e cosa fa.

https://www.arduino.cc/reference/en/ (https://www.arduino.cc/reference/en/)

Se il codice che hai postato corrisponde all'intero listato del programma, allora puoi sicuramente fare a meno delle seguenti istruzioni:

Quote
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
Queste sono librerie, ovvero "contenitori di funzioni" esterne, che nel tuo programma non vengono usate.

Quote
String readString; //string
Definisce la variabile readString che serve a memorizzare una stringa. Una stringa è un insieme di più caratteri, ad esempio "Hello World!" è una stringa e le "" sono il mezzo per indicarla all'interno del programma.

Quote
boolean LEDON = false; //LED status flag
Qui viene definita la variabile booleana LEDON. Variabili di questo tipo possono assumere solo i due stati binari: 1 o 0. True, False sono sinonimi rispettivamente delle due cifre citate.

Quote
goto pulsante; // non riesco a capire il significato
pulsante:
L'istruzione goto indica semplicemente al programma di saltare all'etichetta pulsante: specificata di seguito all'istruzione. Questo vuol dire che tutto il codice che si trova fra goto pulsante e pulsante: non viene eseguito, o come si dice in gergo viene "saltato".

Nella programmazione moderna il goto non viene più usato, anzi per meglio dire viene evitato come la peste e sostituito da costrutti iterativi quali sono il for e il while. Inoltre se usi tante variabili che hanno uno scopo simile, conviene raggrupparle in un array (vettore in italiano). Dato che alcune variabili nel tuo caso sono dei tasti, si verifica il fenomeno del "rimbalzo" ossia un treno di impulsi spuri nel momento in cui se ne preme uno e ciò può portare a risultati incongruenti, quindi occorre provvedere ad eliminarlo tramite tecniche software (esistono librerie Arduino apposta) oppure creare dei circuiti esterni cosiddetti di "antirimbalzo" a cui collegare il pulsante.

Però mi fermo qui, queste e tante altre nozioni di programmazione le devi apprendere tramite lo studio individuale.


Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Mar 14, 2018, 03:10 pm
allora provando a costruire un codice da 0
facciamo ad esempio ho 3 piani
piano 0 piano 1 piano 2
con la funzione if io devo andare a calcolare tutti i casi possibili di dove si possa trovare il piano giusto?
che tradotto in arduino sarebbe
Code: [Select]

//variabili
pt=0
pt1=0
pt2=0

if(pt=0)
pt=0
else if pt1=0
pt=0
else if pt2=0
pt=0//
oppure con la funzione switch/case

io vorrei dire al computer che l'ascensore deve stare al piano 0 e anche negli altri 2 casi l'ascensore deve rimanere al piano 0 ha senso quello che ho scritto dal punto di vista del codice=
Title: Re: realizzazione di un ascensore a 3 piani
Post by: krypton18 on Mar 14, 2018, 11:21 pm
allora provando a costruire un codice da 0
facciamo ad esempio ho 3 piani
piano 0 piano 1 piano 2
con la funzione if io devo andare a calcolare tutti i casi possibili di dove si possa trovare il piano giusto?
che tradotto in arduino sarebbe
Code: [Select]

//variabili
pt=0
pt1=0
pt2=0

if(pt=0)
pt=0
else if pt1=0
pt=0
else if pt2=0
pt=0//
oppure con la funzione switch/case

io vorrei dire al computer che l'ascensore deve stare al piano 0 e anche negli altri 2 casi l'ascensore deve rimanere al piano 0 ha senso quello che ho scritto dal punto di vista del codice=

Prima di scrivere una singola riga di codice, devi definire chiaramente, a livello logico, il funzionamento dell'automazione dell'ascensore.
Detto in parole povere, è necessario che elabori un progetto su carta (o su file di testo) di quello che vuoi fare.
Se tu per primo non hai bene in mente il quadro generale del progetto, come farai a spiegarlo ad altri nei dettagli o anche solo a realizzare qualcosa di sensato e su cui hai pieno controllo?
Pertanto mi permetto di consigliarti quanto segue:

1 - Scrivi un elenco delle operazioni che deve eseguire l'automazione.

Esempio:

   a- L'utente preme in alternativa uno dei tre pulsanti A, B, C, ne viene memorizzata la premuta, e si accende la spia di prenotazione
   b- E' stato premuto un tasto? Se sì continua, altrimenti rimani in attesa di prenotazione.
   c- L'ascensore è fermo e frenato, c'è una sola prenotazione in corso, e si trova ad uno qualsiasi dei 3 piani (finecorsa di un qualunque piano =1)?
   d- Se sì, continua. Altrimenti segnala malfunzionamento con una spia rossa e spegni la spia di prenotazione (memorizzazione azzerata). Una volta risolto il guasto premi il tasto di RESET, spegni la spia rossa, e torna al punto a.
   e- Si chiude la porta della cabina, il freno viene disazionato, e viene comandata la salita o la discesa dell'ascensore al piano prenotato
   f- La cabina è arrivata a destinazione entro il tempo di Timeout (fincorsa del piano prenotato =1)?
   g- Se sì, continua. Altrimenti segnala malfunzionamento con una spia rossa e spegni la spia di prenotazione (memorizzazione azzerata). Una volta risolto il guasto premi il tasto di RESET, spegni la spia rossa, e torna al punto a.
   h- Quando il finecorsa del piano in cui è stata effettuata la prenotazione è =1, aziona il freno e dopo un tempo di assestamento apri le porte. Infine azzera la memorizzazione della premuta e spegni la spia di prenotazione.
   - ecc. ecc.

Se ti viene più comodo, puoi fare un diagramma di flusso per rappresentare la sequenza succitata.

Attenzione: l'esempio l'ho scritto a braccio cioè senza rifletterci troppo, non è completo, e potrebbero esserci degli errori o delle mancanze. Quindi spetta a te completarlo e aggiungere eventuali condizioni di sicurezza o altre funzioni che diano un valore aggiunto al progetto (ulteriori lampadine, luci di illuminazione, sirene, ecc.).

2 - Definisci gli ingressi (pulsanti, finecorsa) e le uscite (motore di salita/discesa, spie luminose) che collegherai.
3 - Prevedi un pulsante di emergenza (estop) per bloccare il movimento dell'ascensore in caso di problemi. Il pulsante deve essere un connessione hardware esterna alla logica dell'Arduino, serve principalmente a togliere alimentazione ai motori per fermarli.
3 - Disegna uno schema elettrico di collegamenti all'Arduino
4 - Con lo schema elettrico sotto mano svolgi i necessari cablaggi
5 - Crea un prototipo dell'automazione dell'ascensore
6 - Scrivi il programma e caricalo nell'Arduino
7 - Verifica in tutti i modi possibili che il programma funzioni come hai previsto e se trovi errori logici, correggili (fase di debug)

Usa nomi esplicativi per descrivere le variabili utilizzate nel programma. Per esempio, le spie luminose potrebbero essere chiamate con nomi del tipo: SpiaPrenotazPiano, SpiaRossaEstop.
Commenta il più possibile il programma usando i commenti inline, cioè commenti che si possono applicare sulla stessa riga in cui è scritta un'istruzione.
int pippo;       //Tutto ciò che si trova dopo le due barre è un commento
I commenti ti aiutano anche a ricordare a distanza di tempo il significato del codice che hai scritto. Poi se vuoi presentare il progetto come tesina di fine anno, beh direi che è superfluo dire che aiutano una persona esterna ad avere un'idea di quello che fanno le istruzioni.

Per il resto di quello che chiedi, ti dico onestamente che ci ho capito poco.  Dovresti per favore, e non prenderla come una critica o un rimprovero, sforzarti di spiegarti meglio e in un italiano comprensibile.

Il programma che hai postato contiene gravi errori di sintassi e concettualmente non ha granché significato. Perché tre tasti diversi devono far arrivare l'ascensore a un solo piano?  Cioè una volta che arrivi a quel piano vuol dire che l'ascensore non si muove più, che senso ha?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Mar 15, 2018, 10:44 pm
Allora io sto cercando di sviluppare piano piano un codice che mi faccia funzionare un ascensore di 2 piani 0-1-2 ,con l'utilizzo di un motore passo passo dei fine corsa apertura/chiusura porte /tasti piano
Non ho ben chiaro però come strutturare tutto ciò anche la composizione del flowchart mi risulta complicata,non riesco a focalizzare ciò che mi serve realizzare.
Come posso sviluppare un codice di questo genere? Mi puoi aiutare a farmi uno schema mentale o una bozza per capire da dove cominciare ?
Ho una grande confusione su come si possa realizzare un codice di questo tipo.
Conosco discretamente le funzioni if else....for..... ma ho difficoltà nel metterle in pratica a e nel capire come e quando vanno sfruttate....
Grazie del tempo dedicato nella risposta in precedenza,questa mia difficoltà di esprimermi dipende sicuramente dalle difficoltà che sto avendo questi giorni per provare a costruire una bozza del codice senza riuscirci
Title: Re: realizzazione di un ascensore a 3 piani
Post by: fratt on Mar 15, 2018, 11:13 pm
Anche a me dai l'idea di non avere le idee chiare...
Come dice krypton18, puoi cominciare con uno schema logico e poi passare al codice. Lui ti ha già dato un esempio, forse anche troppo dettagliato.
Credo tu sappia come funziona un ascensore. Prova a descrivere il funzionamento in italiano. Sarà la tua base di partenza.

Ps leggendo varie discussioni qui sul forum ho visto che l'ascensore è un progetto abbastanza diffuso per la maturità... Vedi se trovi qualcuna di quelle discussioni e prendi spunto.
Title: Re: realizzazione di un ascensore a 3 piani
Post by: krypton18 on Mar 16, 2018, 01:31 am
Quote
Non ho ben chiaro però come strutturare tutto ciò anche la composizione del flowchart mi risulta complicata,non riesco a focalizzare ciò che mi serve realizzare.
Intanto devi capire a cosa serve un diagramma di flusso e cosa rappresenta.
Un diagramma di flusso idealmente serve a descrivere in forma grafica un problema in tutte le sue sfaccettature, con particolare enfasi sul metodo di risoluzione dello stesso. La programmazione, qualunque linguaggio tu stia usando, è il metodo pratico per realizzare ciò che è stato pianificato nel diagramma di flusso.
Allora, devi partire dal presupposto che ad ogni  """struttura""" del linguaggio C (if-else, switch-case, do-while,while, for) si può far corrispondere un blocco grafico del diagramma di flusso. Quindi una volta che definisci il tuo diagramma di flusso, non devi far altro che pensare a tradurre ciascun blocco nelle sue equivalenti istruzioni di codice. L'importante è focalizzare il concetto della corrispondenza (quasi) univoca fra il programma e la sua rappresentazione grafica.
Quote
Come posso sviluppare un codice di questo genere? Mi puoi aiutare a farmi uno schema mentale o una bozza per capire da dove cominciare ?
Ho una grande confusione su come si possa realizzare un codice di questo tipo.
Conosco discretamente le funzioni if else....for..... ma ho difficoltà nel metterle in pratica a e nel capire come e quando vanno sfruttate....
Descrizione veloce dei blocchi grafici che compongono un diagramma di flusso ed esempio di come descrivere un problema:
https://it.wikiversity.org/wiki/Diagrammi_di_Flusso_(superiori) (https://it.wikiversity.org/wiki/Diagrammi_di_Flusso_(superiori))
Per quanto riguarda la codifica in istruzioni dei blocchi grafici di un diagramma di flusso, questi due documenti, che puoi scaricare al seguente indirizzo: http://staff.polito.it/claudio.fornaro/CorsoC (http://staff.polito.it/claudio.fornaro/CorsoC), sono particolarmente utili da leggere: Strutture di selezione e Strutture iterative

Nei documenti succitati vedi per esempio come si rappresenta un'istruzione if-else in forma grafica.

Prova a studiare quelle guide e vedi se riesci autonomamente a trovare un punto di partenza, poi se hai dubbi proviamo a chiarirli. Come ti ho detto in precedenza devi definire per filo e per segno il funzionamento dell'automazione, il codice è l'ultima cosa a cui devi pensare. Io per ora ti ho indicato due metodi per descrivere il problema e la sua soluzione:
1- Elencare in modo scritto la sequenza delle operazioni da effettuare
2- Disegnare un diagramma di flusso che rappresenta la sequenza delle operazioni da effettuare

Scegli uno dei due metodi e poi pensa a come trasformarlo in codice.
Probabilmente, siccome sei alle prime armi, ti conviene fare un diagramma di flusso perché ti aiuta meglio a capire il flusso di esecuzione del programma.

Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Mar 16, 2018, 04:19 pm
ho letto tutti i vostri messaggi e sto provando a scrivere qualcosa mo ho grandi dubbi
porgo un esempio
3 tasti 0-1-2
premo il tasto 1, rileva la posizione attuale del ascensore(chi svolge quest'azione)??
sali o scendi a seconda della posizione nell'istante prima della pressione del tasto memorizzata del ascensore
attiva il led di prenotazione e una volta arrivato al piano apri porta e accendi il led verde che indica che l'ascensore sta al piano e spengi quello rosso
riesco ad esprimere tutto quello che ho detto secondo un codice?
come riesco a rilevare la posizione del'ascensore ?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: brunello22 on Mar 16, 2018, 06:38 pm
Quote
come riesco a rilevare la posizione del'ascensore ?
Collegando fisicamente un sensore di fine corsa  ( pulsante a levetta, ottico, magnetico, etc etc )

Ad esempio, collegandone solo uno quando è al piano zero, dovresti tutte le volte che accendi Arduino ( o che viene resettato) far girare il motore in discesa , fino a che non scatta il sensore.
Cosi sai che sei al piano zero  e poi durante il normale lavoro hai comunque delle variabili che ti dicono a che piano si trova

Oppure ne metti uno per piano, cosi' sai subito dove si trova. E all'accensione controlli se uno dei sensori è premuto, e se non lo è nessuno, muovi il motore fino a che non scatta uno di essi
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Mar 17, 2018, 03:00 pm
si penso di metterne uno per ogni piano
quindi pensavo di progettarlo così
ho 3 finecorsa, se il finecorsa 1 è spinto (high) ho rilevato la posizione del ascensore invece nel caso in cui  non è spinto nessuno switch facciamo caso che l'ascensore non stia a nessun piano in base al pulsante spinto
0-1-2 sali o scendi dalla sua posizione attuale
quindi riassumendo
riesco a comandare ciò che sto dicendo con la funzioni if else?
ed in più gli progetto insieme il comportamento del led bicolore giusto?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: krypton18 on Mar 17, 2018, 03:46 pm
si penso di metterne uno per ogni piano
quindi pensavo di progettarlo così
ho 3 finecorsa, se il finecorsa 1 è spinto (high) ho rilevato la posizione del ascensore invece nel caso in cui  non è spinto nessuno switch facciamo caso che l'ascensore non stia a nessun piano in base al pulsante spinto
0-1-2 sali o scendi dalla sua posizione attuale
quindi riassumendo
riesco a comandare ciò che sto dicendo con la funzioni if else?
ed in più gli progetto insieme il comportamento del led bicolore giusto?
Ma almeno li hai letti i miei messaggi con annesse spiegazioni?
Sicuramente la maggior parte delle istruzioni consisteranno in istruzioni di selezione (if-else), ma questo non significa che qualche istruzione di ripetizione (while, for) non potrà rivelarsi necessaria.
Comunque te lo dico chiaramente, finché TU DA SOLO non ti fai uno schema di come devi realizzare il progetto, farai molta fatica ad ottenere risultati.
Come minimo fai un diagramma di flusso e postalo nella discussione, sennò è inutile stare a discutere sul nulla.
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Claudio_FF on Mar 17, 2018, 08:48 pm
Quote from: simonsdec
riesco a comandare ciò che sto dicendo con la funzioni if else?
Quello che si fa normalmente è questo:

Detto questo sono da decidere:

Tutto questo si fa con if/else e variabili usate opportunamente (come indicatori di stato, contatori ecc)

Il funzionamento/avanzamento del sistema è formato dalla continua rapida ripetizione di tutti i punti detti.

Se oltre a questo c'è anche da tenere conto del trascorrere del tempo (o si devono realizzare temporizzazioni), in ordine di precisione crescente si possono usare:
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Mar 18, 2018, 05:51 pm
ho fatto un flowchart tramite un'applicazione di windows ma non riesco a girarvelo provo a riassumervelo qui:

                   LOW         PulsantPiano0          HIGH
                  ATTENDI                                  Rileva la posizione del ascensore
                                                            piano0               piano1                      piano2
                                                              end                  sali di tot passi          sali di tot passix2
                                                                                           end                          end

quello che voglio che il mio sistema faccia è nel caso si spinga il pulspiano0 deve rilevare subito la posizione del ascensore,in base ai 3 finecorsa una volta rilevata grazie ai passi del motore passo passo che comanderò con la funzione stepper.h gli dirò di andare al piano0 sempre dallo stato memorizzato prima della spinta del pulsante .
Quindi poi per progettare dovrò capire bene quanti giri del mio motore servano per far arrivare al piano l'ascensore
è buona come idea???
in più penso di aggiungere i 2 led bicolori
Title: Re: realizzazione di un ascensore a 3 piani
Post by: brunello22 on Mar 18, 2018, 06:16 pm
Quote
dovrò capire bene quanti giri del mio motore servano per far arrivare al piano l'ascensore
è buona come idea???
A parte il fatto che non serve uno Stepper, ma basta un semplice motore DC possibilmente con riduttore......

Che te ne importa di sapere quanti step deve fare........  hai dei sensori di finecorsa per ogni piano, quindi fai avanzare il motore fino a che non scatta il finecorsa
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Mar 18, 2018, 06:17 pm
con il motore dc non riesco a capire come farlo avanzare.... mi sembrava più semplice l'utilizzo dello stepper mettendo tutti i casi possibili che mi dava il finecorsa e i pulsanti
pensi che mi complico la vita?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Mar 21, 2018, 06:55 pm
ragazzi mi serve il vostro aiuto avrei un paio di problemi con lo stepper
1) come imposto la massima velocità del motore passo passo? ho provato vari setting dagli esempi ma sembra abbastanza lento... consigli?
2) come gli dico di fermarsi ? Ogni volta mi tocca staccare il cavo usb sennò
Title: Re: realizzazione di un ascensore a 3 piani
Post by: brunello22 on Mar 21, 2018, 07:05 pm
Se non alleghi lo sketch la vedo dura risponderti

Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Mar 21, 2018, 07:07 pm
Code: [Select]

/*
 * MotorKnob
 *
 * A stepper motor follows the turns of a potentiometer
 * (or other sensor) on analog input 0.
 *
 * http://www.arduino.cc/en/Reference/Stepper
 * This example code is in the public domain.
 */

#include <Stepper.h>

// change this to the number of steps on your motor
#define STEPS 100

// create an instance of the stepper class, specifying
// the number of steps of the motor and the pins it's
// attached to
Stepper stepper(STEPS, 8, 9, 10, 11);

// the previous reading from the analog input
int previous = 0;

void setup() {
  // set the speed of the motor to 30 RPMs
  stepper.setSpeed(30); //questo valore solitamente lo metto a 100
}

void loop() {
  // get the sensor value
  int val = analogRead(0);

  // move a number of steps equal to the change in the
  // sensor reading
  stepper.step(val - previous);

  // remember the previous value of the sensor
  previous = val;
}
Title: Re: realizzazione di un ascensore a 3 piani
Post by: brunello22 on Mar 21, 2018, 07:13 pm
Ma che motore hai ?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Mar 21, 2018, 07:15 pm
ho uno step motor da 5v
fa circa 35 giri al minuto e ho visto un video su youtube che lo fa girare al max e penso vada minimo al doppio del mio
altra cosa un led dei 4 sul driver non si accende nonostante sia collegato.... speriamo non si sia fulminata una delle 4 bobine
Title: Re: realizzazione di un ascensore a 3 piani
Post by: brunello22 on Mar 21, 2018, 07:22 pm
Ah, ho capito quale stepper hai.....

qui trovi tutto quello che c'è da sapere  , anche il fatto che hai definito male i pin
  https://arduino-info.wikispaces.com/SmallSteppers
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Mar 21, 2018, 07:31 pm
grazie mille risolto il problema va alla grande!
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Mar 31, 2018, 04:21 pm
ragazzi ho provato a fare uno sketch ma non mi sente il motore
secondo voi per quale motivo?
questo è il codice
Code: [Select]

#include <Stepper.h>
//---------------------------------------------------COLLEGAMENTI-----------------------------------------------//
int pulsante0pin=1;
int pulsante1pin=2;
int pulsante2pin=3;
int microswitch0=4;
int microswitch1=5;
int microswitch2=6;
//--------------------------------------------------- VARIABILI LED----------------------------------------------//
int LED_PT_R=14;
int LED_PT_V=15;
int LED_P1_R=16;
int LED_P1_V=17;
int LED_P2_R=18;
int LED_P2_V=19;
//--------------------------------------------------VARIABILI PER PULSANTI--------------------------------------//
int val0=0;
int val1=0;
int val2=0;
//--------------------------------------------------VARIABILI E PASSI DEL MOTORE---------------------------------//
int Steps2Take;
#define StepsPerMotorRevolution 32
#define StepsdaZeroaDue 94*94
#define StepsdaZeroaUno 68*68
#define StepsdaUnoaDue  64*64
Stepper small_stepper(StepsPerMotorRevolution,8,9,10,11);
//=================================================================================================================
void setup() {

pinMode(pulsante0pin,INPUT);
pinMode(pulsante1pin,INPUT);
pinMode(pulsante2pin,INPUT);
pinMode(microswitch0,INPUT);
pinMode(microswitch1,INPUT);
pinMode(microswitch2,INPUT);
pinMode(LED_PT_R,OUTPUT);
pinMode(LED_PT_V,OUTPUT);
pinMode(LED_P1_R,OUTPUT);
pinMode(LED_P1_V,OUTPUT);
pinMode(LED_P2_R,OUTPUT);
pinMode(LED_P2_V,OUTPUT);
Serial.begin(9600);
StepMotor.setSpeed(10);
//=================================================================================================================
}
/*costruzione dei blocchi if else in modo tale che l'ascensore arrivi nel piano desiderato*/
void loop () {
val0 = digitalRead(pulsante0pin); // caso in cui l'ascensore si trova al piano 1 e deve andare al piano 0
if ((val0 == HIGH) && (microswitch1 == HIGH)) { // se il pulsante piano0 è spinto ed è spinto anche il microswitch piano 1 l'ascensore dovrà scendere di tot passi
  Steps2Take = -StepsdaUnoaDue; //ascensore scendi di 64x64 passi
  small_stepper.setSpeed(700);//alla velocità di 700
}
else if ((val0 == LOW) && (microswitch1 == HIGH)) {
  small_stepper.setSpeed(0);
  delay(5000);
}
if ((val0 == HIGH) && (microswitch2 == HIGH)) {
   Steps2Take =  -StepsdaZeroaDue;
   small_stepper.setSpeed(700);
}
else if ((val0 == LOW) && (microswitch2 == HIGH)) {
  small_stepper.setSpeed(0);
  delay(5000);
}
if ((val0 == HIGH) && (microswitch0 == HIGH)) {
  delay(10000);
  small_stepper.setSpeed(0);
}
if ((val0 == LOW) && (microswitch0 == HIGH)) {
  delay(10000);
  small_stepper.setSpeed(0);
}
val1 = digitalRead(pulsante1pin);
if ((val1 == HIGH) && (microswitch0 == HIGH)) {
  Steps2Take = StepsdaZeroaUno; //salita 0-1
  small_stepper.setSpeed(700);
}
else if ((val1 == LOW) && (microswitch0 == HIGH)) {
  delay(10000);
  small_stepper.setSpeed(0);
}
if ((val1 == HIGH) && (microswitch2 == HIGH)) {
  Steps2Take = -StepsdaUnoaDue; //scendi da 2 a 1
  small_stepper.setSpeed(700);
}
else if  ((val1 == LOW) && (microswitch2 == HIGH)) {
  delay(10000);
  small_stepper.setSpeed(0);
}
if ((val1 == HIGH) && (microswitch1 == HIGH)) {
  delay(10000);
  small_stepper.setSpeed(0);
}
else if ((val1 == HIGH) && (microswitch1 == HIGH)) {
  delay(10000);
  small_stepper.setSpeed(0);
}
val2 = digitalRead(pulsante2pin);
if ((val2 == HIGH) && (microswitch0 == HIGH)) {
  Steps2Take = StepsdaZeroaDue; //salire da 0 a 2 
  small_stepper.setSpeed(700); 
}
else if ((val2 == LOW) && (microswitch0 == HIGH)) {
  delay(10000);
  small_stepper.setSpeed(0);
}
if ((val2 == HIGH) && (microswitch1 == HIGH)) {
   Steps2Take = StepsdaUnoaDue; //sali dal piano 1 al piano 2
   small_stepper.setSpeed(700);
}
else if ((val2 == LOW) && (microswitch1 == HIGH)) {
  delay(10000);
  small_stepper.setSpeed(0);
}
if ((val2 == HIGH) && (microswitch2 == HIGH)) {
delay(10000);
  small_stepper.setSpeed(0);
}
if ((val2 == LOW) && (microswitch2 == HIGH)) {
delay(10000);
  small_stepper.setSpeed(0);
}
Title: Re: realizzazione di un ascensore a 3 piani
Post by: brunello22 on Mar 31, 2018, 06:03 pm
perchè vedo solo

Code: [Select]
small_stepper.setSpeed(700);


dopo manca il codice per muovere lo stepper, ad esempio

Code: [Select]
small_stepper.step(Steps2Take);


Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Mar 31, 2018, 06:29 pm
si avevo notato prima di leggere il tuo messaggio che mancava il corrispettivo pezzo del codice,
aggiungendolo a tutte le mie condizioni noto che stranamente il motore non accenna ad accendersi mentre con altri pezzi di codice ad esempio quello che mi hai postato tu giorni fa va tranquillamente....il che mi fa pensare che non senta per niente ne pulsante ne microswitch e così facendo non accende il motore....possibile?
Anche se il cablaggio l'ho ricontrollato più volte ma niente
Title: Re: realizzazione di un ascensore a 3 piani
Post by: brunello22 on Mar 31, 2018, 06:50 pm
cominciamo dall'inizio


Code: [Select]
if ((val0 == HIGH) && (microswitch1 == HIGH)) {

Questo, come tutti gli altri devono diventare


Code: [Select]
if ((val0 == HIGH) && ( digitalRead (microswitch1) == HIGH)) {
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Apr 20, 2018, 12:03 pm
ho provato a riscrivere il codice pensando che il problema fosse il confronto dei 2 switch e micros quando invece dovevo confrontarne 3 alla volta.
Adesso noto che l'ascensore non fa niente
esegue solo senza nessuna pressione del pulsante dal micros1(piano1) va al piano 2 e poi si mette con i due Led accesi in attesa non facendo niente per nessun pulsante
dove può stare il problema ?

Code: [Select]

#include <Stepper.h>
//---------------------------------------------------COLLEGAMENTI-----------------------------------------------//
int pulsante0pin=1;
int pulsante1pin=2;
int pulsante2pin=3;
int microswitch0=4;
int microswitch1=5;
int microswitch2=6;
//--------------------------------------------------- VARIABILI LED----------------------------------------------//
int LED_PT_R=14;
int LED_PT_V=15;
int LED_P1_R=16;
int LED_P1_V=17;
int LED_P2_R=18;
int LED_P2_V=19;


//--------------------------------------------------VARIABILI E PASSI DEL MOTORE---------------------------------//
int Steps2Take;
int Steps3Take;
int Steps4Take;
#define StepsPerMotorRevolution 32
#define StepsdaZeroaDue 94*94
#define StepsdaZeroaUno 68*68
#define StepsdaUnoaDue  64*64
Stepper small_stepper(StepsPerMotorRevolution,8,10,9,11);
//=================================================================================================================
void setup() {

pinMode(pulsante0pin,INPUT);
pinMode(pulsante1pin,INPUT);
pinMode(pulsante2pin,INPUT);
pinMode(microswitch0,INPUT);
pinMode(microswitch1,INPUT);
pinMode(microswitch2,INPUT);
pinMode(LED_PT_R,OUTPUT);
pinMode(LED_PT_V,OUTPUT);
pinMode(LED_P1_R,OUTPUT);
pinMode(LED_P1_V,OUTPUT);
pinMode(LED_P2_R,OUTPUT);
pinMode(LED_P2_V,OUTPUT);
Serial.begin(9600);

//==================================================PT===============================================================
}
void loop () {
  if (digitalRead(4) == HIGH && digitalRead(5) == LOW && digitalRead(6) == LOW) //STATO SWITCH PIANO 0
  {
  digitalWrite(LED_PT_R,LOW); digitalWrite(LED_PT_V,HIGH);//PT LED VERDE ACCESO LED ROSSO SPENTO
  digitalWrite(LED_P1_R,HIGH);digitalWrite(LED_P1_R,LOW);//P1 LED VERDE SPENTO LED ROSSO ACCESO
  digitalWrite(LED_P2_R,HIGH);digitalWrite(LED_P2_V,LOW);//P2 LED VERDE SPENTO LED ROSSO ACCESO
 
   //===============================================================================================================

 if(digitalRead(1) == HIGH && digitalRead(2) == LOW && digitalRead(3) == LOW) //CHIAMATA PT
 {
  digitalWrite(LED_PT_R,LOW); digitalWrite(LED_PT_V,HIGH);//PT LED VERDE ACCESO LED ROSSO SPENTO
  digitalWrite(LED_P1_R,HIGH);digitalWrite(LED_P1_R,LOW);//P1 LED VERDE SPENTO LED ROSSO ACCESO
  digitalWrite(LED_P2_R,HIGH);digitalWrite(LED_P2_V,LOW);//P2 LED VERDE SPENTO LED ROSSO ACCESO
  delay (1000); // NON FARE NIENTE E ATTENDI IL PASSO SUCCESSIVO
 }
 
 }
//=================================================================================================================
else if (digitalRead(1) == LOW && digitalRead(2) == HIGH && digitalRead(3) == LOW)//CHIAMATA P1
{
  digitalWrite(LED_PT_R,HIGH); digitalWrite(LED_PT_V,LOW);//PT LED VERDE SPENTO LED ROSSO ACCESO
  digitalWrite(LED_P1_R,HIGH);digitalWrite(LED_P1_R,LOW);//P1 LED VERDE SPENTO LED ROSSO ACCESO
  digitalWrite(LED_P2_R,HIGH);digitalWrite(LED_P2_V,LOW);//P2 LED VERDE SPENTO LED ROSSO ACCESO
 
Steps2Take = StepsdaZeroaUno; // FAI 68*68 PASSI ORARIO
small_stepper.setSpeed(700);   
small_stepper.step(Steps2Take);
digitalWrite(LED_P1_R,LOW);digitalWrite(LED_P1_R,HIGH);//ARRIVATO AL PIANO 1 V ON R OFF

 }
 else if (digitalRead(1) == LOW && digitalRead(2) ==LOW && digitalRead(3) == HIGH)//CHIAMATA P2
 {
  digitalWrite(LED_PT_R,HIGH); digitalWrite(LED_PT_V,LOW);//PT LED VERDE SPENTO LED ROSSO ACCESO
  digitalWrite(LED_P1_R,HIGH);digitalWrite(LED_P1_R,LOW);//P1 LED VERDE SPENTO LED ROSSO ACCESO
  digitalWrite(LED_P2_R,HIGH);digitalWrite(LED_P2_V,LOW);//P2 LED VERDE SPENTO LED ROSSO ACCESO

Steps3Take = StepsdaZeroaDue; // FAI 94*94 PASSI ORARIO
small_stepper.setSpeed(700);   
small_stepper.step(Steps3Take);

digitalWrite(LED_P2_R,LOW);digitalWrite(LED_P2_V,HIGH);
 }
 //===================================PIANO1=======================================================================
 else if (digitalRead(4) == LOW && digitalRead(5) == HIGH && digitalRead (6) == LOW)
 {
 digitalWrite(LED_PT_R,HIGH); digitalWrite(LED_PT_V,LOW);//PT LED VERDE SPENTO LED ROSSO ACCESO
 digitalWrite(LED_P1_R,LOW);digitalWrite(LED_P1_R,HIGH);//P1 LED VERDE SPENTO LED ROSSO ACCESO
 digitalWrite(LED_P2_R,HIGH);digitalWrite(LED_P2_V,LOW);//P2 LED VERDE SPENTO LED ROSSO ACCESO
//=================================================================================================================
if (digitalRead(1) == HIGH && digitalRead(2) == LOW && digitalRead (3) == LOW)
{
 digitalWrite(LED_PT_R,HIGH); digitalWrite(LED_PT_V,LOW);//PT LED VERDE SPENTO LED ROSSO ACCESO
 digitalWrite(LED_P1_R,HIGH);digitalWrite(LED_P1_R,LOW);//P1 LED VERDE SPENTO LED ROSSO ACCESO
 digitalWrite(LED_P2_R,HIGH);digitalWrite(LED_P2_V,LOW);//P2 LED VERDE SPENTO LED ROSSO ACCESO

Steps2Take = -StepsdaZeroaUno; // FAI 68*68 ANTIORARIO
small_stepper.setSpeed(700);   
small_stepper.step(Steps2Take);

digitalWrite(LED_PT_R,LOW); digitalWrite(LED_PT_V,HIGH);//PT LED VERDE SPENTO LED ROSSO ACCESO
}
else if (digitalRead(1) == LOW && digitalRead(2) == HIGH && digitalRead(3) == LOW ) //CHIAMATA P1
{
digitalWrite(LED_PT_R,HIGH); digitalWrite(LED_PT_V,LOW);//PT LED VERDE SPENTO LED ROSSO ACCESO
digitalWrite(LED_P1_R,LOW);digitalWrite(LED_P1_R,HIGH);//P1 LED VERDE SPENTO LED ROSSO ACCESO
digitalWrite(LED_P2_R,HIGH);digitalWrite(LED_P2_V,LOW);//P2 LED VERDE SPENTO LED ROSSO ACCESO
delay (1000);
}
//=================================================================================================================
else if (digitalRead(1) == LOW && digitalRead(2) == LOW && digitalRead(3) == HIGH ) // CHIAMATA P2
{
 digitalWrite(LED_PT_R,HIGH); digitalWrite(LED_PT_V,LOW);//PT LED VERDE SPENTO LED ROSSO ACCESO
 digitalWrite(LED_P1_R,HIGH);digitalWrite(LED_P1_R,LOW);//P1 LED VERDE SPENTO LED ROSSO ACCESO
 digitalWrite(LED_P2_R,HIGH);digitalWrite(LED_P2_V,LOW);//P2 LED VERDE SPENTO LED ROSSO ACCESO

Steps4Take = StepsdaUnoaDue; //FAI 64*64 PASSI ORARIO
small_stepper.setSpeed(700);   
small_stepper.step(Steps4Take);
 
digitalWrite(LED_P2_R,LOW);digitalWrite(LED_P2_V,HIGH);
}
//===================================PIANO2=======================================================================
else if(digitalRead(4) == LOW && digitalRead(5) == LOW && digitalRead(6) == HIGH )
{
 digitalWrite(LED_PT_R,HIGH); digitalWrite(LED_PT_V,LOW);//PT LED VERDE SPENTO LED ROSSO ACCESO
 digitalWrite(LED_P1_R,HIGH);digitalWrite(LED_P1_R,LOW);//P1 LED VERDE SPENTO LED ROSSO ACCESO
 digitalWrite(LED_P2_R,LOW);digitalWrite(LED_P2_V,HIGH);//P2 LED VERDE SPENTO LED ROSSO ACCESO
//=================================================================================================================
if (digitalRead(1) == HIGH && digitalRead(2) == LOW && digitalRead(3) == LOW )//CHIAMATA PT
{
 digitalWrite(LED_PT_R,HIGH); digitalWrite(LED_PT_V,LOW);//PT LED VERDE SPENTO LED ROSSO ACCESO
 digitalWrite(LED_P1_R,HIGH);digitalWrite(LED_P1_R,LOW);//P1 LED VERDE SPENTO LED ROSSO ACCESO
 digitalWrite(LED_P2_R,HIGH);digitalWrite(LED_P2_V,LOW);//P2 LED VERDE SPENTO LED ROSSO ACCESO

Steps3Take = -StepsdaZeroaDue; // FAI 94*94 PASSI AO
small_stepper.setSpeed(700);   
small_stepper.step(Steps3Take);

 digitalWrite(LED_PT_R,LOW); digitalWrite(LED_PT_V,HIGH);
}
//=================================================================================================================
else if (digitalRead(1) == LOW && digitalRead(2) == HIGH && digitalRead(3) == LOW)//CHIAMATA P1
{
digitalWrite(LED_PT_R,HIGH); digitalWrite(LED_PT_V,LOW);//PT LED VERDE SPENTO LED ROSSO ACCESO
digitalWrite(LED_P1_R,HIGH);digitalWrite(LED_P1_R,LOW);//P1 LED VERDE SPENTO LED ROSSO ACCESO
digitalWrite(LED_P2_R,HIGH);digitalWrite(LED_P2_V,LOW);//P2 LED VERDE SPENTO LED ROSSO ACCESO

Steps4Take = -StepsdaUnoaDue; //FAI 64*64 PASSI AO
small_stepper.setSpeed(700);   
small_stepper.step(Steps4Take);

digitalWrite(LED_P1_R,LOW);digitalWrite(LED_P1_R,HIGH);
}
//==================================================================================================================
else if ( digitalRead (1) == LOW && digitalRead(2) == LOW && digitalRead(3) == HIGH)//CHIAMATA P2
{
 digitalWrite(LED_PT_R,HIGH); digitalWrite(LED_PT_V,LOW);//PT LED VERDE SPENTO LED ROSSO ACCESO
digitalWrite(LED_P1_R,HIGH);digitalWrite(LED_P1_R,LOW);//P1 LED VERDE SPENTO  LED ROSSO ACCESO
digitalWrite(LED_P2_R,LOW);digitalWrite(LED_P2_V,HIGH);//P2 LED VERDE ACCESO  LED ROSSO SPENTO

 delay (1000);
}
}
}
}
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Apr 20, 2018, 04:46 pm
non mi metto a controllarlo tutto ma solo 2 considerazioni

allora il primo if considera il caso in cui le condizioni sono 4 High 5 e 6  low
poi ti manca l'if 5 high 4 e 6 low
e                   if 6 high 4 e 5 low

I nomi delle variabili servono a capire cosa fai e devono essere non troppo lunghe altrimenti ti ci perdi
vedi ad esempio
LED_P1_R
LED_P1_V
microswitch1

non è più comprensibile ad esempio

P1Rosso
P1Verde

o al limite ledP1Rosso ledP1Verde
e micro1

comunque a prescindere da come li definisci
se hai definito questi

Code: [Select]

int microswitch0=4;
int microswitch1=5;
int microswitch2=6;

perchè poi usi questa

Code: [Select]

 if (digitalRead(4) == HIGH && digitalRead(5) == LOW && digitalRead(6) == LOW)

// al posto di questo?

 if (digitalRead(microswitch0) == HIGH && digitalRead(microswitch1) == LOW && digitalRead(microswitch2) == LOW)

quindi se microswitch0 è alto
deve fare tutto questo
Code: [Select]

//                   rosso                    verde
  digitalWrite(LED_PT_R,LOW); digitalWrite(LED_PT_V,HIGH);//PT LED VERDE ACCESO LED ROSSO SPENTO

//                   rosso                    rosso
  digitalWrite(LED_P1_R,HIGH);digitalWrite(LED_P1_R,LOW);//P1 LED VERDE SPENTO LED ROSSO ACCESO

//                   rosso                     verde
  digitalWrite(LED_P2_R,HIGH);digitalWrite(LED_P2_V,LOW);//P2 LED VERDE SPENTO LED ROSSO ACCESO

  delay (1000); // NON FARE NIENTE E ATTENDI IL PASSO SUCCESSIVO

quindi al piano 1 il led verde non esiste

e questa linea non attende il passo successivo, SI FERMA TUTTO per un secondo
Code: [Select]

 delay (1000); // NON FARE NIENTE E ATTENDI IL PASSO SUCCESSIVO
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Silente on Apr 20, 2018, 06:59 pm
Io quando ho un problema simile in un codice ho imparato a fare una cosa:
spengo il computer, stacco Arduino, esco a fare un giro (a me piace camminare, si possono usare altri mezzi) e intanto ripenso da capo il progetto chiarendo bene cosa deve fare e come, e facendo in modo di non dare nulla per sottinteso.
Una volta fatto questo (che può durare ore come giorni, ovviamente intervallato da gite in cucine e bagni e letti) riaccendo il computer, apro un secondo file NUOVO e comincio a tradurre quello che ho pensato in arduinese.
Faccio questo perché un programma con troppa storia è come un vestito con troppi rammendi, non si sa più cosa fosse il vestito e cosa il buco, ma si sa che ti sta stretto e che hai speso una fortuna in stoffe.
Chiarisci bene, quindi, a te stesso come a noi, cosa deve fare l'ascensore in ogni dettaglio, e POI prova a scriverlo in C
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Apr 22, 2018, 01:51 pm
allora il funzionamento è il seguente:
l'ascensore ha 3 piani
è composto da un microswitch per piano micros0 micros1 micros2 con corrispondente pulsante0 ''1 ''2 e un motore passo passo.
ho costruito il codice in base a dove si trovasse l'ascensore esempio:
si trova al piano 0? quindi se il micros0 =ALTO and(&&) gli altri due micros1-2 si trovano LOW quindi confermato che l'ascensore si trovi al piano 0 nel caso in cui venga spinto uno dei 3 pulsante tradotto con ELSE IF
pulsante 1(faccio un esempio ) HIGH l'ascensore dovrà salire di tot passi (contati piano per piano grazie al funzionamento del motore passo passo) e si fermetà una volta conclusa la sua corsa
detto ciò si troverà successivamente al piano 1 nel caso sia stato spinto il puls2 e avrà delle nuove condizioni per poi ripetere il procedimento per ogni piano
 PROBLEMA
la cabina è troppo pesante quindi ho dovuto ricorrere a un metodo diverso per spingere il motore passo passo oltre alla sua velocità classica che si può trovare con i classici esempi di Arduino,che mi è stato gentilmente linkato da un componente del forum che corrisponde a questo qui
https://arduino-info.wikispaces.com/SmallSteppers
quindi io non dichiaro una velocità costante nel void setup ma vado a dichiarare ogni volta la velocità del mio motore nel void loop con le varie condizioni come è ben visibile nel codice
ed oltre ad esso avendo dei passi diversi per ogni piano vado a dichiare le 3 variabili intstep2-3-4take
per dichiare successivamente quanti passi deve fare.
Adesso io non so se quello che voglio realizzare è possibile farlo nel metodo usato, spero solo di essere stato chiaro con ciò che voglio realizzare e che qualcuno con più esperienza di me mi possa delucidare qualche idea!
grazie mille a chi riesce ad aiutarmi
la situazione di adesso è la seguente
l'ascensore sente solo quando si trova al piano 1 e va automaticamente al piano 2 senza la spinta di alcun pulsante.....
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Silente on Apr 22, 2018, 02:24 pm
Cominciamo con il dire una cosa:
Il programma si può semplificare e rendere scalabile usando array e funzioni. Sai di cosa sto parlando?
Se si allora trasforma tutte le variabili indicanti cose uguali in un unico array che ne contenga i valori (array per tutti i sensori, array per tutti i pulsanti, array per tutti i passi...) e poi vediano come continuare.
Vantaggi:
1) con array il tutto é facilmente scalabile
2) tratti tutti gli elementindi un array allo stesso modo per definizione (usando cicli for) e quindi se il problema é di codice non va nessun pezzo dell'array, altrimenti il probkema é chiaramente hardware
3) con le funzioni usi lo stesso identico modo per fare le stesse cose in parti diverse del programma, accorciando lo stesso e riducendo gli errori di scrittura possibili
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Apr 22, 2018, 02:35 pm
non ho mai usato nulla del genere....
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Silente on Apr 22, 2018, 02:53 pm
Ok.
Hai un manuale/libro di C? Cerca cosa é e come si crea e usa un array. É facile e molto utile
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Apr 22, 2018, 04:51 pm
sto provando a seguire da questo sito:
http://www.alberti-porro.gov.it/wordpress/wp-content/uploads/2014/01/ProgrammareArduino.pdf
ho trovato la parte degli array,ho capito come dichiarare i vari sensori-pulsanti-led
ma una volta che li dichiaro come faccio a descrivere tutto quello che facevo con il mio codice?
il fatto che deve andare di tot passi in senso O e AO solo se determinate variabili corrispondono?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: testato on Apr 22, 2018, 06:57 pm
nel tuo listato ci sono dei goto, finche' non spariscono e' inutile ragionarci su  :)
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Apr 22, 2018, 07:07 pm
leggi l'ultimo codice.... quello iniziale della prima pagina l'avevo preso come esempio e l'ho modificato nel tempo
mai usati goto
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Silente on Apr 22, 2018, 07:43 pm
Come fai a rifare quello che facevi nell'altro programma? Semplice, esattamente non puoi. Ti ho consigliato gli array perché così, esempio, la funzione di riconoscimento del piano diventa
Code: [Select]

byte RiconosciPiano()
{
for (byte i=0;i<num_piani;i++)
{
if (digitalRead (sensore_piani[i]))
{
return (i+1);
}
}
return (0);
}

Più facile, più scalabile, ed elimini i problemi di codice, perché, se il problema é di codice, vedi che nessuno funziona, mentre se vedi che alcuni vanno e altri no il problema é hardware.
Ripensa a quello che fai nel tuo programma con i vari numeri separati, e riscrivilo che lo faccia per i vari numeri in un array.
Ricprda che l'array comincia dal punto zero (che di norma significa falso, per questo ho messo return (i+1))
Title: Re: realizzazione di un ascensore a 3 piani
Post by: gpb01 on Apr 22, 2018, 07:51 pm
Ricprda che l'array comincia dal punto zero (che di norma significa falso ...
Cosa diavolo c'entra il fatto che l'indice di un array parta da 0 con il fatto che una lo zero è associato al valore logico "false" ? ? ? :o :o :o

Per favore, cerchiamo di NON confondere le idee agli utenti mischiando argomenti che nulla hanno a che vedere l'uno con l'altro.

Guglielmo
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Silente on Apr 22, 2018, 07:52 pm
Lo avevo messo per spiegare il (i+1), con il quale distinguo ""l'ascensore é al piano terra" con "non so dove sia l'ascensore"
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Apr 22, 2018, 08:29 pm
Scusami ma non ho capito che hai fatto potresti spiegarmelo cortesemente con dei commenti ? Scusa e grazie
Title: Re: realizzazione di un ascensore a 3 piani
Post by: steve-cr on Apr 22, 2018, 08:41 pm
nel tuo listato ci sono dei goto, finche' non spariscono e' inutile ragionarci su  :)

Daii, non essere così estremista, per uno come me che è partito dal basic Apple, i goto erano la soluzione di tutto!!! :D
Title: Re: realizzazione di un ascensore a 3 piani
Post by: steve-cr on Apr 22, 2018, 08:50 pm
Ho letto molto velocemente, ma io intanto partirei dal programma basico basico.
Quindi, pochi IF, se l'ascensore è a un piano vado a vedere uno switch, al massimo due (tra un piano e quello successivo), ma fare IF piano1 e NON piano2 e piano 3 è un assurdo (a meno che la cabina abbia poteri di ubiquità).
Con il controllo di un solo switch semplifico moltissimo. Quando vedo che funziona, aggiungo controlli, gestione led, protezioni ecc. ecc..
Title: Re: realizzazione di un ascensore a 3 piani
Post by: gpb01 on Apr 22, 2018, 11:37 pm
>Silente: Ho dovuto cancellare io il tuo post !

Lo abbiamo detto e ripetuto anche su altri thread ... NON è il forum un luogo per corsi di 'C', per quello ci sono "corsi in aula", "siti dedicati", testi e libri.

Intervieni quindi nei thread, SOLO se hai delle risposte specifiche da dare, NON per fare delle vere e proprie "lezioni" o per "filosofeggiare". Grazie.

Guglielmo

P.S.: Se ritieni che un utente abbia carenze nel linguaggio, segnalagli semplicemente la cosa, magari indicandogli dove andare a studiarsele.
Title: Re: realizzazione di un ascensore a 3 piani
Post by: testato on Apr 24, 2018, 01:08 pm
Daii, non essere così estremista, per uno come me che è partito dal basic Apple, i goto erano la soluzione di tutto!!! :D
Di quale Apple parli ?
Sul Basic dello ZX Spectrum, inizio anni 80, c'era già il GOSUB e le funzioni DEF x

Quindi il GOTO é ingiustificabile anche sul Basic  :)
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Apr 25, 2018, 03:28 pm
Ho letto molto velocemente, ma io intanto partirei dal programma basico basico.
Quindi, pochi IF, se l'ascensore è a un piano vado a vedere uno switch, al massimo due (tra un piano e quello successivo), ma fare IF piano1 e NON piano2 e piano 3 è un assurdo (a meno che la cabina abbia poteri di ubiquità).
Con il controllo di un solo switch semplifico moltissimo. Quando vedo che funziona, aggiungo controlli, gestione led, protezioni ecc. ecc..
ma io controllo i switch in ogni piano se leggi tutto il programma io valuto tutti i casi possibili dello switch per valutare dove si trova esattamente l'ascensore e per ogni piano gli indico i passi che deve fare in senso orario o antiorario in base a dove si trova e in base a quale dei 3 pulsanti viene spinto.
Gli indico anche uno stato di stallo nel momento in ci viene premuto il pulsante del piano stesso in cui si trova l'ascensore ... poi forse essendo un neofita del linguaggio c di Arduino quello che scrivo non porta al risultato sperato... però mi sembra di aver scritto cose con senso compiuto
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Apr 25, 2018, 05:05 pm
la questione era questa:
tu controlli così
Code: [Select]

 if (digitalRead(4) == HIGH && digitalRead(5) == LOW && digitalRead(6) == LOW) //STATO SWITCH PIANO 0


ma se in pi4 è alto che bisogno c'è di verificare che sia il pin5 che il 6 siano bassi?
o hai 3 ascensori in contemporanea oppure per forza se uno è alto gli altri devono essere bassi...
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Apr 26, 2018, 11:08 am
la questione era questa:
tu controlli così
Code: [Select]

 if (digitalRead(4) == HIGH && digitalRead(5) == LOW && digitalRead(6) == LOW) //STATO SWITCH PIANO 0


ma se in pi4 è alto che bisogno c'è di verificare che sia il pin5 che il 6 siano bassi?
o hai 3 ascensori in contemporanea oppure per forza se uno è alto gli altri devono essere bassi...
pensavo che essendo un sistema alla fine no, e non avendo un'intelligenza umana bisognava specificare tutti i casi possibili del sistema... però pensandoci bene sembra posso anche lavorare nel momento in cui 1micros è high tralasciando i low...
proverò a riscriverlo confrontando la premuta del pulsante con i casi del micros alto ... vediamo che esce fuori
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on May 01, 2018, 07:20 pm
provando e riprovando l'ascensore noto che nessun codice fa ciò che io gli dico
allora ho provato a scomporlo mettendo in confronto il semplice pulsante HIGH e il microswitch HIGH in base a dove si trova l'ascensore e noto che non sente il pulsante per niente e con il solo stato del microswitch riesce a fare i passi desiderati perché io dichiaro in ogni piano quanti passi deve fare l'ascensore
il pezzo del codice è il seguente :
Code: [Select]

val0 = digitalRead(pulsante0pin); // dichiaro la variabile val0 che diventa pulsante0pin
if ((val0 == HIGH) && (digitalRead (microswitch1) == HIGH)) { // se il pulsante piano0 è spinto ed è spinto anche il microswitch piano 1 l'ascensore dovrà scendere di tot passi
  Steps2Take = StepsdaUnoaDue; //ascensore sale di 64x64 passi
  small_stepper.setSpeed(700);//alla velocità di 700
  small_stepper.step(Steps2Take);
}

da questo pezzo di codice io vorrei che l'ascensore che ipotizzo sia al piano 1 verifica se anche il pulsante 0 viene spinto e vada al piano desiderato
il problema è che caricando anche solo questo micro codice con naturalmente il resto delle variabili i vari pinMode già impostati l'ascensore come sente il microsw alto va direttamente al piano 0 senza che il pulsante venga premuto...... AIUTO
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on May 01, 2018, 08:51 pm
stampati il valore di val0
Code: [Select]


val0 = digitalRead(pulsante0pin); // dichiaro la variabile val0 che diventa pulsante0pin

Serial.println(val0)

if ((val0 == HIGH) && (digitalRead (microswitch1) == HIGH)) { // se il pulsante piano0 è


se è high senza che tu abbia promuto nulla c'è un errore nei collegamenti...
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on May 14, 2018, 05:00 pm
Ragazzi una domanda
Ma se uso i 5v diretti del arduino e li do al motore passo passo
E uso i 3.3v per alimentare i 3pulsanti con i 3switch e i diodi mi bastano? O sono obbligato al uso di un'alimentazione esterna??
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Silente on May 14, 2018, 05:25 pm
Io consiglio alimentazione esterna per il motore. Per switch e pulsanti puoi usare i 5V o i 3,3V(nel secondo caso senza resistenza). Per i led usa i pin come output.
Comunque quali led?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 01, 2018, 04:21 pm
Code: [Select]

#include <Stepper.h>
//---------------------------------------------------COLLEGAMENTI-----------------------------------------------//
bool PULS_0=2;
bool PULS_1=3;
bool PULS_2=4;
bool MICROSW_0=5;
bool MICROSW_1=6;
bool MICROSW_2=7;
int Stepsdafare;
#define StepsPerMotorRevolution 32
#define StepsdaZeroaDue 94*94
#define StepsdaZeroaUno 68*68
#define StepsdaUnoaDue  64*64
Stepper small_stepper(StepsPerMotorRevolution,9,11,10,12);



void setup() {
 
pinMode(PULS_0,INPUT);
pinMode(PULS_1,INPUT);
pinMode(PULS_2,INPUT);
pinMode(MICROSW_0,INPUT);
pinMode(MICROSW_1,INPUT);
pinMode(MICROSW_2,INPUT);

}

void loop() {
  if (digitalRead(5) == HIGH and digitalRead (3) == LOW) { //STA AL PIANO 0 VA AL PIAN1
  Stepsdafare =  StepsdaZeroaUno;
  small_stepper.setSpeed (700);
  small_stepper.step(Stepsdafare);
     }
   if (digitalRead(6) == HIGH and digitalRead(4) == LOW) {//STA AL PIANO 1 VA AL PIANO 2
  Stepsdafare = StepsdaUnoaDue;
  small_stepper.setSpeed (700);
  small_stepper.step(Stepsdafare);
  }
  if (digitalRead(7) == HIGH and digitalRead(3) == LOW) {//STA AL PIANO 2 VA AL PIANO 1
  Stepsdafare = - StepsdaUnoaDue;
  small_stepper.setSpeed (700);
  small_stepper.step(Stepsdafare);
  }  if (digitalRead(6) == HIGH and digitalRead(2) == LOW){ // STA AL PIANO 1 VA AL PIANO 0
  Stepsdafare = - StepsdaZeroaUno;
  small_stepper.setSpeed (700);
  small_stepper.step(Stepsdafare);
  }
  }




allora ragazzi ho cambiato dinuovo codice e con vari tentativi con quelli vecchi ho capito che i pulsanti erano normalmente chiusi e quando li spingevo aperti, avevo praticamente tutti i stati al contrario
adesso ho un'altro problema praticamente l'ascensore funziona fa tutti i piani sia orario che antiorario(ogni tanto sbrocca e fa salita quando schiaccio il piano 1 e sta al piano 2 però tralasciando questo) però praticamente ho notato che lui non segue i pulsanti che spingo mi spiego meglio:
mi può succedere che sta al piano 0 e schiaccio il piano 2 e mi va al piano 1 mentre io vorrei che questo succedesse solo quando schiaccio il piano 1 così con altri pulsanti
adesso come faccio a eliminare questo problema ?
provo a inserire due nuove condizioni che facciano piano 0 piano 2?
anche perché io volevo fare un semplice ascensore che facesse tutti i step 0-1-2 2-1-0 senza saltare da 0 a 2 o da 2 a 0
come posso fare?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Silente on Jun 02, 2018, 09:44 am
Ma
1)gli ascensori sono la fiera degli array, non delle variabili, con variabili singole ci metti molto più tempo e codice.
2)se quello é il tuo scopo e puoi ancora cambiare i componenti ti do un consiglio: comprati un motore semplice comandato solo in direzione e usa gli switch come finecorsa. In alternativa ti basta usare lo stepper nel modo più facile:SENZA parlare di velocità, ma soltanto di "fai un passo". Il programma diventa:
Leggi i tasti e ti ricordi se ne senti uno premuto
Leggi gli switch e ti ricordi se ne senti uno premuto.
Ora i casi sono tre:

Non hai ricordo di tasto
Non devi andare da nessuna parte, ignori

Ricordo di tasto e ricordo di switch sono uguali
Sei arrivato al piano. Dimentichi il tasto

Il ticordo del tasto e dello switch sono diversi
Devo muovermi in un verso. Quale?
Se il ricordo del tasto é maggiore in alto
Se il rocordo del tasto é minore in basso.

Ora, se io, che faccio agraria in quarta, che sono un week and in montagna senza pc o Arduino, che ci ha pensato per 30 minuti, ti ha dato lo schema di un programma possibile (anche se fisicamente lento)e molto semplice il resto lo devi fare tu, cje hai materiale, desiderio e conoscenze.
Buon viaggio
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 02, 2018, 12:04 pm
però siccome che vedo che con gli array non sono tanto pratico, volevo provare a finirlo e farlo funzionare Come sapevo fare io... anche se non so più come andare avanti e eliminare quelle problematiche
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Silente on Jun 02, 2018, 12:18 pm
Noto che fino a "array" ha letto. Continui a farlo ed ecco un metodo per risolvere ilnproblema
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 02, 2018, 12:22 pm
lo stepper non è in grado di farlo?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Silente on Jun 02, 2018, 12:23 pm
Lo stepper é in grado di fare un passo alla volta? La risposta é si, lentamente ma si. Quindibsi, puoi farlo
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 02, 2018, 12:27 pm
e per dirgli che deve girare fin quando non sente un microsw alto uso la funzione while?
che cicla fin quando la condizione è vera e quando è falsa si ferma no?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Silente on Jun 02, 2018, 12:29 pm
Concentrati hai un'altra possibilità, c'è qualcosa che ciclo ciclo ciclo ciclo ciclo in continuo o no, e se in quella cosa che cicla in continuo io potessi dirgli soltanto se la condizione è falsa fai un passo cosa otterrai
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 02, 2018, 12:35 pm
penso sia il ciclo for  >:(
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Silente on Jun 02, 2018, 12:42 pm
... E se fosse la loop() contenente un if()?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 02, 2018, 12:49 pm
e scusami come faccio a dirgli che ad esempio
premo il pulsante 1 il motore deve cominciare a roteare in senso orario fino a che il microsw no diventi alto
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Silente on Jun 02, 2018, 01:00 pm
Gli dici che se il pulsante che si ricorda é maggiore del microswitch che sibricorda deve fare un passo in basso. Hai scelto dibusare uno stepper che é cpsì facile da usare, e non te ne sei neanche accorto.
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Claudio_FF on Jun 02, 2018, 03:16 pm
Quote from: simonsdec
Code: [Select]

bool PULS_0=2;
bool PULS_1=3;
bool PULS_2=4;
bool MICROSW_0=5;
bool MICROSW_1=6;
bool MICROSW_2=7;

Io dal programma ancora non riesco a capire in modo semplice quali sono i livelli dei pulsanti e finecorsa quando sono premuti o quando sono rilasciati. A fatica si può intuire qualcosa confrontando le varie digitalRead con i commenti, ma questo porta sicuramente ad errori, tra cui non riuscire a correggere gli errori esistenti e magari a commetterne altri ad ogni modifica (tradotto: "non ho nessuna voglia di dover intuire a fatica e con il rischio di sbagliarmi cose che dovrebbero già essere scritte esplicitamente nelle definizioni iniziali").

Poi perché dichiarare delle variabili tipo bool per contenere il numero dei pin? (Le variabili bool dovrebbero contenere solo true/false, o al massimo 1/0, e i loro nomi dovrebbero essere delle domande a cui si può rispondere solo si o no, ad esempio: finito? acceso? primogiro? ecc).

E, a maggior ragione, visto che lo scopo di quelle definizioni è esclusivamente quello di dare dei nomi di comodo ai pin (per non cospargere il codice di numeri tra cui ci si confonde facilmente), allora perché definire dei nomi di comodo, se poi nel programma dove servirebbe non vengono usati? Ok, sono usati nelle funzioni pinMode, ma in tutti gli altri punti?

Queste cose secondo me rendono difficilissimo seguire la logica (soprattutto a chi non l'ha scritta), mentre mi aspetterei (come ipotetico insegnante/valutatore) di trovare istruzioni che non lasciano spazio all'interpretazione, tipo la seguente, in cui non c'è dubbio che stiamo leggendo il pulsante1 e che stiamo controllando se è premuto, non serve neppure mettere un commento:
Code: [Select]
if(digitalRead(PULS_1) == PULS_PRESSED_LEVEL) ....
...se i valori corretti di PULS_1 e PULS_PRESSED_LEVEL li abbiamo definiti prima, restano corretti e usabili in tutto il programma, permettendo anche a chi lo legge per la prima volta di concentrarsi solo sulla logica, e non sui dettagli hardware come numeri di pin o HIGH/LOW da andare continuamente in cerca di cosa significano.
Title: Re: realizzazione di un ascensore a 3 piani
Post by: stefa24 on Jun 02, 2018, 05:43 pm
e' stata considerata la possibilità di guasto con fermata tra due piani, sarebbe bello poter mandare l'ascensore a fianco alla stessa quota per trasferire i presenti
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Standardoil on Jun 02, 2018, 07:27 pm
Se mi metti il codice attuale magari ci do uno sguardo....
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 02, 2018, 10:03 pm
Code: [Select]

#include <Stepper.h>
//---------------------------------------------------COLLEGAMENTI-----------------------------------------------//
bool PULS_0=2;
bool PULS_1=3;
bool PULS_2=4;
bool MICROSW_0=5;
bool MICROSW_1=6;
bool MICROSW_2=7;
int Stepsdafare;
#define StepsPerMotorRevolution 32
#define StepsdaZeroaDue 94*94
#define StepsdaZeroaUno 68*68
#define StepsdaUnoaDue  64*64
Stepper small_stepper(StepsPerMotorRevolution,9,11,10,12);



void setup() {
 
pinMode(PULS_0,INPUT);
pinMode(PULS_1,INPUT);
pinMode(PULS_2,INPUT);
pinMode(MICROSW_0,INPUT);
pinMode(MICROSW_1,INPUT);
pinMode(MICROSW_2,INPUT);

}

void loop() {
  if (digitalRead(5) == HIGH and digitalRead (3) == LOW) { //STA AL PIANO 0 VA AL PIAN1
  Stepsdafare =  StepsdaZeroaUno;
  small_stepper.setSpeed (700);
  small_stepper.step(Stepsdafare);
     }
   if (digitalRead(6) == HIGH and digitalRead(4) == LOW) {//STA AL PIANO 1 VA AL PIANO 2
  Stepsdafare = StepsdaUnoaDue;
  small_stepper.setSpeed (700);
  small_stepper.step(Stepsdafare);
  }
  if (digitalRead(7) == HIGH and digitalRead(3) == LOW) {//STA AL PIANO 2 VA AL PIANO 1
  Stepsdafare = - StepsdaUnoaDue;
  small_stepper.setSpeed (700);
  small_stepper.step(Stepsdafare);
  }  if (digitalRead(6) == HIGH and digitalRead(2) == LOW){ // STA AL PIANO 1 VA AL PIANO 0
  Stepsdafare = - StepsdaZeroaUno;
  small_stepper.setSpeed (700);
  small_stepper.step(Stepsdafare);
  }
  }





il codice attuale è questo
ed in poche parole vado a verificare i microsw ed un eventuale pressione del pulsante
faccio il caso 1 il microsw si trova a 0 quindi suppongo che si trovi al piano 0
bene nel momento in cui premo il pulsante 1 mi si avverano le due condizioni che ho messo nel if
premetto che il pulsante è normalmente HIGH e quando lo spingo LOW
dal momento in cui queste due condizioni sono vere che sono esattamente questa linea di testo
Code: [Select]

 if (digitalRead(5) == HIGH and digitalRead (3) == LOW) {

gli dico che deve fare i suoi step contati in precedenza da 0 a 1
a velocità 700
STOP
il problema come ho già detto in precedenza è il seguente
1) capita che quando dovrebbe cambiare senso dal piano 2 al piano 1 capita che fa salita.... senza motivo, non so da cosa dipende è successo che ogni tanto in fase di testing mi facesse salita da solo...mentre se lo rilanciava funzionava tranquillamente facendo la discesa dal 2 al 1
2) altro problema che voglio eliminare è quello che il mio deve essere un'ascensore semplice che faccia 0-1-2 2-1-0 e vorrei che nel momento in cui spingo il pulsante 0 e sta a 0 non faccia niente
stessa cosa se sta a 0 e spingo il pulsante 2
ho provato ad aggiungere nuovi if..... etc
ma non funziona come se non rispettasse esattamente il pulsante che sente premuto
come posso fare?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Jun 02, 2018, 10:55 pm
ma questa riga (come tutte le altre)
Code: [Select]

 if (digitalRead(5) == HIGH and digitalRead (3) == LOW)


visto che hai definito dei nomi per i pin, why, perchè non li usi e la trasformi così
che così anche tu capisci che cosa dovrebbe fare!
Code: [Select]

 if (digitalRead(MICROSW_0) == HIGH and digitalRead (PULS_1) == LOW)


a parte il fatto che
Code: [Select]

bool PULS_0=2;
bool PULS_1=3;
bool PULS_2=4;
bool MICROSW_0=5;
bool MICROSW_1=6;
bool MICROSW_2=7;

vanno definiti come byte e non boolean. Boolean lo usi per definire una variabile che ha due (2) stati e cioè vero o falso e numericamente falso=0 vero >0 (quindi 1, 2, 3 ...)
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Jun 02, 2018, 11:08 pm
mancano sicuramente tutti i debounce sui pulsanti e soprattutto manca il controllo che dopo aver fatto x step in un senso o nell'altro il miscroswitch sia effettivamente premuto

tra l'altro invece di fare esattamente x passi perchè non ti muovi nella direzione alto o basso fino a quando non senti il micro che ti serve, a quel punto sei arrivato e ti fermi
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 02, 2018, 11:37 pm
ma questa riga (come tutte le altre)
Code: [Select]

 if (digitalRead(5) == HIGH and digitalRead (3) == LOW)


visto che hai definito dei nomi per i pin, why, perchè non li usi e la trasformi così
che così anche tu capisci che cosa dovrebbe fare!
Code: [Select]

 if (digitalRead(MICROSW_0) == HIGH and digitalRead (PULS_1) == LOW)


a parte il fatto che
Code: [Select]

bool PULS_0=2;
bool PULS_1=3;
bool PULS_2=4;
bool MICROSW_0=5;
bool MICROSW_1=6;
bool MICROSW_2=7;

vanno definiti come byte e non boolean. Boolean lo usi per definire una variabile che ha due (2) stati e cioè vero o falso e numericamente falso=0 vero >0 (quindi 1, 2, 3 ...)

scusa l'ignoranza ma non hanno due stati ?
o sono HIGH O LOW sbaglio?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 02, 2018, 11:49 pm
mancano sicuramente tutti i debounce sui pulsanti e soprattutto manca il controllo che dopo aver fatto x step in un senso o nell'altro il miscroswitch sia effettivamente premuto

tra l'altro invece di fare esattamente x passi perchè non ti muovi nella direzione alto o basso fino a quando non senti il micro che ti serve, a quel punto sei arrivato e ti fermi
che intendi con il "controllare se sia effettivamente premuto"?


per quanto riguarda l'altro metodo che hai descritto è sicuramente più efficiente ma non so realizzarlo
non so come dirgli che deve continuare ad andare avanti fin quando non sente il microsw alto
e come mettere in mezzo anche i pulsanti
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Standardoil on Jun 02, 2018, 11:56 pm
allora..
non ti mettero' il codice, non lo faccio più, in particolare nno per gli studenti
ma ti segnalo qualche incongruenza, alcune anche grosse
primo: da marzo (meta') non hai ancora deciso se i pulsanti che hai sono NC o NO?
stai usando i micro di piano come se fossero NC, ma li dichiari input, non input_pullup, sono perplesso
secondo: ma possibile che non riesci (nessuno di voi ci riesce) a formattare decentemente il programma?
Che idea bizzarra è quella di chiudere una graffa di un if e aprire una nuova if sulla stessa riga?
che leggibilità speri di ottenere?
cosa credi che pensi chi legge il tuo programma?
in due mesi e mezzo almeno un passo in questa direzion lo potevi fare
parliamo di passi:
Claudio_FF te lo ha detto all'una e un quarto che avevi sbagliato i tipi dati
e tu otto ore dopo sei ancora qui a giocare coi tipi dati sbagliati?, cosa non ti è chiaro del concetto "Bool NON è Int"?, se non metti a posto gli errori nemmeno quando te li mostrano come credi di poter ottenere qualcosa di funzionante?
ora, se un bool NON è un Int scrivere una bizzarria del genere:
Code: [Select]

bool PULS_0=2;

e tutte le rige sue sorelle
significa assegnare 1 (ovvero true) alle variabili, e non altri valori
che se poi le usi per le pinmode significa che hai fatto molte volte la pinmode del piedino 1, ma MAI le pinmode che ti servono
e unito al fatto che non sai bene se i tuoi tasti sono NC o NO significa che non sai se i pin "vanno" oppure "non vanno", a posto siamo.......
poi, lungi da te l'idea di seguire il consiglio di steve_cr di un paio di settimane fa: fai le cose una per volta, e quando va aggiungi
no, tu devi (tuo post 48) prevedere per i tre pulsanti i casi che siano premuti i piani.....
che sarebbe già lavoro improbo e facile ad errori SE fosse fatto, peccato che NON lo hai fatto
tre piani con tre pulsanti possibili e tre posizioni possibili fanno nove (in cifra: 9 ovvero 3*3) casi da considerare, tu hai scritto 4 if
e gli altri 5 casi?
certo che tra mancate pinmode, pullup forse presenti, tasti che non sono come si crede e casi non previsti l'ascensore fa quello che vuole, mi avrebbe meravigliato il contrario
da ultimo le stranezze minori
perchè non hai seguito i varii (si' varii, con due i, è il plurale di variO, che diventa variI, e se il mio correttore ortografico non è daccordo la cosa non mi interessa)
dicevo: perchè non hai seguito i varii consigli di fermare l'ascensore quando arriva a premere il micro, non contare i passi?  se il motore col tempo perdesse qualche passo tra sei mesi ti trovi la cabina che si ferma a mezzo piano? vabbe' che devi solo passare l'esame, ma un minimo di pensiero ci vuole....
dulcis in fundo il numero dei passi: ma sei sicuro che la distanza tra i piani sia proprio così come indichi?
no, perchè se la distanza tra il piano 0 e il piano 2 è di 8836 passi mi sembra difficile credere che la somma delle distanze 0-1 e 1-2 sia 8270, forse abbiamo già cominciato a fermare l'ascensore in mezzo ai piani, senza nemmeno bisogno di aspettare un guasto hardware, comodo per avere inquilini incaxati alla grande ed esaminatori che sanno cosa pensare dell'esaminando..........
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Standardoil on Jun 03, 2018, 12:11 am
Un consiglio te lo posso lasciare
progetti zoppi sono duri da raddrizzare, riparti da capo che fai prima
ma tieni presente i suggerimenti che ti sono stati dati
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 03, 2018, 12:22 am
grazie della risposta apprezzo molto
 sicuramente ho capito degli errori enormi che ho fatto forse data la mia nulla esperienza e anche poca informazione
i pulsanti sono sicuramente nc e spingendoli no
I microswitch l'inverso
però li alimento con i 3.3v di Arduino e mi è stato detto che non dovevano essere usate le resistenze di pullup per questo ho pensato se non le uso fisicamente le resistenze non le dovrò dichiarare neanche su Arduino giusto ?sbagliato?
per quanto riguarda il fatto degli altri 5 casi che mi mancano hai ragione, diciamo questa era una bozza di programma un testing e l'ascensore sembrava aver risposto correttamente, faceva molte cose come veniva scritto da programma me ne mancavano delle altre che sicuramente con l'aggiunta dei vari if e di tutte le cose che mi hai consigliato si aggiusteranno.
L'ultimo consiglio che mi hai dato quello di mandare avanti il motore fin quando non sentisse il cambio di stato del microsw l'avevo bocciato perché non sapevo come fare a livello di progetto .... avevo optato per una cosa semplice e basilare come andare a confrontare due variabili con l'if e dirgli in caso fossero vere cosa dovesse fare....
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Standardoil on Jun 03, 2018, 12:30 am
separa il programma in unità funzionali
che poi vuol dire funzioni che fanno una cosa specifica ed entrocontenuta
leggi i pulsanti e definisci il piano prenotato (se c'è pulsante)
leggi i micro e definisci il piano presente (se l'ascensore è fermo)
se prenotato <> presente  in C sarebbe if (prenotato!=presente)
se prenotato > presente motoresale
se prenotato < presente motorescende
motoresale è una fonzione che fa un tot di passi e poi controlla se il micro di presente segna presente uguale a prenotato, se si si ferma, altrimenti ricomincia, suggerimento: guarda la documentazione di while
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Claudio_FF on Jun 03, 2018, 08:56 am
Quote from: simonsdec
però li alimento con i 3.3v di Arduino e mi è stato detto che non dovevano essere usate le resistenze di pullup
Per leggere dei contatti isolati le resistenze di pull-up (oppure pull-down), esterne o interne che siano, servono sempre. Non si usano solo se la cosa da leggere genera già da sola i corretti livelli di tensione riconoscibili dall'ingresso.


Quote from: simonsdec
i pulsanti sono sicuramente nc e spingendoli no
Provato elettricamente (con tester, minicircuito con LED, ecc) o dedotto in altro modo?

Lo chiedo perché entrambi questi circuiti danno LOW quando premuto e HIGH quando non premuto, ma solo quello di sinistra (con resistenza di pull-down) ha un pulsante di tipo NC.

I tuoi collegamenti sono quelli di sinistra o di destra?



Comunque l'importanza è relativa, una volta stabilito con sicurezza che pulsante premuto corrisponde a lettura LOW basta scriverlo chiaramente come commento nella sezione dichiarazioni.


Quote from: standardoil
significa assegnare 1 (ovvero true) alle variabili, e non altri valori
Vero, credevo che il tipo boolean fosse solo un alias di byte, invece effettivamente assume solo 0 o 1:
Code: [Select]
bool x = 12;

void setup() {
  Serial.begin(9600);
  delay(1000);
  Serial.println(sizeof(x));
  Serial.println(x);
  Serial.println((byte)x);
}

void loop() {}

In questo caso, nonostante i pinMode errati, "funziona" tutto solo perché i pin sono già ingressi all'accensione, il pin 1 è già un'uscita (ma magari si blocca la seriale), e le uscite probabilmente vengono impostate dalla libreria stepper.
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 03, 2018, 01:36 pm
il collegamento è il seguente
hanno un positivo comune i 3 pulsanti
successivamente pin e massa perché usando i 3.3v non avevo messo le resistenze
e provando con lo sketch che vi ho postato in precedenza l'unica condizione che aspetta la condizione del programma è quella del microsw HIGH and pulsante LOW
se metto altre condizioni parte da solo ....
quindi presumo che sia normalmente chiuso e successivamente open
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Claudio_FF on Jun 03, 2018, 06:21 pm
Quote from: simonsdec
hanno un positivo comune i 3 pulsanti
successivamente pin e massa perché usando i 3.3v non avevo messo le resistenze
Dopo 80 post io ancora non ho capito (niente).
Quindi non è nessuna delle due alternative che ho disegnato? (le ho disegnate apposta per non rischiare fraintendimenti nel descriverle)
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 03, 2018, 08:02 pm
positivo switch resistenza massa
dovrebbe corrispondere al tuo esempio di sinistra
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 04, 2018, 04:07 pm

allora lo schema dei pulsanti è il seguente
ed avrei un dubbio siccome è nc e successivamente no
con l'input devo mettere pulldown giusto?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Claudio_FF on Jun 04, 2018, 05:52 pm
Non c'è INPUT_PULLDOWN, ma la resistenza è già all'esterno per cui va bene così.

Piuttosto metti anche un condensatore 100nF in parallelo alla resistenza stessa, così ti togli i problemi dei rimbalzi meccanici.
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 04, 2018, 06:53 pm
ok quindi la parte meccanica risolta
adesso ho problema di codice
allora se voglio indicare ad esempio che in una determinata situazione non devono fare assolutamente niente come faccio ?
Ci sono dei casi , esattamente 3 per il quale l'ascensore si trova al piano 0 prendo ad esempio e viene spinto il piano 0
cosi per piano 1 pulsante 1
piano 2 pulsante 2
e voglio dire che in quel caso non deve fare niente l'ascensore
fin'ora ho scritto così
Code: [Select]

if(digitalRead(MICROSW_0) == HIGH and digitalRead(PULS_0) == LOW){

}

non scrivevo niente all'interno della graffa sperando che stia a significare che in quel caso non deve far niente
ma noto che o fa discesa o fa salita a suo piacimento...... come posso risolvere?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Silente on Jun 04, 2018, 09:48 pm
Considerando tutti i casi possibili NON FINISCI PIÙ!!! Devi trovare una maniera più veloce.
Tale maniera te la do io, visto che dirti "pensaci", dopo mesi che sei su questo problema, non è molto efficace.
Tu devi (come qualcuno, guarda caso, ti ha già detto) usare gli ARRAY!!! In cui mettere i pin di tasti e switch.
Hai, inoltre, due variabili globali, che sono ultimo tasto sentito e ultimo switch sentito.
in loop
{
Ogni volta che senti un tasto o uno switch aggiorni la variabile corrispondente, e la rendi pari al valore di tale tasto/switch.
Se il tasto memorizzato ha valore maggiore dello switch memorizzato
{
sali di UN PASSO
}
se il tasto memorizzato ha valore minore dello switch memorizzato
{
scendi di UN PASSO
}
}
Scrivilo così e vedi CHE funziona.
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Jun 04, 2018, 11:40 pm
non scrivevo niente all'interno della graffa sperando che stia a significare che in quel caso non deve far niente
ma noto che o fa discesa o fa salita a suo piacimento...... come posso risolvere?
se in una condizione non devi fare nulla allora non fare nulla, cioè non pensare a quella condizione, ri-cioè non scrivire una riga inutile, se  perche è scritta per non fare nulla è come se non fosse scritta

ascensore a 3 piani

Code: [Select]

if(digitalRead(MICROSW_352) == HIGH and digitalRead(PULS_352) == LOW){

}


non devi controllare il piano 352 perchè non esiste.... è più o meno la stessa cosa
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Silente on Jun 05, 2018, 07:28 am
Unica cisa da risolvere del mio programmino (la dico perché ci potrebbe essere un problema) é:
Separare l'aggiornamentobdella memoria micro da quellla pulsanti
Eseguire l'aggiornamento della memoria pulsanti solo se i due ricordi sono uguali
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 05, 2018, 02:41 pm
se in una condizione non devi fare nulla allora non fare nulla, cioè non pensare a quella condizione, ri-cioè non scrivire una riga inutile, se  perche è scritta per non fare nulla è come se non fosse scritta

ascensore a 3 piani

Code: [Select]

if(digitalRead(MICROSW_352) == HIGH and digitalRead(PULS_352) == LOW){

}


non devi controllare il piano 352 perchè non esiste.... è più o meno la stessa cosa
però ho un problema io noto che i step che ho segnato con if else li fa senza problemi
sta al piano 0 deve andare al piano 1 spingo il pulsante ci va
sta al piano 1 spingo il piano 2 va al piano 2
ma ho notato,cosa che non deve assolutamente capitare,che se spingo il piano 0 e si trova al piano 0 mi fa discesa ad esempio ..... devo eliminare questo tipo di problema
come posso evitare ciò? mi sono spiegato ?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Silente on Jun 05, 2018, 03:33 pm
Parlo di quello che ho descritto pochi post fa
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Jun 05, 2018, 05:50 pm
Quote
fin'ora ho scritto così
Code: [Select]


if(digitalRead(MICROSW_0) == HIGH and digitalRead(PULS_0) == LOW){

}


non scrivevo niente all'interno della graffa sperando che stia a significare che in quel caso non deve far niente
ma noto che o fa discesa o fa salita a suo piacimento...... come posso risolvere?
purtroppo io sono rimasto al codice che avevi pubblicato 3 o 4 pagine fa, per cui non posso risponderti in quanto manca la versione corrente del programma...

Title: Re: realizzazione di un ascensore a 3 piani
Post by: Claudio_FF on Jun 05, 2018, 05:55 pm
Quote from: simonsdec
non scrivevo niente all'interno della graffa sperando che stia a significare che in quel caso non deve far niente ma noto che o fa discesa o fa salita a suo piacimento...... come posso risolvere?
L'istruzione vuota/nulla è un semplice punto e virgola, ma non dovrebbe essere questo il problema.
Se parte vuol dire che:
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Jun 05, 2018, 06:22 pm
prendendo il codice precedente leggo :

e ti prego di osservare come sono indentati (concatenati) i vari se e altrimenti
se leggi bene vedrai che ci sono alcuni errori


Code: [Select]

se switch0 premuto
           se premo piano0
                  non fare nulla
altrimenti se premo piano1    // massi dai te lo dico, questo non è alternativo a  piano0 premuto
           vai a piano1              // bensi a switch0 premuto
altrimenti se premo piano2
           vai a piano2
altrimenti se switch1 premuto
           se premo piano0
                  vai a piano0
           altrimenti se premo piano1
                  non fare nulla
          altrimenti se premo piano2
                  vai a piano2
          altrimenti se switch2 premuto   // e questo non è altenativo a swith1 premuto...
                  se premo piano0
                           vai a piano0
                   altrimenti se premo piano1
                           vai a piano1
                   altrimenti se premo piano2
                           non fare nulla

 


tra l'altro ti avevo suggerito di eliminare le condizioni inutili
proprio perchè rendono le righe lunghissime e ti confondono
se lo switch a piano 0 è alto è inutile controllare che piano1 sia basso e piano 2 sia basso etc etc...
questo è un pezzo del tuo sketch (aggiornato da mecon i nomi dei pin)
Code: [Select]

  if (digitalRead(microswitch0) == HIGH && digitalRead(microswitch1) == LOW && digitalRead(microswitch2) == LOW) { //STATO SWITCH PIANO 0
      digitalWrite(LED_PT_R, LOW);
      digitalWrite(LED_PT_V, HIGH); //PT LED VERDE ACCESO LED ROSSO SPENTO
      digitalWrite(LED_P1_R, HIGH);
      digitalWrite(LED_P1_R, LOW);  //<-- lo vedi che così si trovano subito gli errori? qui ci va _V
      digitalWrite(LED_P2_R, HIGH);
      digitalWrite(LED_P2_V, LOW); //P2 LED VERDE SPENTO LED ROSSO ACCESO

      //===============================================================================================================

      if (digitalRead(pulsante0pin) == HIGH && digitalRead(pulsante1pin) == LOW && digitalRead(pulsante2pin) == LOW) { //CHIAMATA PT
         digitalWrite(LED_PT_R, LOW);
         digitalWrite(LED_PT_V, HIGH); //PT LED VERDE ACCESO LED ROSSO SPENTO
         digitalWrite(LED_P1_R, HIGH);
         digitalWrite(LED_P1_R, LOW); //P1 LED VERDE SPENTO LED ROSSO ACCESO
         digitalWrite(LED_P2_R, HIGH);
         digitalWrite(LED_P2_V, LOW); //P2 LED VERDE SPENTO LED ROSSO ACCESO
         delay (1000); // NON FARE NIENTE E ATTENDI IL PASSO SUCCESSIVO
      }

così è come può diventare
Code: [Select]

  if (digitalRead(microswitch0) == HIGH) {        //STATO SWITCH PIANO 0
      digitalWrite(LED_PT_R, LOW);
      digitalWrite(LED_PT_V, HIGH);                    //PT LED VERDE ACCESO LED ROSSO SPENTO
      digitalWrite(LED_P1_R, HIGH);
      digitalWrite(LED_P1_R, LOW);                    //P1 LED VERDE SPENTO LED ROSSO ACCESO
      digitalWrite(LED_P2_R, HIGH);
      digitalWrite(LED_P2_V, LOW);                     //P2 LED VERDE SPENTO LED ROSSO ACCESO

      if (digitalRead(pulsante0pin) == HIGH) {     //CHIAMATA PT
          // siccome i led non cambiano .... non li scriviamo, restano come sono
         // e anche il delay(1000) è inutile... non deve fare nulla
      }
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Jun 05, 2018, 07:11 pm
tra l'altro se ti facessi una funzione separata per accendere e spegnere i led a seconda dil piano in cui sei.... semplificheresti di molto la lettura del programma
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 05, 2018, 07:16 pm
allora ti capisco benissimo adesso l'ho riscritto in modo più chiaro andando a specificare tutti i pulsanti switch vari  e noto che ho molta più facilità ad individuare l'errore
adesso ciò che devo risolvere è il fatto che quando sta al piano 0 e spingo il pulsante 0 deve stare assolutamente fermo...... pensavo una cosa del genere  

Code: [Select]
if(digitalRead(Puls_0) == LOW && digitalRead(SW_0) == HIGH) //STA AL PIANO 0 CON PRESSIONE DEL PULSANTE 0
{
small_stepper.setSpeed(0);
}
//gli potrei dire che se la condizione fosse vera la velocità del motore è pari a 0 quindi in teoria non farebbe niente.... che dite troppo rozzo ? Non so neanche se funzioni

Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 05, 2018, 07:24 pm
tra l'altro se ti facessi una funzione separata per accendere e spegnere i led a seconda dil piano in cui sei.... semplificheresti di molto la lettura del programma

lo farò certamente
per l'esattezza creo una funzione void(?)
ad esempio void accensione led primo piano()
e gli dichiaro dentro i vari digitalWrite giusto?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 05, 2018, 07:35 pm
L'istruzione vuota/nulla è un semplice punto e virgola, ma non dovrebbe essere questo il problema.
Se parte vuol dire che:
  • Qualche altra condizione risulta vera.
  • Oppure che qualche altra parte del programma non è messa sotto la condizione giusta.
  • Oppure che gli ingressi leggono "cose varie", e allora ogni logica viene stravolta... la frase «o fa discesa o fa salita a suo piacimento» non è un buon segno.

non esiste un modo tecnico a livello di codice che io per quella esatta condizione che gli indico con l'if il programma non debba fare niente?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Claudio_FF on Jun 05, 2018, 07:41 pm
Quote from: simonsdec
non esiste un modo tecnico a livello di codice che io per quella esatta condizione che gli indico con l'if il programma non debba fare niente?
Così:
Code: [Select]
if(condizione);
Il fatto è che anche se è vero che per quella condizione non fa niente, non è detto che le altre non vengano anch'esse valutate, dipende da cosa si scrive, una serie di if indipendenti? Allora ciascuno viene valutato anche se qualcuno non fa niente. Una serie di if mutuamente esclusivi? Allora solo il primo che risulta vero viene "eseguito" e gli altri saltati.

Ho l'impressione che la tua ricerca dell'if che non fa niente in realtà serva a escludere gli altri, ma allora si deve scrivere una struttura if / else if / else if ecc.
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 05, 2018, 07:54 pm
Così:
Code: [Select]
if(condizione);
Il fatto è che anche se è vero che per quella condizione non fa niente, non è detto che le altre non vengano anch'esse valutate, dipende da cosa si scrive, una serie di if indipendenti? Allora ciascuno viene valutato anche se qualcuno non fa niente. Una serie di if mutuamente esclusivi? Allora solo il primo che risulta vero viene "eseguito" e gli altri saltati.

Ho l'impressione che la tua ricerca dell'if che non fa niente in realtà serva a escludere gli altri, ma allora si deve scrivere una struttura if / else if / else if ecc.
quindi il problema potrebbe partire dal flowchart iniziale che sbagliando anche if, else,if else va a fare dei stati sbagliati?
Dovrei rivedere la logica del sistema da capo potrebbe essere?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Jun 05, 2018, 08:37 pm
controlla come sono concatenati gli if!!!!!

nel tuo sketch almeno 2 sono sbagliati!
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Jun 05, 2018, 08:39 pm
guarda ti ho riscritto lo sketch e funziona, te ne mostro un pezzo poi vai avanti tu :D
Code: [Select]

void loop () {
  if (digitalRead(microswitch0) == HIGH ) { //STATO SWITCH PIANO 0
      luci(true, false, false);
      if (digitalRead(pulsante1pin) == HIGH ) { //CHIAMATA P1
         luci(false, false, false);
         while (!digitalRead(microswitch1)) {
            small_stepper.step(1);
            delay(2);
         }
         luci(false, true, false);
     } else if (digitalRead(pulsante2pin) == HIGH) { //CHIAMATA P2
         luci(false, false, false);
         while (!digitalRead(microswitch2)) {
            small_stepper.step(1);
            delay(2)
         }
         luci(false, false, true);
      }
  } else if (digitalRead(microswitch1) == HIGH) {
...
...
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 05, 2018, 09:20 pm
interessante anche questo modo di far funzionare il passo passo
in questo modo lui sentendo la pressione del pulsante cicla cicla cicla fin quando non sente il microsw alto giusto?
é un metodo diverso da quello che uso io finora molto interessante lo terrò in considerazione grazie
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 06, 2018, 02:36 pm
guarda ti ho riscritto lo sketch e funziona, te ne mostro un pezzo poi vai avanti tu :D
Code: [Select]

void loop () {
  if (digitalRead(microswitch0) == HIGH ) { //STATO SWITCH PIANO 0
      luci(true, false, false);
      if (digitalRead(pulsante1pin) == HIGH ) { //CHIAMATA P1
         luci(false, false, false);
         while (!digitalRead(microswitch1)) {
            small_stepper.step(1);
            delay(2);
         }
         luci(false, true, false);
     } else if (digitalRead(pulsante2pin) == HIGH) { //CHIAMATA P2
         luci(false, false, false);
         while (!digitalRead(microswitch2)) {
            small_stepper.step(1);
            delay(2)
         }
         luci(false, false, true);
      }
  } else if (digitalRead(microswitch1) == HIGH) {
...
...

per fare un passo in senso antiorario basta mettere un meno qui?
Code: [Select]

small_stepper.step(-1);
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Jun 06, 2018, 03:49 pm
si esatto :)
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 07, 2018, 06:25 pm
guarda ti ho riscritto lo sketch e funziona, te ne mostro un pezzo poi vai avanti tu :D
Code: [Select]

void loop () {
  if (digitalRead(microswitch0) == HIGH ) { //STATO SWITCH PIANO 0
      luci(true, false, false);
      if (digitalRead(pulsante1pin) == HIGH ) { //CHIAMATA P1
         luci(false, false, false);
         while (!digitalRead(microswitch1)) {
            small_stepper.step(1);
            delay(2);
         }
         luci(false, true, false);
     } else if (digitalRead(pulsante2pin) == HIGH) { //CHIAMATA P2
         luci(false, false, false);
         while (!digitalRead(microswitch2)) {
            small_stepper.step(1);
            delay(2)
         }
         luci(false, false, true);
      }
  } else if (digitalRead(microswitch1) == HIGH) {
...
...

ho testato il tutto
far fare un passo alla volta al Motore rende tutto impossibile a livello di peso della cabina
non ce la fa ad andare su ....
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Jun 07, 2018, 06:32 pm
cosa c'entra il peso della cabina con il fare 1 step per volta fino ad arrivare a 600  o 600 facendone 1 per volta?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 07, 2018, 06:34 pm
ho provato a riscrivere il tutto completo di commenti e sostituendo i nomi apposto dei pin
ho lasciato però le altre righe HIGH LOW LOW perché mi da come la sensazione di avere sempre tutti i step sotto controllo ed è uscito questo
Code: [Select]

#include <Stepper.h>

int Puls_PT = 2;
int Puls_1P = 3;
int Puls_2P = 4;
int SW_PT = 5;
int SW_1P = 6;
int SW_2P = 7;
int Stepsdafare;
#define StepsPerMotorRevolution 32
#define StepsdaZeroaDue 94*94
#define StepsdaZeroaUno 68*68
#define StepsdaUnoaDue  64*64
Stepper small_stepper(StepsPerMotorRevolution, 9, 11, 10, 12);

void setup() {
  pinMode(SW_PT,INPUT);
  pinMode(SW_1P,INPUT);
  pinMode(SW_2P,INPUT);
  pinMode(Puls_PT,INPUT_PULLUP);
  pinMode(Puls_1P,INPUT_PULLUP);
  pinMode(Puls_2P,INPUT_PULLUP);
  Serial.begin(9600);
  
}
void loop() {
  if (digitalRead(SW_PT) == HIGH && digitalRead(SW_1P) == LOW && digitalRead(SW_2P) == LOW) //STA AL PT
   {  
  
  
      
if (digitalRead(Puls_PT) == LOW && digitalRead(Puls_1P) == HIGH && digitalRead(Puls_2P) == HIGH) // CHIAMATA AL PT

   {   //NON DEVE FARE NULLA

   }
else if (digitalRead(Puls_PT) == HIGH && digitalRead(Puls_1P) == LOW && digitalRead(Puls_2P) == HIGH) // CHIAMATA AL 1P
{
  
  Stepsdafare = StepsdaZeroaUno;
  small_stepper.setSpeed(700);  
  small_stepper.step(Stepsdafare);  
  
}
else if(digitalRead(Puls_PT) == HIGH && digitalRead(Puls_1P) == HIGH && digitalRead(Puls_2P) == LOW) //CHIAMATA AL 2P
  {
  
  Stepsdafare = StepsdaZeroaDue;
  small_stepper.setSpeed(700);  
  small_stepper.step(Stepsdafare);
   }
   }
else if (digitalRead(SW_PT) == LOW && digitalRead(SW_1P) == HIGH && digitalRead(SW_2P) == LOW) // STA AL 1P
{



if (digitalRead(Puls_PT) == LOW && digitalRead(SW_1P) == HIGH && digitalRead(SW_2P) == HIGH)//CHIAMATA AL PT
{
  
  Stepsdafare = - StepsdaZeroaUno;
   small_stepper.setSpeed(700);  
  small_stepper.step(Stepsdafare);
}
else if (digitalRead(Puls_PT) == HIGH && digitalRead(SW_1P) == LOW && digitalRead(SW_2P) == HIGH)//CHIAMATA AL 1P
{
  
}
else if(digitalRead(Puls_PT) == HIGH && digitalRead(SW_1P) == HIGH && digitalRead(SW_2P) == LOW) // CHIAMATA AL 2P
{
  
  Stepsdafare = StepsdaUnoaDue;
  small_stepper.setSpeed(700);  
  small_stepper.step(Stepsdafare);
}
}
else if (digitalRead(SW_PT) == LOW && digitalRead(SW_1P) == LOW && digitalRead(SW_2P) == HIGH) // STA AL 2P
{


if(digitalRead(Puls_PT) == LOW && digitalRead(Puls_1P) == HIGH && digitalRead(Puls_2P) == HIGH) //CHIAMATA AL PT
{
 
  Stepsdafare = -StepsdaZeroaDue;
  small_stepper.setSpeed(700);  
  small_stepper.step(Stepsdafare);
}
else if(digitalRead(Puls_PT) == HIGH && digitalRead(Puls_1P) == LOW && digitalRead(Puls_2P) == HIGH) // CHIAMATA AL 1P
{
  
  Stepsdafare = - StepsdaUnoaDue;
  small_stepper.setSpeed(700);  
  small_stepper.step(Stepsdafare);
}
else if (digitalRead(Puls_PT) == HIGH && digitalRead(Puls_1P) == HIGH && digitalRead(Puls_2P) == LOW) // CHIAMATA AL 2P
{

}
}
}





ho testato il tutto e viene fuori una cosa stranissima
allora attacco Arduino parte sta al piano 0 spingo il piano 0 non fa finalmente niente
spingo il piano 1
parte va al piano 1 si ferma
accende 2 led il motore e non fa più nulla come se non leggesse più niente del codice e avesse finito il lavoro.....
cosa potrebbe essere?
mi sembra strano..... cosa ho sbagliato questa volta?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Silente on Jun 07, 2018, 06:35 pm
Ok, questo non lo capisco. Il motore passo passo fa sempre un passo alla volta, non credo possa fare diverso (anche se lo comandi per fare più passi velocemente ne fa, penso, uno alla volta, solo che ci pensa il programma ad ordinargli i passi necessari). Di conseguenza, almeno per quello che so, deve funzionare anche così, facendogli fare un passo alla volta come per lui normale. Spiegatemi, per favore, come può non andare
(non metto in dubbio che non vada, ma non so come risolvere)
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 07, 2018, 06:43 pm
forse non dichiarandogli la velocità lo fa lentamente non lo so...
io so solo che inizialmente le prime volte non dichiarando ancora microsw e pulsanti provavo a mandare su e giu la cabina e notavo che non ce la faceva
ho chiesto qui sul gruppo e mi è stato gentilmente postato un modo per spingere questi stepper alla maggiore velocità
e unico modo possibile e dichiarandogli
Code: [Select]

small_stepper.setSpeed(500);   
 

questo è lunico modo in cui la cabina riesce a girarmi in senso orario e antiorario
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Jun 07, 2018, 08:38 pm
il tuo problema nell'ultimo sketch che hai postato (che non capisco come fa ad accendere led visto che hai tolto tutte le istruzioni) è che dopo aver eseguito i passi per spostarti in modo arbitrario, NON SAI SE LO SWITH DEL PIANO E' PREMUTO e quindi se nessuno switch risulta premuto non rientri in nessuno dei 3 casi (presenza piano1, piano2 o piano3)

se continuavi con l'altra strada.... che ti avevo suggerito avresti già risolto.
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Jun 07, 2018, 08:41 pm
ancora una cosa:
la velocità dello stepper la puoi impostare una sola volta nel setup e quella NON cabierà più se non intervieni con un'altro comando  setSpeed
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 07, 2018, 08:49 pm
il tuo problema nell'ultimo sketch che hai postato (che non capisco come fa ad accendere led visto che hai tolto tutte le istruzioni) è che dopo aver eseguito i passi per spostarti in modo arbitrario, NON SAI SE LO SWITH DEL PIANO E' PREMUTO e quindi se nessuno switch risulta premuto non rientri in nessuno dei 3 casi (presenza piano1, piano2 o piano3)

se continuavi con l'altra strada.... che ti avevo suggerito avresti già risolto.
fosse per me io sono sempre ben accetto ai consigli, come mi hai fatto presente un nuovo modo per far funzionare l'ascensore l'ho subito testato ed ho notato che non riesce proprio a salire gli ho fatto anche il video ....
per quanto riguarda l'altra cosa che hai detto dello switch come non rientro in nessuno dei 3 casi?
nel momento in cui io sto al piano 0 e l'ascensore va o al piano 1 o al piano 2 automaticamente levandosi dal piano 0 MICROSW0 diventa LOW ed in base a dove va diventa MICROSW1 HIGH O MICROSW2 HIGH
sbaglio?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Jun 07, 2018, 08:54 pm
il microswitc cambia stato SOLO e SOLAMENTE se la cabina arriva al punto esatto per premere il micro e siccome tu non controlli questo fatto per stabilire se sei arrivato.....
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 07, 2018, 08:55 pm
tu intendi proprio di spostare questa istruzione
Code: [Select]

small_stepper.setSpeed(700);

nel void setup() ??
perché io ho visto che gli esempi dei stepper che fa anche arduino o cercandoli normalmente su internet utilizza una velocità standard che varia dai 30-60
ma ho notato che adoperando quella la cabina non si muove di striscio
allora sono ricorso a questo sketch preso, come già ho detto,grazie a un membro del forum  che però non scrive nulla nel setup ma va descrivere tutto nel loop!
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Jun 07, 2018, 08:57 pm
se il sistema che ti avevo suggerito non sei riuscito a farlo funzionare, probabilmente avevi omesso qualche istruzione  o commesso qualche errore, ma io per lo meno non ho visto nessuno sketch da verificare,
Comunque.... non fa nulla  :) non me la prendo mica neh ;)
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Jun 07, 2018, 09:01 pm
allora negli sketch che trovi in giro la velocità 30 -40 di solito è riferita ad un numero di passi per giro di 2400 (i passi all'uscita del motoriduttore) per cui non può essere più alta in effetti
mentre se come passi per giro usi quelli effettivi del motore (32 o 48 che sia) allora la velocità la devi impostare tra i 2-300 e i 700 circa, facendo un po di prove trovi quella in cui il motore non perde passi o ronza senza muoversi.
Ovvio che più è alta la velocità più sarà alto lo sforzo iniziale soprattutto se sotto cariico quindi meglio non esagerare....
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 07, 2018, 09:03 pm
se il sistema che ti avevo suggerito non sei riuscito a farlo funzionare, probabilmente avevi omesso qualche istruzione  o commesso qualche errore, ma io per lo meno non ho visto nessuno sketch da verificare,
Comunque.... non fa nulla  :) non me la prendo mica neh ;)
la logica dello sketch è esatta
il problema si trova nel momento in cui la cabina pesa troppo e il motore facendo un passo alla volta lo fa troppo lentamente e penso che ci metta 10m ad arrivare da un piano all'altro.... non so se mi spiego
il codice è esatto ! il problema si trova nel mio caso di ascensore

per quanto riguarda i microsw contando i passi andrà per forza a schiacciare o il micros1 o il microsw2
e dovrebbe trovarsi nel caso o del
Code: [Select]

else if(digitalRead(SW_PT) == LOW and digitalRead(SW_1P) == HIGH and digitalRead(SW_2P) == LOW)
{
// L'ASCENSORE SI TROVA AL PIANO 1
}


oppure

Code: [Select]

else if(digitalRead(SW_PT) == LOW and digitalRead(SW_1P) == LOW and digitalRead(SW_2P) == HIGH)
{
// L'ASCENSORE SI TROVA AL PIANO 2
}
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 07, 2018, 09:08 pm
allora negli sketch che trovi in giro la velocità 30 -40 di solito è riferita ad un numero di passi per giro di 2400 (i passi all'uscita del motoriduttore) per cui non può essere più alta in effetti
mentre se come passi per giro usi quelli effettivi del motore (32 o 48 che sia) allora la velocità la devi impostare tra i 2-300 e i 700 circa, facendo un po di prove trovi quella in cui il motore non perde passi o ronza senza muoversi.
Ovvio che più è alta la velocità più sarà alto lo sforzo iniziale soprattutto se sotto cariico quindi meglio non esagerare....

grazie mille dell'informazione questa cosa non la sapevo!
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Jun 07, 2018, 10:18 pm
Quote
la logica dello sketch è esatta
il problema si trova nel momento in cui la cabina pesa troppo e il motore facendo un passo alla volta lo fa troppo lentamente e penso che ci metta 10m ad arrivare da un piano all'altro.... non so se mi spiego
il codice è esatto ! il problema si trova nel mio caso di ascensore

se ci mette troppo per spostarsi basta cambiare il delay(2) con delayMicrosecons(10) (per esempio e riprovare....)

Quote
per quanto riguarda i microsw contando i passi andrà per forza a schiacciare o il micros1 o il microsw2
e chi lo dice?   tu lo supponi ma non è detto che sia così infatti hai detto che il programma non fa più nulla. Ergo non ha premuto il micro...
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 07, 2018, 11:14 pm
se ci mette troppo per spostarsi basta cambiare il delay(2) con delayMicrosecons(10) (per esempio e riprovare....)

e chi lo dice?   tu lo supponi ma non è detto che sia così infatti hai detto che il programma non fa più nulla. Ergo non ha premuto il micro...
se ci mette troppo per spostarsi basta cambiare il delay(2) con delayMicrosecons(10) (per esempio e riprovare....)

e chi lo dice?   tu lo supponi ma non è detto che sia così infatti hai detto che il programma non fa più nulla. Ergo non ha premuto il micro...
ok domani riprovo e vediamo che succede

per quanto riguarda il mio sketch cosa posso provare a fare?
o provato il monitor seriale ma noto che usando
Code: [Select]

Serial.println("....")

e utilizzando il monitor seriale fa tutto da solo prende parte va al piano 1 ad esempio e si blocca come fa senza il seriale... è normale?

provo sempre a portare avanti più strade possibili così mi preparo i codici e vado a testarli considerando che meno di un mese ho l'esame spero di trovare la soluzione
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Jun 07, 2018, 11:21 pm
non è che hai molte scelte :) sia con il tuo modo di operare che con quello che ti ho suggerito è imperativo che tu controlli se lo switch del piano desiderato è premuto altrimenti non sei arrivato al posto giusto
cioè: non esiste un ascensore reale in cui venda calcolato di quanti metri deve sollevarsi la cabina e poi dividere questi metri per il numero di rotazioni di un motore :D hai presente l'empire states... sarebbero ancora tutti bloccati dentro dal giorno dell'inaugurazione :)
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 08, 2018, 11:49 am
nono certo
però il mio diciamo era un'ascensore "semplice" almeno doveva esserlo  :D
e chiedendo anche ai miei professori per semplificarmi le cose prendevo i passi di tutti i piani e da li gli dichiaravo le varie sequenze che dovevano fare se alcune variabili erano high o Low etc etc il problema è che si sono create altre cose che non avevo previsto!
diciamo che quest'ascensore lo volevo fare secondo le mie conoscenze di arduino e di ciò che ho fatto negli anni ed il metodo che ho usato mi sembrava il più semplice ma forse non il più funzionale visto le conclusioni e da quanto tempo gli sto appresso..... sicuramente arriveremo al giorno che funzioni anche perché non doveva essere un progetto difficile sbaglierò qualcosa stupidamente io
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Jun 08, 2018, 12:34 pm
se vuoi renderlo più semplice allora elimina gli switch di piano raggiunto e usi solo il numero di passi per stabilire se sei arrivato al piano oppure no
per cui lo shetch diventa:
chiamo l'ascensore
se da un piano diverso da quello dove si trova
eseguo il movimento dell'ascensore
imposto il piano a cui è arrivato
aspetto nuovo comando
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 08, 2018, 06:33 pm
diventerebbe troppo ridicolo no...?
io punto tutto nel farlo venire così o il metodo tuo o il mio vecchio metodo
forse sbaglio qualche if else
o qualche collegamento non è possibile che si blocca tutto il sistema
Title: Re: realizzazione di un ascensore a 3 piani
Post by: brunello22 on Jun 08, 2018, 06:42 pm
Scusa, ma visto che hai dei microswitch ad ogni piano, non fai prima a controllare a che piano sei quando viene apppunto premuto lo switch ?

Code: [Select]

#include <Stepper.h>



Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Jun 08, 2018, 06:45 pm
:D sono 9 pagine che non gli metto uno sketch completo sperando che lo faccia da solo...:D
Title: Re: realizzazione di un ascensore a 3 piani
Post by: brunello22 on Jun 08, 2018, 06:51 pm
:D sono 9 pagine che non gli metto uno sketch completo sperando che lo faccia da solo...:D
Ah, allora lo tolgo
Era solo per fargli capire che con il suo sistema non arrivava da nessuna parte
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Jun 08, 2018, 07:46 pm
hahaha no dai ... questa è perfidia :)
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Standardoil on Jun 08, 2018, 10:43 pm
Ah, allora lo tolgo
Era solo per fargli capire che con il suo sistema non arrivava da nessuna parte

hahaha no dai ... questa è perfidia :)
No realismo, secondo me
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 09, 2018, 02:49 pm
Scusa, ma visto che hai dei microswitch ad ogni piano, non fai prima a controllare a che piano sei quando viene apppunto premuto lo switch ?

Code: [Select]

#include <Stepper.h>




esattamente quello faccio
quando ho i 3 casi
microsw0 high sta al piano 0
microsw1 high sta al piano1
microsw2 high sta al piano2

e da qui in base a che pulsante premo faccio tot passi
quello che voglio che faccia il mio sistema è esattamente questo
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 09, 2018, 02:55 pm
:D sono 9 pagine che non gli metto uno sketch completo sperando che lo faccia da solo...:D
il tuo sketch l'ho completato,finito il problema ne abbiamo già parlato in precedenza no?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: brunello22 on Jun 09, 2018, 03:38 pm
Quote
..... e da qui in base a che pulsante premo faccio tot passi
Ma se hai dei microswitch, perchè devi fare "Tot" passi ??
Manda il motore avanti o indietro fino a che non trovi il microswitch del piano che ti interessa, altrimenti a che ti servono i microswitch ?

ok, ti rimetto l'esempio che avevo postato, per farti capire meglio

Code: [Select]

#include <Stepper.h>

int Puls_PT = 2;
int Puls_1P = 3;
int Puls_2P = 4;
int SW_PT = 5;
int SW_1P = 6;
int SW_2P = 7;

#define Steps 32
Stepper small_stepper(Steps, 9, 11, 10, 12);

int piano = -1 ;
int piano_che_chiama = -1 ;
int velocita = 700 ;
int a = 0 ;

void setup() {
  pinMode(SW_PT, INPUT); // 5
  pinMode(SW_1P, INPUT); // 6
  pinMode(SW_2P, INPUT); // 7
  pinMode(Puls_PT, INPUT_PULLUP); // 2
  pinMode(Puls_1P, INPUT_PULLUP); // 3
  pinMode(Puls_2P, INPUT_PULLUP); // 4
  Serial.begin(9600);

  // test iniziale per sapere a quale piano si trova
  if (digitalRead(SW_PT) == HIGH ) piano = 0 ;
  if (digitalRead(SW_1P) == HIGH ) piano = 1 ;
  if (digitalRead(SW_2P) == HIGH ) piano = 2 ;
  if (piano < 0) {
    // deve muovere il motore fino a che non trova un piano
  }
  Serial.print("L'ascensore e' al piano ");
  Serial.println(piano);
}


void loop() {
  piano_che_chiama = piano;

  if (digitalRead(Puls_PT) == LOW ) piano_che_chiama = 0 ;
  if (digitalRead(Puls_1P) == LOW ) piano_che_chiama = 1 ;
  if (digitalRead(Puls_2P) == LOW ) piano_che_chiama = 2 ;
 
  if ( piano_che_chiama > piano ) {
    a = 0 ;
    sali(piano_che_chiama );
  }
  if ( piano_che_chiama < piano ) {
    a = 0 ;
    scendi(piano_che_chiama );
  }
}


void sali(int valore ) {
  Serial.print("E' stato chiamato dal piano ");
  Serial.println(piano_che_chiama);
  small_stepper.setSpeed(velocita);
  while ( a == LOW ) {
    if (valore == 0 )   a = digitalRead(SW_PT) ;
    if (valore == 1 )   a = digitalRead(SW_1P) ;
    if (valore == 2 )   a = digitalRead(SW_2P) ;
    small_stepper.step(1);
  }
  piano = piano_che_chiama ;
  Serial.print("Ora e' al piano ");
  Serial.println(piano);
}


void scendi(int valore ) {
  Serial.print("E' stato chiamato dal piano ");
  Serial.println(piano_che_chiama);
  small_stepper.setSpeed(velocita);
  while ( a == LOW ) {
    if (valore == 0 )   a = digitalRead(SW_PT) ;
    if (valore == 1 )   a = digitalRead(SW_1P) ;
    small_stepper.step(-1);
  }
  piano = piano_che_chiama ;
  Serial.print("Ora e' al piano ");
  Serial.println(piano);
}


Title: Re: realizzazione di un ascensore a 3 piani
Post by: Silente on Jun 09, 2018, 04:40 pm
Ma idee di questo tipo contimuiamo a dargliene. Il problema é che, sembra, il motore non possa muoversi di un passo alla volta
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Silente on Jun 09, 2018, 04:41 pm
ho testato il tutto
far fare un passo alla volta al Motore rende tutto impossibile a livello di peso della cabina
non ce la fa ad andare su ....
ho testato il tutto
far fare un passo alla volta al Motore rende tutto impossibile a livello di peso della cabina
non ce la fa ad andare su ....
Ecvo il messaggio a cui mi riferisco
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 09, 2018, 04:53 pm
Ma se hai dei microswitch, perchè devi fare "Tot" passi ??
Manda il motore avanti o indietro fino a che non trovi il microswitch del piano che ti interessa, altrimenti a che ti servono i microswitch ?




effettivamente ci sono vari metodi per creare un progetto di un'ascensore
io avevo pensato di fatti a quello del contare i passi che mi servono per andare da npiano a npiano con l'ausilio del microsw
i microsw mi servono appunto per determinare a quale piano si trova l'ascensore e quanti npassi deve fare per andare da un piano all'altro.
Ripeto anche il tuo metodo è funzionante,sicuramente anche più completo e più elaborato ma inizialmente lo volevo provare a fare secondo l'idea del contare i passi
ora testerò il tuo e vediamo come risponde l'ascensore!
Grazie del tempo dedicato a scrivere un nuovo tipo di codice!
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 09, 2018, 07:32 pm
Ma se hai dei microswitch, perchè devi fare "Tot" passi ??
Manda il motore avanti o indietro fino a che non trovi il microswitch del piano che ti interessa, altrimenti a che ti servono i microswitch ?

ok, ti rimetto l'esempio che avevo postato, per farti capire meglio

Code: [Select]

#include <Stepper.h>

int Puls_PT = 2;
int Puls_1P = 3;
int Puls_2P = 4;
int SW_PT = 5;
int SW_1P = 6;
int SW_2P = 7;

#define Steps 32
Stepper small_stepper(Steps, 9, 11, 10, 12);

int piano = -1 ;
int piano_che_chiama = -1 ;
int velocita = 700 ;
int a = 0 ;

void setup() {
  pinMode(SW_PT, INPUT); // 5
  pinMode(SW_1P, INPUT); // 6
  pinMode(SW_2P, INPUT); // 7
  pinMode(Puls_PT, INPUT_PULLUP); // 2
  pinMode(Puls_1P, INPUT_PULLUP); // 3
  pinMode(Puls_2P, INPUT_PULLUP); // 4
  Serial.begin(9600);

  // test iniziale per sapere a quale piano si trova
  if (digitalRead(SW_PT) == HIGH ) piano = 0 ;
  if (digitalRead(SW_1P) == HIGH ) piano = 1 ;
  if (digitalRead(SW_2P) == HIGH ) piano = 2 ;
  if (piano < 0) {
    // deve muovere il motore fino a che non trova un piano
  }
  Serial.print("L'ascensore e' al piano ");
  Serial.println(piano);
}


void loop() {
  piano_che_chiama = piano;

  if (digitalRead(Puls_PT) == LOW ) piano_che_chiama = 0 ;
  if (digitalRead(Puls_1P) == LOW ) piano_che_chiama = 1 ;
  if (digitalRead(Puls_2P) == LOW ) piano_che_chiama = 2 ;
 
  if ( piano_che_chiama > piano ) {
    a = 0 ;
    sali(piano_che_chiama );
  }
  if ( piano_che_chiama < piano ) {
    a = 0 ;
    scendi(piano_che_chiama );
  }
}


void sali(int valore ) {
  Serial.print("E' stato chiamato dal piano ");
  Serial.println(piano_che_chiama);
  small_stepper.setSpeed(velocita);
  while ( a == LOW ) {
    if (valore == 0 )   a = digitalRead(SW_PT) ;
    if (valore == 1 )   a = digitalRead(SW_1P) ;
    if (valore == 2 )   a = digitalRead(SW_2P) ;
    small_stepper.step(1);
  }
  piano = piano_che_chiama ;
  Serial.print("Ora e' al piano ");
  Serial.println(piano);
}


void scendi(int valore ) {
  Serial.print("E' stato chiamato dal piano ");
  Serial.println(piano_che_chiama);
  small_stepper.setSpeed(velocita);
  while ( a == LOW ) {
    if (valore == 0 )   a = digitalRead(SW_PT) ;
    if (valore == 1 )   a = digitalRead(SW_1P) ;
    small_stepper.step(-1);
  }
  piano = piano_che_chiama ;
  Serial.print("Ora e' al piano ");
  Serial.println(piano);
}



ho provato a testarlo ma non riesce ne a fare salita ne discesa...
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Jun 09, 2018, 08:26 pm
ho provato a testarlo ma non riesce ne a fare salita ne discesa...
scusami ma te lo ripeto
stai dicendo una cavolata (sono stato gentile :D )
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 09, 2018, 09:03 pm
scusami ma te lo ripeto
stai dicendo una cavolata (sono stato gentile :D )

dammi un contatto ti giro il video
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Jun 09, 2018, 09:31 pm
non voglio il video, ti giuro che ci credo che non ti funzionava!!!

il problema è dello sketch che hai scritto e non del muovere ad un passo alla volta il motore

CHE E' LA STESSA COSA CHE FA LA LIBRERIA QUANDO LO FAI MUOVERE PER 68*68 PASSI

il motore si muove SEMPRE ad un passo per volta

te lo ripeto, probabilmente il delay(2) che ti avevo messo è esagerato oppure hai fatto qualche altro errore
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 09, 2018, 10:18 pm
non voglio il video, ti giuro che ci credo che non ti funzionava!!!

il problema è dello sketch che hai scritto e non del muovere ad un passo alla volta il motore

CHE E' LA STESSA COSA CHE FA LA LIBRERIA QUANDO LO FAI MUOVERE PER 68*68 PASSI

il motore si muove SEMPRE ad un passo per volta

te lo ripeto, probabilmente il delay(2) che ti avevo messo è esagerato oppure hai fatto qualche altro errore
Code: [Select]

#include <Stepper.h>
int pulsante0pin=2;
int pulsante1pin=3;
int pulsante2pin=4;
int microswitch0=5;
int microswitch1=6;
int microswitch2=7;

const int stepsPerRevolution = 32;
Stepper myStepper(stepsPerRevolution, 9, 11, 10, 12);





void setup() {
pinMode(pulsante0pin,INPUT);
pinMode(pulsante1pin,INPUT);
pinMode(pulsante2pin,INPUT);
pinMode(microswitch0,INPUT);
pinMode(microswitch1,INPUT);
pinMode(microswitch2,INPUT);



}

void loop() {

  if (digitalRead(microswitch0) == HIGH ) { //STATO SWITCH PIANO 0
     
      if (digitalRead(pulsante1pin) == LOW ) { //CHIAMATA P1
         
         while (!digitalRead(microswitch1)) {
            myStepper.step(1);
            delay(2);
         }
         
     } else if (digitalRead(pulsante2pin) == LOW) { //CHIAMATA P2
         
         while (!digitalRead(microswitch2)) {
            myStepper.step(1);
            delay(2);
         }
         
      }
  }
 
  else if (digitalRead(microswitch1) == HIGH) {

 
    if(digitalRead(pulsante0pin) == LOW )
         { //chiamata PT
         while(!digitalRead(microswitch0))  {
          myStepper.step(-1);
          delay(2);
           }
   }
    else if(digitalRead(pulsante2pin) == LOW)
    {
      while(!digitalRead(microswitch2))
      {
        myStepper.step(1);
        delay(2);
      }
    }
  }
  else if(digitalRead(microswitch2) == HIGH)
  {

    if(digitalRead(pulsante0pin) == LOW)
    {
      while(!digitalRead(microswitch0)) {
        myStepper.step(-1);
        delay(2);
      }
    }
    else if (digitalRead(pulsante1pin) == LOW)
    {
      while(digitalRead(microswitch1))
      {
        myStepper.step(-1);
        delay(2);
      }
    }
  }
}
 


tralasciando il delay(2)
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Jun 09, 2018, 11:14 pm
infatti lo vedi che manca l'istruzione

myStepper.setSpeed(600)

che ti avevo detto di aggiungere come ultima riga del setup

ma un minimo di verifica no?

e poi ti avevo anche detto di abbassare appunto il delay(2) con delayMiscoseconds(10) e probabilmente anche questo è inutile anzi sicuramente si potrebbe levare qualsiasi delay, ci pensa la libreria ad aggiungerli

Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 10, 2018, 02:45 pm
riproverò sinceramente non Avevo notato il set.Speed... speriamo sia quello
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 12, 2018, 02:41 pm
infatti lo vedi che manca l'istruzione

myStepper.setSpeed(600)

che ti avevo detto di aggiungere come ultima riga del setup

ma un minimo di verifica no?

e poi ti avevo anche detto di abbassare appunto il delay(2) con delayMiscoseconds(10) e probabilmente anche questo è inutile anzi sicuramente si potrebbe levare qualsiasi delay, ci pensa la libreria ad aggiungerli


testato... risolto il problema della velocità sale e scende come faceva con il mio sketch però ha un'altro problema
l'ho simulato senza cabina chiudendo e aprendo i microsw a mano e spingendo i pulsanti
fa una cosa strana che non so come sistemarla:
premendo il pulsante il motore non va in funzione finché non il microsw di piano faccio esempio piano0 MicroSw0 HIGH
finché questo non diventa LOW l'ascensore non si muove.....
ciò nella realtà con la cabina non succederà mai perché questa starà sempre al piano 0 e spingerà sempre il microsw0 quindi ti troverai sempre nel caso0 (MICROSW0 HIGH) e il sistema non funziona perché spingendo il pulsante non fa niente finche il microsw0 diventa LOW aperto.....
mi sono spiegato?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Jun 12, 2018, 05:52 pm
ti sei spiegato ma vuol dire che hai fatto qualche errore nello sketch
Code: [Select]

if (digitalRead(microswitch0) == HIGH ) {           //se PIANO 0
      if (digitalRead(pulsante1pin) == LOW ) {      // se CHIAMATA P1
         while (!digitalRead(microswitch1)) {      // fino a che switch piano1 è off
            myStepper.step(1);                       // fai un passo 
         }                                                                     
     }


non centra nulla lo switch di piano 0 (una volta che è entrato nell'if)
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 12, 2018, 08:46 pm
strano.....
e avevo un'altro problema per alimentare il motore passo passo in modo esterno da arduino come posso fare?
5v max corrente 400mA ?
perché volevo liberare i 5v di arduino per i pulsanti e microsw
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Jun 12, 2018, 11:27 pm
Tassativo non alimentare motori con Arduino!

ti prendi un normalissimo alimentatore di quelli per ricaricare i cellulari che abbia in uscita (almeno) 600 mA e lo usi per il motore
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 13, 2018, 01:10 pm
ah perfetto....  oppure potrei sfruttare la porta usb per arduino
usare i 5v per microsw led e pulsanti
e sfruttare VIN per il motore che ne pensi ?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Jun 13, 2018, 09:06 pm
no, vin per il motore no! Meglio alimentarlo a parte, tutto il resto si
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 13, 2018, 09:20 pm
il problema è che non so come alimentarlo
perché da quello che ho letto vuole 5v max 400mA
le pile arrivano a 4.8V e ok ma il problema è l'amperaggio che stiamo sopra i 550mA come posso fare?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Standardoil on Jun 13, 2018, 11:06 pm
che pile hai?
cioè: 550mAh sono un valore strano per le pile
comunque non è un problema se la CAPACITA' delle pile è superiore all'ASSORBIMENTO del carico
cambiano anche le unità di misura.........
spiega bene che pile hai
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Jun 14, 2018, 12:27 am
tanto per chiarire...


il problema è che non so come alimentarlo

questo devi leggerlo (parafrasando Totò)

perché da quello che ho letto vuole 5v max,;:.  400mA

cioè al massimo 5 V e come minimo 400 mA

le pile arrivano a 4.8V e ok ma il problema è l'amperaggio che stiamo sopra i 550mA come posso fare?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 14, 2018, 12:40 pm
vuole 5v e 400mA max
devo ancora cercarle su internet le pile ma ho visto che vanno tutti dai 4.8v e minimo 550mAh ma ho paura che si fonda il motore
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Standardoil on Jun 14, 2018, 12:43 pm
Il motore si fonda sui campi magnetici, tranquillo
Le tue fondazioni in elettrotecnica invece?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 14, 2018, 01:04 pm
quindi Va bene qualsiasi amperaggio ?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Standardoil on Jun 14, 2018, 01:10 pm
Quanto deve durare la dimostrazione?
Compreso il tempo di collaudo e sviluppo?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 14, 2018, 01:15 pm
max max 5m penso la dimostrazione ma a tenermi largo perché da quello che ho capito tutta la tesina deve durare 10-12m

il motore hai capito quale ho?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Standardoil on Jun 14, 2018, 01:21 pm
No, non so che motore hai
Per un quarto d'ora a 400 mA ti bastano pile da 100 mAh
Consiglio: stai largo,  sono sicuro che dovrai provare parecchio
Stai molto largo, perché  mi sembra che il tuo debito tecnico sia elevato
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 14, 2018, 01:27 pm
io batterie di queste tipo non le trovo
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Standardoil on Jun 14, 2018, 01:28 pm
Allora Santo alimentatore. ..
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 14, 2018, 01:33 pm
stavo vedendo ad esempio gli alimentatori che colleghi alla presa di corrente anche con tensione variabile ma hanno sempre un amperaggio alto
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Jun 14, 2018, 09:19 pm
stavo vedendo ad esempio gli alimentatori che colleghi alla presa di corrente anche con tensione variabile ma hanno sempre un amperaggio alto
ti prego... fidati, fidati ciecamente, l'amperaggio dell'alimentatore più è alto più sei sicuro che possa alimnentare il tuo progetto, se tu ti portassi (con la cariola) un alimentatore da 5v e 4KA sicuramente andrebbe bene

detto questo un alimentatore così non lo trovi, per cui se prendi un semplice caricabatterie per Ipad (5v 1A) o da cellulare (5V - almeno 700-800mA) sei a cavallo
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Standardoil on Jun 14, 2018, 09:48 pm
occhio a dire cose del genere
abbiamo già avuto un caso di persona che siccome non ha capito una beneamata fava si è poi lamentata che gli abbiamo fatto comperare un motore (passo passo anche quello) inutile
io dico solo che un diplomando di una scuola tecnica elettronica che non sa dimensionare di massima un alimentatore è meglio se si rimbocca le maniche, non se si fida



PS alimentatore 4KA a 5 volt, mi sembra ci siano, per alimentare voltametri nell'industria dell'alluminio
e sono pericolosucci, se ci fai corto te lo ricordi, oh se te lo ricordi.....
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Jun 14, 2018, 09:58 pm
occhio a dire cose del genere
abbiamo già avuto un caso di persona che siccome non ha capito una beneamata fava si è poi lamentata che gli abbiamo fatto comperare un motore (passo passo anche quello) inutile
io dico solo che un diplomando di una scuola tecnica elettronica che non sa dimensionare di massima un alimentatore è meglio se si rimbocca le maniche, non se si fida



PS alimentatore 4KA a 5 volt, mi sembra ci siano, per alimentare voltametri nell'industria dell'alluminio
e sono pericolosucci, se ci fai corto te lo ricordi, oh se te lo ricordi.....
:D si ma non li trovi su Amazon :D

se ho capito giusto ( e leggendo lo sketch pare proprio così)
per comandare lo step motor usa questo


che come corrente può erogare al max 500 mA
come ho detto il caricabatterie per l'Ipad è più che sufficiente :)
Title: Re: realizzazione di un ascensore a 3 piani
Post by: DriftBoy318is on Jun 15, 2018, 12:05 am
allora guarda se vuoi usare una pila, te ne vai in un negozio di modellismo e ti prendi una bella lipo 2s da 400mAh in su quanto ti pare (il valore 5v max 400 mAh del motore si riferisce al suo carico massimo di assorbimento oltre il quale gli avvolgimenti subiscono danni e ciò vuol dire semplicemente che è il motore che chiede la corrente non sei tu a dargliela, e cioè se tu hai una fonte da 5v 1000 mAh il motore assorbirà al massimo 400 mAh) e dopo la batteria prendi un bel regolatore di tensione da modellismo a 5v, puoi prendere anche qualcosa al niMh se vuoi...
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Claudio_FF on Jun 15, 2018, 07:49 am
Ma una comune batteria 9V non rientra già nelle specifiche richieste?
Ho il dubbio solo sulla corrente massima che è in grado di erogare.

Per il resto, 10 minuti di tesina senza le conoscenze che si acquisiscono nelle prime tre lezioni di elettrotecnica del primo anno (relazione esistente tra tensione e corrente, e unità di misura delle grandezze elettriche) sono ampiamente sufficienti per un bagno di sangue... almeno così era fino ai primi anni 80.

In particolare invito a non confondere mai mA con mAh (soprattutto a un esame di quinta superiore).

EDIT: no, da questa tabellina (https://www.electronetmodena.it/pileabc.pdf) sembra che le 9V non eroghino abbastanza corrente (naturalmente la colonna capacità è espressa in mAh e non mA, mai che la azzecchino :smiley-roll:).
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Standardoil on Jun 15, 2018, 10:44 am
mah,
io un santo alimentatore lo prenderei
oppure una di quelle power bank muscolocicce, da una caterva di milliampereora
guarda, per andare al super risparmio, ti prendi una cosa come questa
https://www.ebay.de/itm/Dual-USB-5V-1A-2-1A-Mobile-Power-Bank-18650-Battery-Charger-PCB-Module-Board-/272509710619?clk_rvr_id=1565966130933&utm_medium=cpc&utm_source=twenga&utm_campaign=twenga&utm_param=eyJlcyI6MCwicyI6NTMzODY0NywiY2kiOiIwNDdhNjcxMWIzOWExZDNhYTUxNjE5ZGM0OGFkNmM5MyIsImkiOiIxMTg5MDMyMTgwMzc2MjU0Mzk5IiwidHMiOjE1MjkwNTIxNjMsInYiOjMsInNvIjoxNTAwLCJjIjo2NDM1N30%3D&rmvSB=true (https://www.ebay.de/itm/Dual-USB-5V-1A-2-1A-Mobile-Power-Bank-18650-Battery-Charger-PCB-Module-Board-/272509710619?clk_rvr_id=1565966130933&utm_medium=cpc&utm_source=twenga&utm_campaign=twenga&utm_param=eyJlcyI6MCwicyI6NTMzODY0NywiY2kiOiIwNDdhNjcxMWIzOWExZDNhYTUxNjE5ZGM0OGFkNmM5MyIsImkiOiIxMTg5MDMyMTgwMzc2MjU0Mzk5IiwidHMiOjE1MjkwNTIxNjMsInYiOjMsInNvIjoxNTAwLCJjIjo2NDM1N30%3D&rmvSB=true)
e ci metti un paio di 18650 prestate da qualche tuo amico che fuma la sigaretta elettronica, tanto poi gliele ridai

certo che scegliere ora l'alimentazione è indice di forte debito tecnico...
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 15, 2018, 12:11 pm


Salcar Alimentatore Universale 5V 1A Power Adapter 5,5x2,1mm Per PSU Telecamera CCTV Monitor, Esterno masterizzatore Blu-ray / Drives, esterne CD / DVD / Drives, Dischi rigidi esterni

pensavo a questo può andare?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Jun 15, 2018, 12:29 pm
si

però assicurati che alla postazione d'esame abbiano una presa nei pressi, non vorrei che... "Scusate non è che qualcuno ha una prolunga e magari anche una ciabatta da prestarmi..."
Title: Re: realizzazione di un ascensore a 3 piani
Post by: zoomx on Jun 15, 2018, 03:19 pm
Voto per il power-bank che poi posso sempre riciclare per il suo uso standard.
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 15, 2018, 04:43 pm
ok
dove altro posso cercarlo oltre a ebay?
che ho visto che la spedizione stiamo su metà luglio e me serve il prima possibile
Title: Re: realizzazione di un ascensore a 3 piani
Post by: brunello22 on Jun 15, 2018, 04:46 pm
Comunque, visto che il motorino non arriva a consumare nemmeno 200 mA e il resto sono quisquiglie, mettici una 9V che tanto un paio d'ore le fai

Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 15, 2018, 04:58 pm
però il motorino passo passo mio è 5v dc non da problemi utilizzando una 9v ?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: brunello22 on Jun 15, 2018, 05:56 pm
Con la pila alimenti Arduino e da li prelevi i 5V per il motorino

Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 15, 2018, 06:41 pm
invece microsw e pulsanti ?
ho notato che usando i 3.3v senza resistenza ho un ritorno di corrente... allora volevo liberare i 5v per i microsw e pulsanti
VIN per motore
e arduino tramite i 5v del alimentatore
faccio male?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Claudio_FF on Jun 16, 2018, 10:20 am
ho notato che usando i 3.3v senza resistenza ho un ritorno di corrente... allora volevo liberare i 5v....
Metti uno schema esatto di come hai collegato le cose, e un altro di come vorresti.
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 16, 2018, 03:47 pm


Questi sono i collegamenti adesso
considerando i 3.3v di arduino per pulsanti e microsw
e non ho messo i collegamenti del motore perché non trovo la scheda che uso io anche se i collegamenti mi sembrano abbastanza semplici gli porto direttamente ai pin con un filo ln1-ln2-ln3-ln4 del motore
e gli porto 5v e gnd diretti.....

si vede l'immagine?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Silente on Jun 16, 2018, 03:50 pm
No
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 16, 2018, 03:52 pm
come posso girarvi un file pdf?
ho fatto lo screen a fritzing l'ho fatto in formato pdf ma non so come mandarvelo
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 16, 2018, 08:26 pm
esiste un modo per riuscire a farvi vedere l'immagine?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: brunello22 on Jun 16, 2018, 08:33 pm
eppure basta fare   REPLY

e cliccare su Attachments and other options (http://"http://forum.arduino.cc/index.php?action=post;topic=534874.165;last_msg=3774473#")


sempre che il file sia di dimensioni decenti
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 16, 2018, 08:42 pm
Questi sono i collegamenti adesso
considerando i 3.3v di arduino per pulsanti e microsw
e non ho messo i collegamenti del motore perché non trovo la scheda che uso io anche se i collegamenti mi sembrano abbastanza semplici gli porto direttamente ai pin con un filo ln1-ln2-ln3-ln4 del motore
e gli porto 5v(di arduino) e gnd diretti.....



Title: Re: realizzazione di un ascensore a 3 piani
Post by: Claudio_FF on Jun 16, 2018, 09:35 pm
Quote from: simonsdec
Questi sono i collegamenti adesso
Sono i collegamenti esatti esatti?

A parte il motore, non manca niente?

Le resistenze del post #83 (http://forum.arduino.cc/index.php?topic=534874.msg3759136#msg3759136) sono sparite?

Se sono sparite... lo vedi che quando i pulsanti chiudono mettono in cortocircuito secco l'alimentazione 3.3V?

Anzi... visto che tre pulsanti affermi che sono di tipo normalmente chiuso, allora l'alimentazione 3.3V è sempre costantemente in corto (e magari il regolatore 3.3V si è già fumato da un bel po'...).

Vuoi mai che sia questo cortocircuito lo strano "ritorno di corrente"?

Dopo tre mesi e 180 post (più le centinaia di schemi che si trovano googlando), qual'è ancora il dubbio su come collegare e leggere dei semplici pulsanti o contatti? Perché ci sono in tutto solo QUATTRO possibilità. Già che ce l'ho metto anche il disegnino (l'ultimo):


Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 17, 2018, 02:12 pm
le resistenze le ho levato perché mi è stato detto che usando i 3.3v non servivano
appunto volevo provare a liberare i 5v di arduino per sfruttare le resistenze
così comè sono sbagliati i collegamenti ?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Jun 17, 2018, 03:11 pm
ma i post dal #79, all #85 te li sei fumati? li dicevi di aver capito e assodato come doveva essere realizzato il circuito ed ora ritorniamo li?

come direbbero oltre manica
"Oooooohhh my God!"
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Claudio_FF on Jun 17, 2018, 04:20 pm
Quote from: simonsdec
le resistenze le ho levato perché mi è stato detto che usando i 3.3v non servivano
Ti è anche stato detto che invece servono.
Quindi in base a quale criterio decidi quale delle due cose è vera e quale falsa?
Tra l'altro adesso sono davvero curioso di sapere dove è stato detto (ma so già che mi terrò la curiosità :smiley-roll:).

Quote
appunto volevo provare a liberare i 5v di arduino
Non li puoi sdoppiare?

Quote
così comè sono sbagliati i collegamenti ?
È stato detto che sono sbagliati.
È stato detto perché sono sbagliati.
È stato (ri)mostrato come vanno fatti.

(Ri)domando: qual'è il dubbio? La legge di Ohm? Come si ripartiscono le tensioni su DUE elementi in serie? Come leggere una tensione ai capi di una resistenza? Leggere uno schema elettrico? Trasformarlo in collegamento pratico?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Patrick_M on Jun 17, 2018, 04:31 pm
la cosa nasce qui .... ma credo che il discorso fosse differente

Io consiglio alimentazione esterna per il motore. Per switch e pulsanti puoi usare i 5V o i 3,3V(nel secondo caso senza resistenza). Per i led usa i pin come output.
Comunque quali led?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Claudio_FF on Jun 17, 2018, 04:44 pm
Ah.... Silente... a cosa ti riferivi con "senza resistenza" ?

E comunque, simonsdec, senza resistenza non vuole mica dire necessariamente di metterci un corto secco al suo posto, magari invece vuol dire lasciare scollegato, basta capire quello che si sta facendo e perché (sempre legge di Ohm su due elementi in serie).
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Standardoil on Jun 17, 2018, 05:18 pm
quando parlavo di debito tecnico sapevo di cosa parlavo
comunque, lo OP adesso ha dei problemi impellenti:
1) capire se dal punto di vista elettrico fuziona ancora tutto
2) revisionare in fretta il programma
Come ho già detto io per la seconda parte NON ci sarò, se uno vuole presentare un progetto con arduino almeno deve saper programmare
e anche la prima sarebbe giusto lasciar stare, ma voglio dare prova di buona volontà
per lo OP:
hai un tester, e lo sai usare?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 17, 2018, 07:09 pm
quando parlavo di debito tecnico sapevo di cosa parlavo
comunque, lo OP adesso ha dei problemi impellenti:
1) capire se dal punto di vista elettrico fuziona ancora tutto
2) revisionare in fretta il programma
Come ho già detto io per la seconda parte NON ci sarò, se uno vuole presentare un progetto con arduino almeno deve saper programmare
e anche la prima sarebbe giusto lasciar stare, ma voglio dare prova di buona volontà
per lo OP:
hai un tester, e lo sai usare?
si ho un tester e si penso di saperlo usare
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Standardoil on Jun 17, 2018, 08:22 pm
che arduino hai?
partiamo dal presupposto che hai una UNO
scollega tutto (ma TUTTO)
metti lo usb, e misura
tra gnd e 5v
tra gnd e 3v3
e vediamo se abbiamo qualcosa
poi metti uno scketch semplice
del tipo
Code: [Select]


void setup (void){}
void loop(void){

for (byte i=2; i<19; i++){
pinMode(i,OUTPUT);
digitalWrite(i, !digitalRead(i));
}
delay(250);
}


che ogni quarto di secondo alza e abbassa tutte le uscite, saltando la seriale
dovresti vedere col tester che le uscite da 2 a 19 oscillano all'unisono
poi andiamo avanti
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Claudio_FF on Jun 17, 2018, 08:30 pm
Un'altra prova, se si ha un alimentatore 9V, è quella di alimentare Arduino dal jack o dal terminale Vin (lasciando scollegato l'USB), e misurare di nuovo i 5 e i 3.3V, così scopriamo se anche il regolatore 5V è ancora buono.

Alla fine di tutte queste prove meglio caricare il programma base blink per scongiurare problemi alle uscite quando si ricollega il resto.

Quote
ogni quarto di secondo alza e abbassa tutte le uscite
Provando con un LED non ci sono problemi a vedere il lampeggio, con un tester non vorrei che le cifre variassero troppo rapidamente, metterei un delay di 1000ms invece che 250.
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Standardoil on Jun 17, 2018, 08:56 pm
Sì, giusto, un led rosso con una resistenza da....
e qui un minimo di teoria, dai che lo OP ne tiene di bisogno
la tensione ( e se leggo voltaggio ti stronco, sia chiaro)
la tensione o differenza di potenziale tra gnd e le uscite di arduino vale 5V
la tensione di lavoro di un Led rosso è circa 1,5V
la corrente di un led standard potrebbe essere 10 mA, ma per vedere se si accende anche 5 o 2 vanno bene
dalla legge di Ohm sappiamo che 5-1.5-I*R=0
doce 5 è la ddp totale, 1,5 la caduta sul diodo e la caduta sulla resistenza si calcola dal prodotto corrente (imposta) e resistenza (ignota)
ovvero I*R=3.5
posta I=0.005 (5 milliAmpere) si ha R=700 Ohm
che NON è un valore normalizzato, quindi si sceglie il valore normalizzato più vicino (a scelta se in alto o in basso) ovvero 820 per tenere la corrente più bassa oppure 680 per alzare un poco la corrente
e poi si fa (ma si deve fare sempre e veramente) un calcolo di verifica, tenendo presente il valore estremo della tolleranza della resistenza, se prendi 680 in E12 al 10% potrebbe essere al minimo 610ohm circa
che fa una corrente nel caso peggiore di 3.5/610, meno di 6 milliampere, OK approvato
ecco come devi calcolare la resistenza del diodo
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 17, 2018, 09:37 pm
domani faccio tutti questi test e vi aggiorno!
Grazie del aiuto
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 19, 2018, 03:35 pm
dal punto di vista elettrico funziona ancora tutto
Title: Re: realizzazione di un ascensore a 3 piani
Post by: testato on Jun 19, 2018, 04:23 pm
Quote
legge di Ohm sappiamo che 5-1.5-I*R=0
E questo dovrebbe aiutare un eventuale utente che passa di qui ?

Propongo ban di una settimana per tentativo di confusione aggravato da futili motivi  :smiley-yell:  :smiley-yell:  :smiley-yell:

Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 19, 2018, 04:33 pm
questi sono i nuovi collegamenti alimentando arduino dal jack (5v1A)
usando VIN(anche se non lo mostro) per il motore
ed il resto come in figura tralasciando per ora i led che inserirò al momento che funzioni tutto
il problema è che con le resistenza non fa nulla....
levandole ho i stessi problemi di prima diciamo fa 2 chiamate e si blocca tutto.....
Title: Re: realizzazione di un ascensore a 3 piani
Post by: brunello22 on Jun 19, 2018, 04:47 pm
Lo sai che se alimenti Arduino attraverso il Jack, con 5v, sul Vin hai poco più di 4V e sul pin 5V di arduino è ancora più bassa ?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: brunello22 on Jun 19, 2018, 04:48 pm
Ma una foto di quei finecorsa ce l'hai ?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Standardoil on Jun 19, 2018, 04:49 pm
E questo dovrebbe aiutare un eventuale utente che passa di qui ?

Propongo ban di una settimana per tentativo di confusione aggravato da futili motivi  :smiley-yell:  :smiley-yell:  :smiley-yell:


cosa non ti è chiaro della legge di ohm?
Giorgio Simone Ohm così la aveva scritta:
La somma (algebrica) delle forze elettrotromotrici e delle cadute di tensione in un circuito elettrico è pari a zero
Se si rischia il ban per citare una legge di natura, a tutti quelli che seguono Lavoisier e respirano ossigeno che gli farai?
Title: Re: realizzazione di un ascensore a 3 piani
Post by: simonsdec on Jun 19, 2018, 05:00 pm
eccoli
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Standardoil on Jun 19, 2018, 05:08 pm
Fai una foto di come li hai collegati, che vediamo
Title: Re: realizzazione di un ascensore a 3 piani
Post by: testato on Jun 19, 2018, 05:49 pm
cosa non ti è chiaro della legge di ohm?
Giorgio Simone Ohm così la aveva scritta:
La somma (algebrica) delle forze elettrotromotrici e delle cadute di tensione in un circuito elettrico è pari a zero
Se si rischia il ban per citare una legge di natura, a tutti quelli che seguono Lavoisier e respirano ossigeno che gli farai?
Se improvvisamente non riesci più ad entrare sul forum significa che sono riuscito a convincere Massimo a farmi Mod  :smiley-yell:
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Claudio_FF on Jun 19, 2018, 07:01 pm
Quote from: simonsdec
questi sono i nuovi collegamenti alimentando arduino dal jack (5v1A)
ed il resto come in figura tralasciando per ora i led che inserirò al momento che funzioni tutto
il problema è che con le resistenza non fa nulla....
levandole ho i stessi problemi di prima diciamo fa 2 chiamate e si blocca tutto.....
Dal jack si entra con 9V.

Se si ha già un'alimentazione stabilizzata a 5V, si entra diretti sul terminale 5V.

La bassa tensione che deriva dall'entrare con 5V dal jack, è già da sola sufficiente a creare problemi.

Ma in più... non so da quanto sono le resistenze di pulldown, se sono da 220Ω come nel disegno (http://forum.arduino.cc/index.php?action=dlattach;topic=534874.0;attach=262835) allora le tre di sinistra (collegate ai pulsanti normalmente chiusi) sono già sufficienti ad assorbire più di 50mA (un'esagerazione in ogni caso, ma con l'alimentazione messa male ancora peggio).

E mancano sempre i condensatori di debounce di cui si parlava al post #84, la cui assenza potrebbe generare i famosi comandi multipli a raffica ad ogni azionamento di pulsanti e finecorsa.
Title: Re: realizzazione di un ascensore a 3 piani
Post by: Standardoil on Jun 19, 2018, 07:17 pm
Se improvvisamente non riesci più ad entrare sul forum significa che sono riuscito a convincere Massimo a farmi Mod  :smiley-yell:
e perche? cosa ho fatto di male?
lo OP ha evidentemente dei debiti teorici, che ho cominciato a colmare
vuoi proseguire tu?
Poi, per me, fai pure, lo spessore di una persona si vede anche dal tipo di minacce che fa
Title: Re: realizzazione di un ascensore a 3 piani
Post by: brunello22 on Jun 20, 2018, 12:26 am
Mi fai un favore ?

Me lo colleghi in questo modo



e poi provi ad usare questo sketch

Code: [Select]


#include <Stepper.h>

int Puls_PT = 2;
int Puls_1P = 3;
int Puls_2P = 4;
int SW_PT = 5;
int SW_1P = 6;
int SW_2P = 7;

#define Steps 32
Stepper small_stepper(Steps, 9, 11, 10, 12);

int piano = -1 ;
int piano_che_chiama = -1 ;
int velocita = 500 ; // Aumentare fino a 700 se se vuole piu' veloce
int a = 0 ;

void setup() {
  pinMode(SW_PT, INPUT_PULLUP); //  piano terra
  pinMode(SW_1P, INPUT_PULLUP); //  primo paino
  pinMode(SW_2P, INPUT_PULLUP); //  secondo paino
  pinMode(Puls_PT, INPUT_PULLUP); // chiamata piano terra
  pinMode(Puls_1P, INPUT_PULLUP); //  chiamata primo piano
  pinMode(Puls_2P, INPUT_PULLUP); //  chiamata secondo piano
  Serial.begin(9600);

  // test iniziale per sapere a quale piano si trova
  if (digitalRead(SW_PT) == LOW ) piano = 0 ;
  if (digitalRead(SW_1P) == LOW ) piano = 1 ;
  if (digitalRead(SW_2P) == LOW ) piano = 2 ;
  if (piano < 0) {
    // deve muovere il motore fino a che non trova un piano
    Serial.println("L'ascensore non e' in nessun piano ");
  }
  else {
    Serial.print("L'ascensore e' al piano ");
    Serial.println(piano);
  }
}

void loop() {
  piano_che_chiama = piano;
  if (digitalRead(Puls_PT) == LOW ) piano_che_chiama = 0 ;
  if (digitalRead(Puls_1P) == LOW ) piano_che_chiama = 1 ;
  if (digitalRead(Puls_2P) == LOW ) piano_che_chiama = 2 ;
  if ( piano_che_chiama > piano ) {
    a = 1 ;
    sali(piano_che_chiama );
  }
  if ( piano_che_chiama < piano ) {
    a = 1 ;
    scendi(piano_che_chiama );
  }
}

void sali(int valore ) {
  Serial.print("E' stato chiamato dal piano ");
  Serial.println(piano_che_chiama);
  Serial.print("Si muovera' fino a che non scatta il finecorsa del piano ");
  Serial.println(piano_che_chiama);
  small_stepper.setSpeed(velocita);
  while ( a == HIGH ) // Aspetta che venga premuto il finecorsa
  {
    if (valore == 0 )   a = digitalRead(SW_PT) ;
    if (valore == 1 )   a = digitalRead(SW_1P) ;
    if (valore == 2 )   a = digitalRead(SW_2P) ;
    small_stepper.step(1);
  }
  piano = piano_che_chiama ;
  Serial.print("Ora e' al piano ");
  Serial.println(piano);
  Serial.println();
}

void scendi(int valore ) {
  Serial.print("E' stato chiamato dal piano ");
  Serial.println(piano_che_chiama);
  Serial.print("Si muovera' fino a che non scatta il finecorsa del piano ");
  Serial.println(piano_che_chiama);
  small_stepper.setSpeed(velocita);
  while ( a == HIGH ) // Aspetta che venga premuto il finecorsa
  {
    if (valore == 0 )   a = digitalRead(SW_PT) ;
    if (valore == 1 )   a = digitalRead(SW_1P) ;
    small_stepper.step(-1);
  }
  piano = piano_che_chiama ;
  Serial.print("Ora e' al piano ");
  Serial.println(piano);
  Serial.println();
}


Title: Re: realizzazione di un ascensore a 3 piani
Post by: Standardoil on Jun 20, 2018, 06:57 am
io azzardo scommessa:
con questo progetto abbiamo finito......