[Sistemi] Studio di una rete con arduino.

Ciao,
Mi è venuto in mente di studiare una rete con arduino! :stuck_out_tongue:
A scuola l'altro giorno abbiamo fatto una verifica e volevo appunto verificare anche praticamente l'esercizio.

Si tratta di una rete con un R parallela a C con una R in serie e un'altra R sul ramo della GND.

Ho fatto il circuito su una breadboard e ho mandato l'ingresso al pin digitale 7 GND a GND e l'uscita al pin analogico 0.

Poi ho scritto questo programmino:

//Prova di un programma per misurare l'uscita di una rete.

#define U 7 // U è il pin in ingresso

void setup()
{
  Serial.begin(9600);  // apre la porta seriale
  pinMode(U, INPUT);  // imposta U come input
}

void loop()
{
  digitalWrite(U, HIGH);  // applica l'ingresso a gradino
  Serial.println(analogRead(0)); // invia al PC il dato che legge dal pin analogico
  delay(100);  // aspetta
  digitalWrite(U, LOW);  // porta a 0 il gradino
  Serial.println(analogRead(0)); // invia al PC il dato che legge dal pin analogico
  delay(100);  // aspetta
}

Il problema è che quando provo a mandare lo sketch ad Arduino Uno il programma mi dice che la porta "/dev/ttyACM0" non è stata trovata! :cry:

Qualcuno è in grado di darmi una mano? :slight_smile:

Ciao icp

Scrivi in modo complicato;
Scrivi un sacco di cose inutili allo scopo di poterti aiutare.

Se ho capito bene é il tuo problema é che non riesci a caricare un programma su Arduino.
Domande: quale arduino, che sistema operativo, quale versione di IDE usi
Cosa hai fatto dopo l'ultima volta che funzionava?

Ritornando sul codice che hai mandato.
Non puoi definire un pin come entrata e volerlo usare come uscita.
Leggi un valore analogico dopo un tempo indefinito visto che no sai la durata del esecuzione del codice.
Cosa Ti aspetti di leggere? Che valori usi per R1, R2 e R3 e C?

Ciao Uwe

Ciao!
Allora per il problema dell'upload ho risolto nell'altro post! :slight_smile:

Tornando allo sketch:

  1. Non capisco dove ho usato il pinIn come pinOut. :stuck_out_tongue:
  2. Si in effetti ora che mi ci fai pensare la lettura dei dati è un po a caso. XD
  3. Dovrei ottenere un esponenziale decrescente che comincia a scendere da 5v con andamento (credo :P) -e^((5/4)*(10^4)*t).
  4. Allora C=1uF, R(parallela) = 220ohm, R(le altre 2)= 390.

In realtà le due R dovevano essere due volte quella del parallelo, quindi 440, ma non le avevo mi sono adattato quindi con quelle da 390ohm.

PS: D'ora in poi cercherò di essere più sintetico :slight_smile:

ciao icp
Scusami la mia insistenza.
Il tuo problema é che non riesci a caricare lo sketch sul Arduino oppure che non ti funziona lo Sketch?
Ciao Uwe

Scusarti di cosa mi stai dando una mano! :smiley:
Comunque prima avevo due problemi quello dell'upload e quello dello sketch che non funzionava.
Ora riesco a caricare gli sketch.
Resta il fatto che lo sketch che ho fatto non mi funziona!
Se riesci a darmi una mano a corregerlo ne sarei felice.

In pratica quello che lo sketch deve fare è restituirmi il valore della tensione all'uscita ogni n-millisecondi data una tensione a gradino all'ingresso (5V).
Questi dati che ottengo li metto poi su carta millimetrata in modo da ottenere un grafico.
Ciao icp

Ciao icp

Aha vuoi fare un oscilloscopio digitale.

Le mie considerzioni nel codice come commento:

//Prova di un programma per misurare l'uscita di una rete.

#define U 7 // U è il pin in ingresso   //Uwe: deve essere un Uscita non un entrata

void setup()
{
  Serial.begin(9600);  // apre la porta seriale
  pinMode(U, INPUT);  // imposta U come input  //Uwe: deve essere un Uscita non un entrata
}

void loop()
{
  digitalWrite(U, HIGH);  // applica l'ingresso a gradino 
  Serial.println(analogRead(0)); // invia al PC il dato che legge dal pin analogico
  delay(100);  // aspetta
  digitalWrite(U, LOW);  // porta a 0 il gradino
  Serial.println(analogRead(0)); // invia al PC il dato che legge dal pin analogico
  delay(100);  // aspetta
}

Il codice cosí scritto Ti fa 2 letture dopo x microsecondi e poi riparte dall inizio. (dove x é un icognita).

La spedizione del valore seriale é un altro freno del programma. se calcoli che con un Baudrate di 9600 puoi spedire ca 960 Byte al secondo vuol dire ceh ci mette ca 1 msecondo per byte.

Tu leggi un valore 10 Bit e trasmetti 8 Bit. Non so dirti cosa succede con i restanti 2 bit e quali sono questi 2 bit.

Non Ti fa una lettura del andamento della curva, ma solo2 punti, uno all'accensione e uno allo spegnimento.
Inoltre con i dati del condensatore e delle resistenze la curva é troppo veloce per misurare qualcosa. Se fai R*C trovi il tempo nel quale la tensione va al 63% del valore finale.
Non ho capito bene il circuito RC che usi.

ciao Uwe