Arduino compatibile - Elegoo UNO

Ciao tutti.

Sono 20anni che non metto mano a circuiti elettronici, e mi è rivenuto lo sfizio, e visto che è solo uno sfizio ho deciso di spendere poco, tanto non devo fare grandi cose ma solo giochicchiare.

per 36€ è un buon kit.

Arriva domani, quindi ancora non so com'è.
Sono consapevole che non è l'originale ma solo compatibile, ma se lo cerco in rete - per vedere le caratteristiche e per i confronti - trovo solo le pagine che lo vendono.

Chi mi sa dire qualcosa su questo Elegoo UNO? Quali sono/potrebbero essere le differenze che fanno... la differenza?

Approfitto per qualche domandina di base per non aprire 10 topic

nel fare i circuiti, quali sono le raccomandazioni migliori per non bruciare tutto? cioè, quanto arduino ha circuiti di autoprotezione?
Ho visto tutorial base (il classico led che si accende) in cui il led è collegato direttamente tra GND e pin13.
Ma così gli vanno dritti dritti 5V che dovrebbe fondere il led (io ho sempre piazzato una resistenza per non farci andare più di 20mA a memoria).
Viceversa lo stesso tutorial connetteva un pulsante e ci metteva sopra una resistenza non ho capito perchè (in una lezione successiva poi ce la toglieva dicendo che usava un sistema che ci metteva qualcosa impostandola tramite software).

Quanto posso considerare veloce il loop, cioè il tempo che ci mette per arrivare da cima a fondo (ammesso che in mezzo non ci siano delay() o amenie varie studiate per ritardare)? In un tutorial sembra come se questo aspetto fosse del tutto inesistente, come se venisse eseguito in un colpo solo. Sono 20MHz, si ma non significa 20 milioni comandi ad alto livello al secondo.
Esistono gli interrupt (considerate che ho iniziato con lo Z80 e già c'erano) o devo gestire tutte le sincronizzazioni tramite il loop?

Grazie.

È un buon kit in effetti, l'ho regalato ad un amico per Natale e tutto sommato non mi è dispiaciuto, a livello di componenti. Non ho visto il pdf dei tutorial, ma ho letto che è decente, anche se la versione italiana è tradotta malissimo.

Quanto alla resistenza col led, come dici anche tu, è sempre necessaria, se nel tutorial manca è un errore. Sulla scheda ne è presente una per ogni led, non ti preoccupare ;).

La resistenza sul pulsante si chiama pull-up o -down, capirai presto a cosa serve e come se ne può fare a meno.

Il loop() è "velocissimo", Arduino va a 16 MHz (non 20!) ed ha una CPU RISC, quindi ogni istruzione richiede un singolo colpo di clock (in verità quelle che accedono alla memoria ne richiedono 2-3). Ovviamente varia a seconda di quello che fai, ma diciamo che nella media verrà chiamato almeno qualche migliaio di volte al secondo. Ovviamente sempre che non ci fai una delay(1000)...

Gli interrupt ci sono.

Buon divertimento ;).

Salve. Ero interessata anche io ad acquistare uno starter kit e possibilmente non spendere troppo. Io ho trovato principalmente questi due ( mi sembrano molto simili) :

https://m.it.aliexpress.com/s/item/32638892215.html?trace=wwwdetail2mobilesitedetail&productId=32638892215&productSubject=Elego-UNO-Project-The-Most-Complete-Starter-Kit-for-Arduino-Mega2560-UNO-Nano-with-Tutorial-Power#autostay

Quale dei due è meglio comprare? Potete consigliarmi dei kit migliori?

Alessandra15:
Salve. Ero interessata anche io ad acquistare uno starter kit e possibilmente non spendere troppo. Io ho trovato principalmente questi due ( mi sembrano molto simili) :

https://www.amazon.it/gp/aw/d/B01JJ23CI6?psc=1

https://m.it.aliexpress.com/s/item/32638892215.html?trace=wwwdetail2mobilesitedetail&productId=32638892215&productSubject=Elego-UNO-Project-The-Most-Complete-Starter-Kit-for-Arduino-Mega2560-UNO-Nano-with-Tutorial-Power#autostay

Quale dei due è meglio comprare? Potete consigliarmi dei kit migliori?

Dipende da che progetti vuoi fare... Hai già in mente qualcosa o è sperimentazione pura?

Ci sono tantissimi kit in giro ma ti consiglio di valutare in base a tre parametri se non hai ancora idea di cosa vuoi farci:

  1. prezzo (più bassi su Aliexpress)
  2. tempi di spedizione (lunghissimi su Aliexpress e molto bassi su Amazon)
  3. documentazione (sia manuale a supporto e sia sito internet con esempi/video/codici/tutorial)

Non sottovalutare il terzo punto soprattutto se sei alle primissime armi.
Personalmente ti consiglio uno dei kit che hanno anche un manuale cartaceo di supporto come quelli della sunfounder (questo o questo). Ottima scelta anche il kit ufficiale Arduino anche se costa tantino ma sicuramente col miglior manuale a supporto.

Se vuoi comunque risparmiare, ti consiglio di prendere un kit di base su amazon e acquistare su aliexpress i sensori che ti piacerebbe sperimentare così mentre aspetti gli epici tempi di attesa di aliexpress, puoi già sperimentare qualcosa.

Il mio arduino non è ancora arrivato così vado di simulatore.
Ovviamente la velocità non è la stessa dell'originale (ma di tutto, non del processore); diciamo che il tempo va 1/20, ma per fortuna c'è un cronometro che mi indica la corrispondenza con il tempo reale.

Ho fatto un esperimento, un test di performance.

Ci ho connesso un display lcd ed ho fatto il codice sotto.
ho cercato di fare un loop() in cui scrive delle statistiche a display.
queste statistiche includono millisecondi, numero di loop passati e loop al secondo.
Il primo risultato non è stato incoraggiante perchè veniva fuori un centinaio di loop al secondo
Però la stampa sul display impiega un certo tempo, quindi gli ho detto di aggiornare il display ogni 10 loop e poi ogni 100 e così via fino ad 1.000.000, ed i risultati (su un tempo di run di 3 secondi) sono interessanti.
stampa ogni loop:
122 loop/sec
ogni 10 loop: 644 loop/sec
ogni 100 loop: 5111 loop/sec
ogni 1000 loop: 37777 loop/sec
ogni 10000 loop: 122222 loop/sec
ogni 100000 loop: 155555 loop/sec
1.000.000 di loop: 166666 loop/sec
in pratica 10 cicli di clock per ogni loop; il loop fa due incrementi e un confronto.

il codice non è esente da bug ma i risultati sono plausibili e probabilmente attendibili:

#define FREQ 100
void loop() {
  l++; // numero di loop
  if(x++ == FREQ){ // delay di aggiornamento del display
    x=0;
    m=millis();

    lcd.setCursor(0,0);
    // tempo totale, tempo speso a stampare, n. stampe
    lcd.print(String(m)+" "+String(t)+" "+String(y++));
    
    lcd.setCursor(0,1);
    // numero di loop, loop al secondo, FREQ
    lcd.print(String(l)+" "+String(l*1000/m)+" "+String(FREQ));
    
    t=millis()-m+t; // aggiorna il tempo speso a stampare
  }
}

le variabili sono tutte dichiarate come long.

l'output al variare di FREQ:

2999 2999 188
377 122 1

2999 2999 177
1999 644 10

2999 2888 155
15555 5111 100

2999 2222 111
111111 37777 1000

3000 788 36
366666 122222 10000

3111 86 4
500000 155555 100000

6111 0 0
1000000 166666 1000000

n.b.: l'ultima colonna della seconda riga negli ultimi test è ritoccata perchè superava i 16 caratteri accettati dal display; l'ultima colonna della prima riga va incrementata di uno.

poi lo rilancerò su un arduino reale. ogni test è stato di soli 3 secondi (tranne l'ultimo) perchè 3 secondi di emulatore mi equivalgono ad 1 minuto mio, ma il numero di loop al sec rimane costante già dai primi millisecondi.

Parere personale, ma leggi anche nel forum. Simulatori=irreali, soprattutto in questo campo.

Si, vero e concordo, ma risultati indicativi dovrebbe tirarli fuori, anche perchè sono i risultati che mi aspettavo di tirare fuori PRIMA di scrivere il programma (non nel dettaglio, ma come indicazione si).
Chiaro ovviamente che tutti i risultati di cui sopra vanno confermati con test su un arduino reale.

Il risultato conferma quello che mi chiedevo al primo post (e successivi sviluppi in mente):
"Quanto posso considerare veloce il loop, cioè il tempo che ci mette per arrivare da cima a fondo"
cioè per quanto 16MHz significhino potenzialmente 16milioni di comandi al secondo in assembler (che diminuiscono accedendo alla memoria), a seconda del tipo di codice posso considerare più o meno trascurabile il tempo di esecuzione, e sicuramente non predittivo.

Non 16 milioni di istruzioni ma cicli macchina, una istruzione assembly può durare 2 o 4 cicli macchina.

"potenzialmente" 16 milioni, ovvio che non sono 16. Ho cominciato con lo z80, risc, dove anche operazioni atomiche (cioè senza accesso alla ram ma solo ai registri) possono variare in numero di byte di ram.
Speravo di aver fatto intendere il concetto (prima di studiarmi il codice macchina di arduino vorrei quanto meno avercelo :smiley: )

GiuMex:
Dipende da che progetti vuoi fare... Hai già in mente qualcosa o è sperimentazione pura?

Ci sono tantissimi kit in giro ma ti consiglio di valutare in base a tre parametri se non hai ancora idea di cosa vuoi farci:

  1. prezzo (più bassi su Aliexpress)
  2. tempi di spedizione (lunghissimi su Aliexpress e molto bassi su Amazon)
  3. documentazione (sia manuale a supporto e sia sito internet con esempi/video/codici/tutorial)

Non sottovalutare il terzo punto soprattutto se sei alle primissime armi.
Personalmente ti consiglio uno dei kit che hanno anche un manuale cartaceo di supporto come quelli della sunfounder (questo o questo). Ottima scelta anche il kit ufficiale Arduino anche se costa tantino ma sicuramente col miglior manuale a supporto.

Se vuoi comunque risparmiare, ti consiglio di prendere un kit di base su amazon e acquistare su aliexpress i sensori che ti piacerebbe sperimentare così mentre aspetti gli epici tempi di attesa di aliexpress, puoi già sperimentare qualcosa.

GiuMex:
Dipende da che progetti vuoi fare... Hai già in mente qualcosa o è sperimentazione pura?

Ci sono tantissimi kit in giro ma ti consiglio di valutare in base a tre parametri se non hai ancora idea di cosa vuoi farci:

  1. prezzo (più bassi su Aliexpress)
  2. tempi di spedizione (lunghissimi su Aliexpress e molto bassi su Amazon)
  3. documentazione (sia manuale a supporto e sia sito internet con esempi/video/codici/tutorial)

Non sottovalutare il terzo punto soprattutto se sei alle primissime armi.
Personalmente ti consiglio uno dei kit che hanno anche un manuale cartaceo di supporto come quelli della sunfounder (questo o questo). Ottima scelta anche il kit ufficiale Arduino anche se costa tantino ma sicuramente col miglior manuale a supporto.

Se vuoi comunque risparmiare, ti consiglio di prendere un kit di base su amazon e acquistare su aliexpress i sensori che ti piacerebbe sperimentare così mentre aspetti gli epici tempi di attesa di aliexpress, puoi già sperimentare qualcosa.

mrossini:
Si, vero e concordo, ma risultati indicativi dovrebbe tirarli fuori, anche perchè sono i risultati che mi aspettavo di tirare fuori PRIMA di scrivere il programma (non nel dettaglio, ma come indicazione si).
Chiaro ovviamente che tutti i risultati di cui sopra vanno confermati con test su un arduino reale.

Il risultato conferma quello che mi chiedevo al primo post (e successivi sviluppi in mente):
"Quanto posso considerare veloce il loop, cioè il tempo che ci mette per arrivare da cima a fondo"
cioè per quanto 16MHz significhino potenzialmente 16milioni di comandi al secondo in assembler (che diminuiscono accedendo alla memoria), a seconda del tipo di codice posso considerare più o meno trascurabile il tempo di esecuzione, e sicuramente non predittivo.

GiuMex:
Dipende da che progetti vuoi fare... Hai già in mente qualcosa o è sperimentazione pura?

Ci sono tantissimi kit in giro ma ti consiglio di valutare in base a tre parametri se non hai ancora idea di cosa vuoi farci:

  1. prezzo (più bassi su Aliexpress)
  2. tempi di spedizione (lunghissimi su Aliexpress e molto bassi su Amazon)
  3. documentazione (sia manuale a supporto e sia sito internet con esempi/video/codici/tutorial)

Non sottovalutare il terzo punto soprattutto se sei alle primissime armi.
Personalmente ti consiglio uno dei kit che hanno anche un manuale cartaceo di supporto come quelli della sunfounder (questo o questo). Ottima scelta anche il kit ufficiale Arduino anche se costa tantino ma sicuramente col miglior manuale a supporto.

Se vuoi comunque risparmiare, ti consiglio di prendere un kit di base su amazon e acquistare su aliexpress i sensori che ti piacerebbe sperimentare così mentre aspetti gli epici tempi di attesa di aliexpress, puoi già sperimentare qualcosa.

Il problema è che parto da zero di conseguenza cercavo un kit abbastanza completo per poter iniziare ad usare arduino partendo dalle cose più semplici. Il kit originale costa molto (80/90 €) . Cercavo qualcosa di più economico e navigando in internet ho trovato molti kit e non conoscendo nessuno che avrebbe potuto consigliarmi su quale acquistare mi sono rivolta al forum.

Potreste consigliarmi dei kit abbastanza completi?

beh, quando l'ho comprato io ho ragionato al contrario.
Parto da zero quindi dalle cose più semplici, quindi un kit starter starter, che abbia le cose di base, non quelle complete che non conosco per niente e non so se le userò. Quindi ho optato per minimizzare la spesa e prendere meno pezzi (ce n'era uno da 25€ ma era esageratamente scarno, praticamente solo i led e poco altro oltre la basetta).
Poi io compro solo su amazon. Ne sono venuti fuori 5 (di cui ormai non ho più i link) di prezzi che vanno dai 29€ ai 37€; mi sono fatto i confronti e ho preso quello da 36,99€ (non più disponibile) che ho linkato all'inizio.
Poi se mi piacerà e se mi verrà qualcosa in mente di specifico da fare - e quindi componenti necessari - li comprerò a parte in modo da non avere nel cassetto pezzi che rimarranno lì per i prossimi 25 anni (ho componenti elettronici comprati 25 anni fa e che sono lì, incelofanati per non perderli, ma non buttati; probabilmente li tirerò fuori per questa occasione)

Se invece hai già in mente qualcosa allora prendi quello di cui hai bisogno - come già ti hanno detto.

Alessandra15:
Il problema è che parto da zero di conseguenza cercavo un kit abbastanza completo per poter iniziare ad usare arduino partendo dalle cose più semplici. Il kit originale costa molto (80/90 €) . Cercavo qualcosa di più economico e navigando in internet ho trovato molti kit e non conoscendo nessuno che avrebbe potuto consigliarmi su quale acquistare mi sono rivolta al forum.

Potreste consigliarmi dei kit abbastanza completi?

Ripeto che a questo punto ti consiglio di prendere un kit con manuale allegato:
se il secondo di sunfounder costa troppo, andrei su questo con istruzioni nel CD o questo che ha il manuale cartaceo.

Personalmente non vedo la necessità del manuale cartaceo, e neanche quella su cd (nonostante sul mio c'è) vista la mole di documentazione presente in rete.

GiuMex:
Ripeto che a questo punto ti consiglio di prendere un kit con manuale allegato:
se il secondo di sunfounder costa troppo, andrei su questo con istruzioni nel CD o questo che ha il manuale cartaceo.

Grazie mille!! Credo prenderò il kit elegoo oppure un kit fonduino che ho trovato su amazon. Siccome non ho mai comprato su amazon c'è il rischio che i due kit tra qualche mese non siano più disponibili? Non vorrei comprarli ora solo perché non avrei tempo e dovrebbero aspettare a giugno per essere usati. Mi conviene comprarli ora oppure non c'è rischio ad aspettare? ( scusate le troppe domande

Beh, il problema è che se ti arriva adesso e lo provi solo ... tra 4 mesi, difficile accettino un reso.
Puoi prenderlo ora ed almeno provare subito che si accenda Arduino uno collegandolo a usb del pc

mrossini:
Personalmente non vedo la necessità del manuale cartaceo, e neanche quella su cd (nonostante sul mio c'è) vista la mole di documentazione presente in rete.

Considerando la poca esperienza dei diretti interessati, non sono assolutamente d'accordo.
Il manuale incluso nel kit ufficiale di Arduino ad esempio, ha pochissimi componenti ma 175 pagine. Perchè? Perchè ti spiega cosa stai facendo e perchè lo stai facendo in un determinato modo.

Inoltre è oggettivamente comodo avere a disposizione una serie di tutorial con esattamente i componenti che hai a disposizione. Stiamo pur sempre parlando di persone che cominciano da zero.

A copiare uno sketch di fritzing trovato su Google immagini sono bravi tutti..... poi però il 90% della gente non sa neanche perchè sta facendo un determinato collegamento.
Altra nota: internet è pieno di progetti sbagliati e, se impari da progetti sbagliati, ti è ancora più difficile capire davvero anche con tutta la buona volontà del mondo.

GiuMex:
...
A copiare uno sketch di fritzing trovato su Google immagini sono bravi tutti..... poi però il 90% della gente non sa neanche perchè sta facendo un determinato collegamento.
Altra nota: internet è pieno di progetti sbagliati e, se impari da progetti sbagliati, ti è ancora più difficile capire davvero anche con tutta la buona volontà del mondo.

+1

Guglielmo

Ho rieseguito il test di performance (codice identico non toccato) su l'arduino fisico.
Risultati molto simili, soprattutto per FREQ alti si arriva a 150000 loop al sec. Nota che prima ho detto una cavolata, perché in 16Mhz 150.000 loop sono 100 cicli di clock mentre io ho detto 100.

Ho fatto un ulteriore test di performance, non usando il display ma il solo led ed un cronometro da polso.
Ho ridotto un ciclo ai minimi termini e gli ho detto di accendere il led dopo 10 milioni di loop facendo fare meno cose possibili al loop.
long x=10000000;
void loop (){
if (!--x){
digitalWrite(led,HIGH);
delay(30000);
}
}

(il delay piazzato li significa fine del test)

Questo loop impiega 23 secondi (sul simulatore non l'ho provato), cioè 450.000 loop/sec.

Comunque domani comincio con qualcosa di più serio e mi vedo la documentazione fornita sul cd. Dicono sia tradotta da schifo, mi sa che mi vedo direttamente quella in inglese ;).

In realtà non capisco bene quale sia lo scopo di questi test. Arduino Uno (e gli AVR 8 bit in generale) non è certo una piattaforma che punta alle performance, a cominciare dal fatto che il clock non è nemmeno spinto al massimo. È una piattaforma che punta piuttosto a permettere l'automazione di compiti relativamente semplici e la prototipazione rapida, prediligendo il più delle volte la semplicità alle performance, da qui l'enorme numero di librerie disponibili.

Se cerchi le performance a tutti i costi ci sono piattaforme migliori, a cominciare dalla semplice Due e dalle altre schede a 32 bit, per arrivare alla Teensy, agli STM32 e chi più ne ha più ne metta.

No, in verità è partito da un concetto che non capivo ed ho deciso di riuscire a scoprire i suoi limiti (oltre che questo ti costringe ad imparare pezzi di codice che poi mi ritrovo più avanti).
Niente di più.
In fondo questo per me è un gioco, non credo (o chissà) che lo utilizzerò mai per automazione utile.