arduino (pro e contro)

ieri ho ordinato lo starter kit italiano di arduino... ]:smiley: faro anche io parte integrante della community :slight_smile:
spero di divertirmi e di capire il mondo dei microcontrollori.

toglietemi sono una curiosita':
leggendo in giro tutti elogiano la facilita di utilizzo di arduino e i moltissimi progetti piu o meno complessi che si possono realizzare; insomma sembra proprio essere una scheda con molti punti di forza... tuttavia non sono ancora riuscito a trovare chiaramente i suoi punti di debolezza. Quello che intendo e' che questa facilita di utilizzo dovra pur andare a sfavore di altri aspetti in cui arduino non regge il confronto con altri microcontrollori con relative schede.

Sapreste dirmi quali?
e perche spesso leggo cose tipo: "non usare per questo progetto arduino ma cerca qualcosa di piu professionale..."?

ciao

Arduino è una scheda di prototipazione elettronica basata su un microcontrollore ad 8 bit. Se "mastichi" un pò di queste cose, avrai già capito i limiti. Altrimenti vedo se te li riassumo (per lo meno i principali):

  • non √® una panacea, devi conoscere la programmazione e l'elettronica, per lo meno avere una conoscenza base di entrambe altrimenti non ci fai nulla. La scheda in s√© non fa niente di suo se non la programmi (e qui devi conoscere il C/C++), e non √® capace di fare niente di particolare (accendere una luce o muovere un motore) se non la interfacci con altri dispositivi elettronici (e qui devi conoscere un p√≤ di elettronica per sapere come fare);
  • il micro ad 8 bit lavora a 16 MHz: per tante cose va pi√Ļ che bene, ad esempio gestire un display LCD, leggere input, attivare qualcosa. Su una cosa invece non va assolutamente: acquisizione e/o trattamento immagini. Le sue limitate risorse non gli permettono di fare questa cosa.

sobrano:
Quello che intendo e' che questa facilita di utilizzo dovra pur andare a sfavore di altri aspetti in cui arduino non regge il confronto con altri microcontrollori con relative schede.

Oltre a quanto detto da Leo, rimanendo nel confronto con altre schede dotate di micro a 8 bit simili a quelli di Arduino, c'è da pagare lo scotto di una minore velocità operativa del software data dal peso del sistema di programmazione di Arduino.
Esempio pratico, la comodissima digitalWrite(), che ti consente di cambiare lo stato logico di un pin, ci mette mediamente 2.5 us per eseguire il suo compito, la stessa cosa si può fare in solo due cicli macchina, 125 ns, se programmi in C puro su Arduino oppure sulle altre board.
In linea generale Arduino è molto comodo e ti consente di sviluppare rapidamente applicazioni quando non hai particolari esigenze di temporizzazioni critiche e ti basta la limitata ram a disposizione, le applicazioni Arduino spaziano dal semplice controllo sequenze di lucei/led fino ad arrivare alle stampanti 3D, però non è detto che tutto quello che c'è in mezzo è realizzabile con Arduino :slight_smile:

Arduino (scheda e ambiente di sviluppo) per essere facilmente usabili nasconde un bel po di cose che con altre progetti devi fare da te. Questo é un punto a favore per chi incomincia ma anche un punto di critica. Chi sa bene la materia puó comunque come scrive Astrobeet non usare ne le funzioni di semplificazione del uso del Hardware come per esempio il citato DigitalWrite() ma accedere all hardware direttamente.
Le limitazioni del tipo di hardware scelto (parliamo del Arduino UNO, Leonardo e altre versioni con controller a 8 bit) sono

  • limitata potenza di calcolo e memoria percui non si possono elaborare o gestire immagini, foto , video o audio.
  • visto che il controller comprende al suo interno CPU, RAM, ROM, e periferiche di interfaccia non ha verso l' esterno un bus dati e indirizzi. √® laborioso interfacciare un qualsiasi dispositivo con bus paralello che √© fatto per essere collegato a una CPU (come per esempio una RAM con 8 pin di dati e 16 di indirizzo). √® fattibile ma cosata tantissime risorse per farlo.
  • l' IDE di Arduino √© fatto per essere semplice e percui ha le funzionalit√° base. Altri mezzi di sviluppo Software hanno molte funzionalit√° utili che possono aiutare la programmazione ma che danno problemi a chi incomincia.

I vantaggi come penso che sai gi√° sono la semplicit√° d' uso per chi incomincia.

C'é un inghippo che tanti non si rendono conto; L' elelettronica non é semplice. Ci sono un bel po di problematiche che si devono conoscere per far funzionare bene e in modo affidabile un circuito elettronico.

Sono reduce di un finesettimana della lunga notte della ricerca dove un fablab ha proposto di costruire un cubo in Plexiglas taglato a tramite Laser con un Arduino e un LED RGB dentro. Un programma che fa lampeggiare il LED in modo differente viene gestito da un sensore capacitivo realizzato con CAPSENSE. Alcuni cubi funzionavano male; non riconoscevano bene la presenza della mano. Siamo arrivati alla conclusione che togliendo la pellicola protettiva il plexiglas viene caricato elettrostaticamente e disturba il sensore capacitivo.

Ciao Uwe

Grazie a tutti per le risposte.
Avendo discrete basi teoriche di elettronica (purtroppo soprattutto analogica) e conoscendo un po il linguaggio c/c++ mi sono convinto che essendo a digiuno di pratica, arduino fosse la scelta giusta.

da quel che credo di aver capito dalle vostre risposte mi sembra che:

wiring contiene numerose funzioni/procedure basate sul C che sono semplici ma non molto efficenti, mi sembra di capire anche che il wiring "conosce" il C e che quindi si puo evitare di usare ad esempio "digitalWrite()" sostituendolo con una serie di istruzioni personalizzate e scritte appositamente per uno scopo ben preciso allo scopo di comandare i pin in modo piu efficente.

Da questo punto di vista ho intenzione di procedere cosi:

  1. inizio a fare progetti usando tutte le comodita delle funzioni wiring
  2. cerco di "scendere di livello" usando il C nativo per fare piu o meno gli stessi progetti
  3. se andra tutto bene passare all'assembler (questo non so se arduino lo permette)
  4. passare ad altre piattaforme piu potenti in termini di potenza di calcolo/memoria/clock

come vi sembra? credete che il percorso che ho in testa sia fattibile?

grazie a tutti

Secondo me esageri.
Le funzioni personalizzate per gestire l' hardware di Arduino sono in parte pi√ļ lente di un accesso diretto ai registri del Controller.
√ą da valutare se un sistema lentino ma semplice non sia troppo lento per l' uso che si fa. Stessa cosa vale per assembler. Ognitanto in rare occasioni serve (esempio biblioteca FastSPI) ma normalmente no.
L' IDE di Arduino e il compilatore permettono di accedere direttamente ai registri tramite il loro nome e di inseriere anche parti scritte in assembler.

Le tecniche di programmazione si usano in funzione delle necessit√° che si ha e non in funione al gusto.
Secondo me non ha senso perdere una settimana per scrivere in assembler "Hallo World" su un display se si puó fare con C in 3 minuti solo per il gusto di usare assembler.

Ciao Uwe

uwefed:
Secondo me non ha senso perdere una settimana per scrivere in assembler "Hallo World" su un display se si puó fare con C in 3 minuti solo per il gusto di usare assembler.

Quoto in pieno.
Se lo si vuol fare per il gusto della "sfida" lo capisco ma non ha senso, oggi, fare TUTTO in assembly. Il C √® potente quanto basta per eseguire tutte le normali funzioni ad una velocit√† pi√Ļ che accettabile. Solo in determinate situazioni, dove si deve veramente ottimizzare il codice ed un ciclo macchina in pi√Ļ o in meno fa la differenza (ad esempio nella generazione di un segnale video o nei sistemi RTOS per il cambio di task) allora ha senso usare l'assembly, altrimenti √® solo uno spreco di tempo.
Ovviamente IMHO.

leo72:
Ovviamente IMHO.

Non è imho, è la realtà :slight_smile:
Usando il C ANSI è possibile accedere a tutte le risorse hardware di un micro/mcu esattamente come si fa in assembly e con la stessa efficienza, sopratutto se il compilatore utilizzato è ben fatto, basta andare a vedere il listato assembly del codice macchina generato per vedere come una lettura/scrittura diretta su un port viene tradotto con le equivalenti istruzioni assembly senza fare giri strani.
Solo rari casi richiedono l'uso dell'assembly, può essere fatto direttamente dentro il codice C tramite le apposite direttive, e comunque si usa solo per una subroutine molto critica nei timing di esecuzione ed è indispensabile imporre questo tempo in modo fisso e controllato.
Attenzione che ho detto C ANSI e non C++, il secondo mal si adatta alle piccole mcu otto bit, spesso e volentieri, praticamente sempre, genera codice con dimensioni maggiori e meno efficace dello stesso programma scritto in C ANSI.

che sollievo :slight_smile:
mi preoccupava parecchio dover imparare l'assembler... se il C per la maggior parte delle volte andra bene allora cancello il punto 3 moolto felicemente e mi concentro sul resto :wink:

astrobeed:
Attenzione che ho detto C ANSI e non C++,

Anch'io ho parlato di C difatti, non di C++.

leo72:

astrobeed:
Attenzione che ho detto C ANSI e non C++,

Anch'io ho parlato di C difatti, non di C++.

La mia era una puntualizzazione in generale, dovuta sopratutto al fatto che wiring è C++ con tutti i relativi vantaggi/svantaggi.

Già. Sarebbe da riscrivere il core in C, giusto per divertirsi :wink:

leo72:
Già. Sarebbe da riscrivere il core in C, giusto per divertirsi :wink:

Sarebbe una gran bella cosa, peccato che è molto utopica :slight_smile:

Ma le classi sono molto comode. :cold_sweat:

I punti di debolezza di arduino sono:

-limitato range di alimentazione: 7-15V
-limitata corrente disponibile sui 5V e 3V3: poche decine di mA
-nessuna protezione sui pin I/O quindi richiede la massima attenzione nel collegamento
-nessun controllo di flusso hardware sulla USB
-alcuni fori di fissaggio per viti M3 sono troppo vicine ai connettori e non consentono il serraggio delle teste dei viti o dei dadi
-ci sono connettori non in griglia sui 100mils che non consentono l'uso delle board millefori quindi necessita di shield acquistate o progettate ad HOC
-.......

Gli stessi difetti sono presenti sia sulla UNOR3 che sulla MEGA2560

Nonostante questi punti di debolezza che molte altre schede non hanno, il loro punto di forza maggiore è l'abbondanza di librerie, esempi, facilità utilizzo, diffusione, costo, e condivisione

PaoloP:
Ma le classi sono molto comode. :cold_sweat:

Comodità non sta bene con ottimizzazione.
Se proprio vuoi gli oggetti, puoi studiare OOC, Object Oriented C, nel 1993 è stato scritto questo testo intitolato "Object Oriented Programming with ANSI C", si trova anche in rete liberamente e ti insegna a scrivere simil-oggetti usando solo C. L'ho scaricato tempo fa e devo trovare un pò di tempo per leggermelo.