Vai al contenuto
PLC Forum


programma per realizzare 4 uscite random con arduino


alberto64k

Messaggi consigliati

Livio Orsini
8 ore fa, Claudio F ha scritto:

Per quanto riguarda la partenza casuale della generazione dei numeri pseudocasuali, l'idea del PWM si è rivelata infelice.

 

Non c'è bisogno di arzigogolare molto, arduino ha già di suo la funzione random.

Link al commento
Condividi su altri siti


Quote

Non c'è bisogno di arzigogolare molto

 

Lo scopo è evitare che:

 

On 2/26/2024 at 10:29 AM, alberto64k said:

ad ogni accensione riprende sempre la stessa sequenza.

 

Link al commento
Condividi su altri siti

Livio Orsini
15 ore fa, Claudio F ha scritto:

Lo scopo è evitare che:

 

Come ho scritto sin da subito, la sequenza può essere solo pseudo casuale, per la limitatezza di scelta, scelta ristretta ad 1 su 4.

 

Usando randomSeed() e passando l'ultimo numero "estratto" si evita di ripartire sempre dal medesimo.

Anche facendo il test per escludere 2 selezioni consecutive identiche, c'è il rischio di dover ripetere per un numero elevatissimo di tentativi.

Link al commento
Condividi su altri siti

 

Un esempio funzionante di scelta casuale di un'uscita su quattro ad ogni pressione, con esclusione della stessa uscita per più pressioni consecutive, può essere questo:

https://wokwi.com/projects/391231966780420097

 

546757.png.19a592feb2b64acd2994c2059fb49148.png

 

Per usare pin diversi, oppure livelli bassi (LOW) invece che alti (HIGH), basta modificare solamente le define iniziali.

 

Il simulatore Wokwi è interessante perché simula anche il bounce dei pulsanti, le fluttuazioni sugli ingressi analogici scollegati, e il breve transitorio di configurazione delle uscite per comandi low-level.

Link al commento
Condividi su altri siti

  • 3 weeks later...
On 3/2/2024 at 9:16 AM, Livio Orsini said:

Come ho scritto sin da subito, la sequenza può essere solo pseudo casuale, per la limitatezza di scelta, scelta ristretta ad 1 su 4.

 

Certo che la sequenza è pseudo casuale (ottenuta da un algoritmo deterministico), qui si vuole rendere "realmente" casuale solo il punto di inizio della sequenza ad ogni accensione del sistema, e lo si deve fare con qualcosa non determinato dal sistema stesso (clock ecc)

 

Quote

Usando randomSeed() e passando l'ultimo numero "estratto" si evita di ripartire sempre dal medesimo.

 

Questo invece ho verificato che non va bene, magari evita che l'estrazione immediatamente seguente corrisponda alla precedente, ma è comunque un processo deterministico e si producono sequenze sempre uguali di neanche tutti i valori del range richiesto, ad esempio 3 1 3 1 3 1 3 1 all'infinito.

 

 

Link al commento
Condividi su altri siti

Livio Orsini
12 ore fa, Claudio F ha scritto:

ma è comunque un processo deterministico ...

 

Per generare sequenze veramente casuali si dovrebbe avere una scelta di numeri infinita,cosa impossibile all'atto pratico.

Stesso concetto se si affronta ilproblema dalpunto di vista analogico: avendo comunque una banda limitata non avremo mai un rumore bianco, ovvero una scelta veramente casuale. L'ngresso analogico del convertitore A/D del micro ha una banda parecchio ristretta, che subisce un'ulteriore riduzione per la quantizzazione a soli 1023 livelli discreti.

Ma il vero collo di bottiglia è la limitatezza di scelta: solo quattro numeri! Con quattro numeri dopo pochissime estrazioni si potrà già avere una qualche convergenza.

 

Poi, nel caso pratico in oggetto, dipende da quale criterio si vuole previlegiare.

Link al commento
Condividi su altri siti

  • 2 weeks later...

Buonasera , arrivato tutto il materiale , ho fatto un piccolo schema , ovviamente da modificare, su vostre indicazioni. Mi servirebbe lo sketch da caricare su arduino nano, sempre infinite grazie.

Temporizzatori 4 Drawing1.jpg

Link al commento
Condividi su altri siti

Buonasera , arrivato tutto il materiale , ho fatto un piccolo schema , ovviamente da modificare, su vostre indicazioni. Mi servirebbe lo sketch da caricare su arduino nano, sempre infinite grazie. I led sono due L1 e L2, comunque a me serve solo indicazione di batteria o batterie basse, non so come collegarli. P1 è il pulsante di start, probabilmente devo collegarlo con la resistenza come da schema di Claudio, ma aspetto vostri consigli. Ho messo due step down, uno per temporizzatori e relè a 5 V, l'altro per arduino a 12V . Le batterie le ho sia LiPo 3,7V che in piombo a 12V , preferisco quella a 12 perchè ho il carica batteria . Ho messo un deviatore on off on , acceso spento ricarica . La presa è per la ricarica della batteria. Le uscite di arduino molto probabilmente sono sbagliate, aspetto vostri consigli per un collegamento corretto. 

Link al commento
Condividi su altri siti

Livio Orsini
10 ore fa, alberto64k ha scritto:

Le uscite di arduino molto probabilmente sono sbagliate, aspetto vostri consigli per un collegamento corretto

 

Quelli sono ingressi analogici, meglio che tu usi le uscite D2, D3, D4eD5.

Claudio F ha già pubblicato il programma per realizzare l'uscita casuale.

Non hai mai programmato arduino o qualche altro controllore?

Se è così prima dovresti almeno imparare le basi su come si programma arduino altrimenti al minimo inconveniente non sai come fare a venirene fuori.

Link al commento
Condividi su altri siti

Buonasera , arrivato tutto il materiale , ho fatto un piccolo schema , ovviamente da modificare, su vostre indicazioni. Mi servirebbe lo sketch da caricare su arduino nano, sempre infinite grazie. I led sono due L1 e L2, comunque a me serve solo indicazione di batteria o batterie basse, non so come collegarli. P1 è il pulsante di start, probabilmente devo collegarlo con la resistenza come da schema di Claudio, ma aspetto vostri consigli. Ho messo due step down, uno per temporizzatori e relè a 5 V, l'altro per arduino a 12V . Le batterie le ho sia LiPo 3,7V che in piombo a 12V , preferisco quella a 12 perchè ho il carica batteria . Ho messo un deviatore on off on , acceso spento ricarica . La presa è per la ricarica della batteria. Le uscite di arduino molto probabilmente sono sbagliate, aspetto vostri consigli per un collegamento corretto. 

E si una bella avventura, non ho mai programmato nulla, incomincio ad assemblare e collegare, pasticciare con il programma da solo , poi ci sentiamo , per il momento grazie di cuore.

Link al commento
Condividi su altri siti

Ci sono diverse cosette. Intanto se bisogna controllare anche la tensione della batteria, serve anche un partitore di tensione su un altro ingresso analogico. Alla fine il tutto potrebbe essere così (i nomi tra parentesi saranno i nomi simbolici di ingressi e uscite usati nel programma, assegnati tramite #define ai terminali reali scelti).

 

987786786.thumb.png.de2133d584163a17028b66321e8f98aa.png

 

 

Link al commento
Condividi su altri siti

Proseguo.

 

  1. Alimentazione Arduino: se si usa uno step-down, la sua uscita va regolata a 8..9V, non a 12 che è la tensione di ingresso. Oppure a 5V se si entra direttamente nel terminale 5V di Arduino, ma ritengo che l'alimentazione della logica  sia più pulita alimentando da Vin e lasciando produrre i 5V internamente da Arduino
  2. Pulsante: si, si può collegare come nello schema del simulatore, ma per evitare di portare in giro filature con i 5V della logica, e captare disturbi vari, forse meglio usare i 12V.

  3. Misura tensione batteria: serve un partitore di tensione e una tensione di riferimento dell'ADC stabile. Si può usare il riferimento interno 1.1V e un partitore 12kΩ 820Ω. A causa delle tolleranze servirà comunque una calibrazione, in assenza della quale la tensione misurata potrebbe avere un errore anche di 1V. Con la calibrazione invece potremo scendere a soli 0.05V di errore. Della procedura di calibrazione si può parlare poi, si tratta semplicemente di fare una misura della tensione ai capi del partitore col multimetro più preciso a disposizione, e farsi dire da Arduino che valore viene prodotto dall'ADC. Il valore di calibrazione è Vmisurata/valoreADC.

  4. Gli ingressi analogici chiamati nello schema PIN_ANALOG e PIN_BATTERY possono essere a scelta da A0 ad A7. Gli ingressi e uscite digitali (quindi tutti gli altri) possono essere a scelta da 2 a 12, e da A0 ad A5. Lascerei stare il D13 che all'accensione produce alcuni impulsi.

  5. Per quanto riguarda i temporizzatori esterni, non ho idea se si possono comandare con una chiusura a GND.

  6. Per quanto riguarda le masse, se gli step down non sono isolati va bene così, le masse si congiungono tutte al negativo della batteria.

 

 

 

 

 

Modificato: da Claudio F
Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...