[Risolto] Gestire più shilds con Arduino Uno

Buona sera a tutti, ho appena finito di leggere il regolamento e spero proprio di non commettere errori imperdonabili in questo primo messaggio.

Il problema che mi trovo ad affrontare è il seguente:
devo pilotare due pompe, leggere la pressione da un sensore e scrivere delle informazioni su un LCD.
Attualmente sto usando un arduino Uno, un motor shield, un sensore di pressione e un LCD shield.

Ora ho la necessità di salvare le letture del sensore, quindi pensavo di utilizzare anche un SD shield. Il problema è che sono a corto di pin!
Cercando una possibile soluzione ho visto che con uno shift register si possono comandare piu led con pochi pin, però non so se la stessa cosa si può applicare al mio caso.
Esiste una soluzione semplice? Sono a corto di idee :~

Grazie in anticipo,
Dario.

Ti invitiamo a presentarti qui: http://forum.arduino.cc/index.php?topic=113640.0 e a leggere il regolamento: http://forum.arduino.cc/index.php?topic=149082.0 - qui una serie di schede by xxxPighi per i collegamenti elettronici vari: http://forum.arduino.cc/index.php?topic=146152.0 - qui le pinout delle varie schede by xxxPighi: http://forum.arduino.cc/index.php?topic=151646.0 - qui una serie di link utili: http://forum.arduino.cc/index.php?topic=126861.0

Il problema che mi trovo ad affrontare è il seguente:
devo pilotare due pompe, leggere la pressione da un sensore e scrivere delle informazioni su un LCD.
Attualmente sto usando un arduino Uno, un motor shield, un sensore di pressione e un LCD shield.
pensavo di utilizzare anche un SD shield

ho appena finito di leggere il regolamento

Hai letto il regolamento, ci dovrebbe essere scritto da qualche parte che le domande dovrebbero essere chiare e ben descritte per metterci in condizioni di rispondere senza ricorrere all’immaginazione e senza dover rispondere con altre domande.

Ora, dovrebbero essere noti almeno LCD shield che intendi usare e il motor shield che intendi usare con dei link, ti chiedo questo perchè tu sai già quanti pin ti serviranno visto che dici di esserne a corto, ma di quanto sei a corto a noi non lo dici?
uno shift register può risolvere la necessità di pin si, comporta anche un aumento di dimensioni del programma e un leggero allungamento di svolgimento dello stesso, ma quanto è grande lo sketch, quanto è complicato quello che vuoi fare?
così a occhio non mi sembri a corto però dipende dalle specifiche … chiedo alla chiromante aspettami qui … ahahahhahahhaa

ciao

ok, scusate, ho sbagliato al primo colpo! :~ Semplicemente pensavo non fosse importante sapere quanti pin mi servirebbero in più. Rimedio subito!

Cominciamo dall'inizio. Quello che devo fare è: controllare la velocità e il senso di rotazione di due pompe che immentono una certa portata in un sistema. Con il sensore di pressione misuro qual è la pressione e mi ricavo il valore della resistenza idraulica.

A livello di software, devo: - gestire la pressione di 5 pulsanti ( +- velocità, orario\antiorario, selezione canale) - mostrare a schermo, per ognuna delle pompe velocità e senso di rotazione - raccogliere le letture del sensore e mostrare a schermo una media - salvare le letture per poterle analizzare col pc

Per ora, sono riuscito a fare tutto tranne l'ultimo punto.

Per quanto riguarda l'hardware, questa è la situazione:

Arduino Motor Shield Rev3: http://store.arduino.cc/index.php?main_page=product_info&cPath=37_5&products_id=204&language=it

SainSmart LCD Keypad Shield: http://www.sainsmart.com/sainsmart-1602-lcd-keypad-shield-for-arduino-duemilanove-uno-mega2560-mega1280.html

Per quanto riguarda il sensore, non l'ho ancora sotto mano, quindi non saprei proprio, ma penso che almeno un pin lo porti via.

Pin Arduino:

D13 -> direzione canale A motor shield D12 -> direzione canale B motor shield D11 -> velocità canale A motor shield D10 -> Backlit Control LCD shield D9 -> Enable LCD shield D8 -> RS (Data or Signal Display Selection) LCD shield D7 -> Dati LCD shield D6 -> Dati LCD shield D5 -> Dati LCD shield D4 -> Dati LCD shield D3 -> velocità canale B motor shield D2 -> D1 -> D0 ->

(ora che scrivo mi viene anche un'altro dubbio. Se nelle specifiche degli shield mi dicono, ad esempio, che la velocità del canale A del motor shield è controllata dal pin D11, io non posso far qualcosa per controllarla con il pin D2?)

Questo è lo stato del progetto ad oggi. Cercando info sulle SD shield ho trovato questa:

https://www.sparkfun.com/products/9802 oppure questa https://learn.adafruit.com/adafruit-micro-sd-breakout-board-card-tutorial/wiring

e se ho capito bene (non ne sarei sicurissimo a questo punto) richiedono entrambe 4 pin. (domanda bonus: i pin D1 e D0 si possono usare come gli altri?)

spero di essere stato piu chiaro. Chercate di capire che essendo completamente a digiuno di queste cose non so nemmeno quali sono le informazioni che posso esservi utili.

P.S. Grazie per i link con il materiale di supporto, sono davvero molto utli.

Lascia stare i pin D0 e D1 che ti servono per la seriale e per fare il debug ... ... tu sai invece che TUTTI i pin analogici, A0 .. A5 ... possono essere normalmente usati come pin digitali ? ;)

Quindi .. in realtà, hai altri 6 pin XD

Guglielmo

) ) $)

ecco, questa me l’ero persa!

Quindi basta dichiararli come un qualisasi altro pin digitale utilizzando numeri da 14 a 18?
ad esempio
pinMode(14, OUTPUT)

ok, mi rendo conto che può sembrare una banalità assurda, però se il mio motor shield mi dice che per controllare la velocità devo utilizzare il D11 e io invece ho solo gli analogici da utlizzare come faccio?
Oppure, più in generale, i pin da utlizzare indicati dai vari shield sono vincolanti o no?

grazie ancora :slight_smile:

Mi sa' che sei stato un po' sfortunato nella scelta delle shield

1) una SD ha bisogno obbligatoriamente di D13 - SCK D12 - MISO D11 - MOSI piu' un'altro pin a scelta per il CS

Quindi la tua motor shield va' in conflitto Potresti usare una board L298 ( non una shield che va' montata sopra Arduino) , in modo da poterla collegare come vuoi. Ad esempio questa http://www.ebay.it/itm/L298N-DC-Stepper-Motor-Dual-H-Bridge-Drive-Controller-Board-Module-for-Arduino-/191148281194?pt=UK_BOI_Industrial_Automation_Control_ET&hash=item2c81534d6a Ora ti servono 4 pin ( come dice Guglielmo ci sono anche gli Analogici che possono essere usati come digitali ), ma il problema e' che due devono essere PWM e solo uno ( il D3 ) e' rimasto libero, gli altri se li frega la shield LCD e visto che pure questa non ha i pin configurabili, dovresti cambiarla con un LCD I2C

CPDT: Quindi basta dichiararli come un qualisasi altro pin digitale utilizzando numeri da 14 a 18?

Puoi usare anche i nomi riportati sulla serigrafia della scheda, ovvero A0, A1, ecc. Esempio:

pinMode(A2, OUTPUT);
digitalWrite(A2, HIGH);

o anche come ingressi con INPUT e digitalRead.

EDIT: Forse, ma dico forse, potresti risolvere con una Arduino Leonardo. Hai un pin PWM in più e non mappa la SD sui pin 11, 12 e 13 ma sul connettore ICSP. Inoltre non usa i pin 0 e 1 per la seriale lato PC. Una shield SD con connessioni ICSP è questa: http://www.ebay.com/itm/Arduino-SD-TF-card-expansion-board-Shield-module-Stackable-module-building-block-/310735773715 Molte altre prendono i segnali SPI dai pin 11, 12 e 13 e quindi non funzionano con la Arduino Leonardo. Ti resta comunque il problema del pin 4 che serve per la gestione della SD ma che ti indichi collegato al LCD.

Brunello: gli altri se li frega la shield LCD e visto che pure questa non ha i pin configurabili, dovresti cambiarla con un LCD I2C

... e visto che ti serve con tastiera, guarda questo oggetto I2C che, oltretutto, trovi reperibile in Italia.

Attento, a quell'oggetto devi poi aggiungere il tipo di LCD che vuoi ... come chiaramente indicato.

Guglielmo

Grazie mille per tutti gli interventi !!!

Riassumendo, tre pin che uso per il motorshield mi servono obbligatoriamente per l'SD. Cambiando componenti il problema non si porrebbe. Però questa la vorrei tenere come ultima alternativa, quindi vi chiedo:

Non posso utilizzare due pin analogici al posto del D12 e del D13 e utilizzare il pin D10 che dovrebbe essere per l'LCD al posto del D11? o anche questi sono fisati? In questo caso, da dove lo capisco che sono fissi?

Grazie mille ancora a tutti!

EDIT: rileggendo mi sono accorto che mi avete gia detto che l'LCD ha pin non riconfigurabili. Quindi quello che ho proposto qua sopra è completamente infattibile?

EDIT: rileggendo mi sono accorto che mi avete gia detto che l'LCD ha pin non riconfigurabili. Quindi quello che ho proposto qua sopra è completamente infattibile?

esatto. Sia LCd che Motor shiled non sono riconfigurabili. perche' fisicamente connessi a quei Pin e non c'e' modo di cambiarli

Non e' che invece di una SD ti basta lo spazio che c'e' sulla Eeprom ?

Non e' che invece di una SD ti basta lo spazio che c'e' sulla Eeprom ?

Se non ho capito male si sta parlando di 1Kb, ma io ho necessità di salvare le letture del sensore e corrispondente velocità della pompa per un periodo relativamente lungo :(

Sia LCd che Motor shiled non sono riconfigurabili. perche' fisicamente connessi a quei Pin e non c'e' modo di cambiarli

Perdona l'ignoranza, ma con fisicamente connessi intendi quando li monto uno sull'altro? Se così fosse, se usassi dei cavi jumper senza montarli a castello?

Perdona l'ignoranza, ma con fisicamente connessi intendi quando li monto uno sull'altro? Se così fosse, se usassi dei cavi jumper senza montarli a castello?

la tua idea e' valida se NON LI MONTI A CASTELLO, a quel punto diventano delle semplici Board Anche se non e' proprio bello a vedersi

Cavolo allora ho risolto! A questo punto la bellezza è secondaria XD

Devo solo stare attento nel dare i pin giusti alla SD e a utilizzare pin PWM dove serve.

Tutto questo perchè non capivo da cosa dipendesse la configurabilità dei pin! E se tanto mi da tanto l'SD ha bisogno di quei tre pin lì perchè sono proprio quelli che supportano la comunicazione SPI ( da quello che leggo nella scheda di arduino UNO)

Dovrei aver capito :) Grazie mille davvero!

CPDT: Quindi basta dichiararli come un qualisasi altro pin digitale utilizzando numeri da 14 a 18?

Da 14 a 19, i pin analogici sono 6, non 5 ;)