Sto proggettando un sistema di irrigazione automatica con sensore di umidita. La mia esigenza però è quella di avere 9 sensori collegati ad arduino il quale dovra gestire separatamente i risultati dei sensori per attivare appunto l'irrigazione in ogni punto dove richiesto. La mia domanda è come posso aumentare il numero di porte analogiche e digitali. ho visto in commercio la shield v4 che appunto da quanto ho capito aumenta il numero delle porte . Giusto?
potrei replicare sia le porte analogiche che digitali in base a dove collego i pin?
ma poi le porte replicate si comportano allo stesso modo di quelle "oroginali" di arduino
potrei replicare sia le porte analogiche che digitali in base a dove collego i pin?
ma poi le porte replicate si comportano allo stesso modo di quelle "oroginali" di arduino
no, con quella scheda aggiungi solo porte digitali.
E la gestione delle stesse avviene via I2C. Leggermente piu' complesso, ma lo stesso facilissimo visto che ci sono un sacco di librerie di gestione
quindi giusto per chiarirmi le idee se ho capito bene:
con quella scheda aumrento le porte digitali ma facendo uso nel codice di librerie apposite, quindi una sorta di inizializzazioni di queste nuove porte?
fatto questo le porte saranno pienamente riconosciute come digitali da arduino? avrannno una sequenza numerica consecutiva a quella di arduino?
come faccio invece a replicare le porte analogiche dove attacco sensori?
potrei replicare sia le porte analogiche che digitali in base a dove collego i pin?
ma poi le porte replicate si comportano allo stesso modo di quelle "oroginali" di arduino
no, con quella scheda aggiungi solo porte digitali.
E la gestione delle stesse avviene via I2C. Leggermente piu' complesso, ma lo stesso facilissimo visto che ci sono un sacco di librerie di gestione
ho capito, quindi mettiamo il caso che io acquisti questa scheda la stessa una volta collegata ad arduino va programmata con il codice e dopo di che puo essere usata normalmente come porte aggiuntive. Ripeto in arduino sono alle prime armi e forse a volte dico cose "banali" ma abbiate pazienza. mi puoi postare un link dove possa capire bene il funzionamento oppure saresti cosi gentile da illustrarmelo per sommi capi.
in quella pagina ci sono i link al manuale e a degli esempi di codice
ho dato un' occhiata agli esempi e sono abbastanza chiari.
prendiamo ad esempio gli ingressi analogici.
Ce ne sono 16, a cui puoi collegare altrettanti sensori
poi scegli quale sensore leggere ( vedi esempio Analog IN ) e fai una lettura su A0
E' come se avessi un commutatore automatico collegato sul Pin A0. Prima di fare la lettura devi solo "girare" questo commutatore per scegliere il sensore da leggere
si avevo letto quell'esempio, quindi unserita quella parte di codice avro sul monitor seriale il valore del sensore collegato su a0 e quindi riscrivendo lo stesso codice per A1 avro lil valore del sensore su A1.......e cosi via.Giusto?
percio basta inserire questa porzione di codice per usare le porte??
nikola291:
si avevo letto quell'esempio, quindi unserita quella parte di codice avro sul monitor seriale il valore del sensore collegato su a0 e quindi riscrivendo lo stesso codice per A1 avro lil valore del sensore su A1.......e cosi via.Giusto?
percio basta inserire questa porzione di codice per usare le porte??
no, non ti e' ancora ben chiaro
Tutti i sensori collegati su questa scheda e' come se fossero collegati su A0.
prima di fare la lettura sceglierai quale dei 16 sensori leggere.
nikola291:
si avevo letto quell'esempio, quindi unserita quella parte di codice avro sul monitor seriale il valore del sensore collegato su a0 e quindi riscrivendo lo stesso codice per A1 avro lil valore del sensore su A1.......e cosi via.Giusto?
percio basta inserire questa porzione di codice per usare le porte??
no, non ti e' ancora ben chiaro
Tutti i sensori collegati su questa scheda e' come se fossero collegati su A0.
prima di fare la lettura sceglierai quale dei 16 sensori leggere.
scusami ma non riesco a capire forse se facciamo un esmpio ci arrivero..scusa ancora
quindi se io ho 16 sensori collegati sui sedici canali della scheda aggiuntiva nella programmazione del codice per richiamrli a quale pin devo fare riferimenti.......mi puoi fare un esmpio con il codice cosi forse capisco.
Questo il codice dell'esempio citato da @brunello:
/* Demo Sketch for testing IO Expander Analog inputs. Visit http://www.numato.com for more information.
* License: CC BY-SA. More info at http://creativecommons.org/licenses/by-sa/2.0/
* The selection pins(S0, S1, S2, S3) of 74HC4067 IC are connected to PORTA pins(PA0, PA1, PA2, PA3) of MCP23017(U4) IC.
* Common I/O of 74HC4067 IC is connected to Arduino analog pin A0
* Select jumper positions of AD4=0; AD5=0; AD6=1; to set the Address of U4 as 0x21
* Enable pin should be connected to ground to activate the I/O pins. Populate jumper GS7 to connect the Enable pin to GND.
* Select the Analog Pin(0-15) by defining the particular number in line number 18 of this code. */
#include"Wire.h"
#define CommonInput A0
#define AnalogPin 0 // Selects pin number 0 of Analog header
void setup()
{ Serial.begin(9600); // Begin Serial Communication
Wire.begin(); // Begin I2C Communication
/* The following code sets up I2C communication with MCP23017(U4), selects Bank 0 and set all PORTA pins as outputs.
* This is because the select pins of 74HC4067 are driven through MCP23017(U4). Please refer MCP23017 datasheet for register addresses. */
Wire.beginTransmission(0x21); // Start I2C communication with MCP23017(U4)
Wire.write(0x00); // Set memory mapping address to IODIRA register of U4
Wire.write(0x00); // Set all PORTA pin of U4 to outputs
Wire.endTransmission(); // Ends I2C communication with U4
pinMode(CommonInput, INPUT); // Set Analog Common I/O(Arduino Analog A0) to INPUT
}
void loop()
{
Wire.beginTransmission(0x21); // Start I2C communication with MCP23017(U4) IC
Wire.write(0x12); // Set memory mapping address to PORTA register of U4
Wire.write(AnalogPin); // Selects the Analog Pin to read (this will write the selection address to PORTA of U4)
Wire.endTransmission(); // Ends I2C communication with U4
int AdcValue = analogRead(CommonInput); // Read the ADC value from Common I/O(Arduino Analog A0)
Serial.println(AdcValue); // Print the ADC reading to serial monitor
delay(500);
}
Il pezzo importante è questo:
Wire.beginTransmission(0x21); // Start I2C communication with MCP23017(U4) IC
Wire.write(0x12); // Set memory mapping address to PORTA register of U4
Wire.write(AnalogPin); // Selects the Analog Pin to read (this will write the selection address to PORTA of U4)
Wire.endTransmission();
La terza istruzione, sarà un numero tra 0-15 ovvero qui dici quale pin esterno usi, attraverso il pin Arduino A0.
/*
* The selection pins(S0, S1, S2, S3) of 74HC4067 IC are connected to PORTA pins(PA0, PA1, PA2, PA3) of MCP23017(U4) IC.
* Common I/O of 74HC4067 IC is connected to Arduino analog pin A0
* Select jumper positions of AD4=0; AD5=0; AD6=1; to set the Address of U4 as 0x21
* Enable pin should be connected to ground to activate the I/O pins. Populate jumper GS7 to connect the Enable pin to GND.
* Select the Analog Pin(0-15) by defining the particular number in line number 18 of this code.
*/
#include"Wire.h"
#define CommonInput A0 #define AnalogPin 0 // Selects pin number 0 of Analog header
void setup()
{
Serial.begin(9600); // Begin Serial Communication
Wire.begin(); // Begin I2C Communication
/*
* The following code sets up I2C communication with MCP23017(U4), selects Bank 0 and set all PORTA pins as outputs.
* This is because the select pins of 74HC4067 are driven through MCP23017(U4). Please refer MCP23017 datasheet for
* register addresses.
*/
Wire.beginTransmission(0x21); // Start I2C communication with MCP23017(U4)
Wire.write(0x00); // Set memory mapping address to IODIRA register of U4
Wire.write(0x00); // Set all PORTA pin of U4 to outputs
Wire.endTransmission(); // Ends I2C communication with U4
pinMode(CommonInput, INPUT); // Set Analog Common I/O(Arduino Analog A0) to INPUT
}
void loop()
{
Wire.beginTransmission(0x21); // Start I2C communication with MCP23017(U4) IC
Wire.write(0x12); // Set memory mapping address to PORTA register of U4
Wire.write(AnalogPin); // Selects the Analog Pin to read (this will write the selection address to PORTA of U4)
Wire.endTransmission(); // Ends I2C communication with U4
int AdcValue = analogRead(CommonInput); // Read the ADC value from Common I/O(Arduino Analog A0)
Serial.println(AdcValue); // Print the ADC reading to serial monitor
delay(500);
}
ok...il codice lo avevamo gia analizzato ma quello che io non riesco a capire è come faccio a pilotare separatamente i 16 canali....da quanto ho capito non basta sosituire A0 con A1 A2 A3 e cosi via............questo passaggio non mi è chiaro