Primi approcci ad arduino, primi problemi

Ciao a tutti! Mi chiamo Edoardo, e sono alle prime armi con Arduino, cui mi sono avvicinato per provare a completare un progetto che ho in mente (ma è prematuro parlarne, lo so)

Ho acquistato la DUE (dietro consiglio di amici, la più idonea per il mio progetto - piuttosto che acquistare la UNO e poi la DUE, ho puntato ad un acquisto unico), insieme con un po' di ammenicoli, e sto seguendo i tutorial sul sito insieme al libro di Banzi.

La mia preparazione è una scarsa conoscenza del C++, pessimo corso universitario, discreta di Matlab e pessima in elettronica (Fisica due con 18 e calcio), quindi ottima no?

Sto provando a fare in modo che un led si accenda, si spenga o mantenga la sua condizione, a seconda di quanto una resistenza variabile con la luminosità gli dica, e, contemporaneamente, gestisca i transitori con una dissolvenza.

Ho scritto questo, che alla fine è venuto un po' pasticciato, a seguito di vari (troppi) rimaneggiamenti. Dove sbaglio? Cosa suggerireste?

Ho collegato il led ad un pin normale, mentre la resistenza ad un analogico

const int led = 12;
const int sensore = 0;
 
int val = 0;
int old_val = 0;

int i = 0;


void setup() {
  pinMode(led,OUTPUT);
  pinMode(sensore,INPUT);
  Serial.begin(9600);
}

void loop() {
  
  val = analogRead(sensore);
  
  Serial.println(val); //per tenere d'occhio i valori
    
  
   if(val > old_val){ //cioè se c'è più luce
  for(i=255 ;i>0 ;i--){
    analogWrite(led,i);
    delay(25);
    }
 }else if(val < old_val){ //cioè se è più buio di prima
  for(i=0;i<255;i++){
    analogWrite(led,i);
    delay(25);
    }      
  }else if((val < old_val + 15) && (val > old_val-15)){
    if(val < 150){
      digitalWrite(led,HIGH);
     }else{
       digitalWrite(led,LOW);
       }
       }
    
  
  
  
  old_val = val;
  
  delay(3000);  

}

Vi ringrazio infinitamente!
Edoardo

A parte che con la riga pinMode(sensore,INPUT); con sensore =0 setti il pin 0 digitale (l'RX credo per intenderci come input ) , per gli ingressi analogici non serve settare i pin come input.
Secondo non ho capito bene cosa deve fare il programma o comunque almeno quali errori ti escono perchè a me sembra tutto a posto ...a giusto come scritto QUI.--> analogWrite() - Arduino Reference l'analogWrite funziona solo su i pin che supportano il PWM ergo sono i pin con la biscioletta :grin: .
Buon divertimento!

Errori non ne escono, solo che non funziona bene, il led si accende e spegne, senza seguire quello che volevo.

Per quanto riguarda assegnare il pin di input, sulla due non ci sono segni sui pwm e digital, perché i primi sono tutti pwm, o almeno credo. Credi che il mio zelo sia stato ridondante, e per questo dannoso?

Per iniziare la DUE non è proprio la scheda più indicata. Tieni conto che un pin della DUE eroga molta meno corrente rispetto ad un pin della UNO, e collegare direttamente un LED richiede più accortezza: un pin della DUE eroga o 3 o 15 mA, a seconda del pin. Se non hai dimensionato bene la R del LED, rischi di bruciare il pin. Inoltre la scheda lavora a 3V3, anche questo va tenuto conto perché non tutti i LED sono pilotabili dalla DUE direttamente da un pin.

Tornando al programma, cos'è che dovrebbe fare?

Come mai potrebbe bruciare?

Perché potresti richiedere una corrente superiore a quella che può erogare.
Che tipo di LED stavi pilotando? Che R avevi messo in serie al LED?

Il tipo di LED non saprei, era nel piccolo kit che ho preso su amazon. La resistenza è da 330 Ohm

Che suggerisci?

Sai la formula per calcolare la corrente?
(V-Vf)/R=I

A V sostituisci la tensione di alimentazione, nel caso della Due è 3,3V.
A Vf, la tensione di giunzione del Led, che mediamente dipende dal colore:
Colore ROSSO: 1.8 Volt
Colore GIALLO: 1.9 Volt
Colore ARANCIO: 2.0 Volt
Colore VERDE: 2.0 Volt
Colore BLU: 3.5 Volt
Colore AZZURRO: 3.0 Volt

R è la tua resistenza. I è la corrente in ampere.
Fai tu il conto.

Poi vai sul datasheet del chip della Due e controlli la corrente che può erogare il pin a cui l'hai collegato, e controlli se hai sforato quel valore.

Col rosso sono 5mA...quindi per ora la board è salva no?

Stavo guardando i dati della board sul sito di arduino, ma non ho capito dove leggere le caratteristiche dei singoli pin.

Ciao Rockdamned ... alcune precisazioni ...

  1. Sulla DUE c'è chiaramente indicato quali sono i pin PWM e quali NO ... guarda bene la foto della DUE originale QUI e vedrai che sotto i pin 2 .. 13 c'è proprio scritto PWM, così come, sotto quelli A0 .. A11 c'è scritto Analog In :wink:

  2. NON puoi usare il PIN 0 come ingresso per il tuo sensore. Il PIN 0 è il PIN RX della porta seriale 0 che ... è quella che usi quando lo colleghi alla USB del PC. Scegli quindi un'altro pin tra quelli disponibili.

  3. Come ti è stato detto, la DUE NON è una scheda per chi inizia e, secondo me, hai fatto un errore ad avvicinarti al mondo Arduino con quella scheda.
    E' una scheda molto delicata, lavora solo a 3.3V, è in grado di fornire una corrente minima sui vari pin e quindi richiede sempre dell'elettronica di pilotaggio esterna e infine ... NON è ancora molto ben supportata e NON tutte le librerie e gli shield che trovi ci funzionano (... anzi, sono abbastanza poche le librerie che funzionano, senza modifiche, sulla DUE).

Un consiglio spassionato ? Mettila nel cassetto e investi qualche euro per comparti un Arduino UNO su cui potrai fare i vari esperimenti e sul quale, se bruci il ATmega328P ... lo sfili dallo zoccolo e lo sostituisci con una spesa irrisoria. Quando poi ti sarai fatto le ossa, potrai riprendere in mano la DUE ...

Poi vedi tu ... :roll_eyes:

Guglielmo

Rockdamned:
Stavo guardando i dati della board sul sito di arduino, ma non ho capito dove leggere le caratteristiche dei singoli pin.

... naturalmente .. sul datasheet del SAM3X8E ARM Cortex-M3, la MCU usata su Arduino DUE.

Guglielmo

Ricevuto! Grazie della dritta :slight_smile: vorrà dire che dovrò fare questa spesa, fortunatamente sono accessibili :slight_smile:

Appena arriva ricomincio a smanettare, grazie ancora!

Te ne do un'altra per evitare i danni ... più comuni ... la lettura di QUESTO articolo di Leo XD

Guglielmo

La Due mica la butti, considerala un investimento per il futuro. :wink:

Se bruci il pin di un chip DIP, lo sfili e lo cambi. Se bruci il pin di un chip SMD saldato sulla scheda, puoi buttarla a meno che tu non abbia l'attrezzatura e le conoscenze per dissaldarlo e cambiarlo.

Sembrerebbe perfetta me, peccato non la vendano in Italia (tra spedizione e dogana costicchia)

Qual è la differenza tra DIP e SMD?

Non intendevo indicarti la board Americana, intendevo farti leggere comunque le cose da NON fare :wink:

La differenza tra una board che usa DIP e una che usa SMD è che ... nella prima se bruci la MCU, la sfili dallo zoccolo e la sostituisci, nella seconda ... o hai l'attrezzatura adatta per dissaldare e risaldare quel chip quadrato o ... butti la scheda :wink:

Guglielmo

In attesa che arrivi la UNO, vorrei chiedervi una cosa di elettronica piu che di programmazione, domanda che non ha trovato risposta nel libri di banzi.

Ci sono alcuni pin di GND, ovvero la terra, e generalmente i circuiti vanno fatti, se mi è chiaro, da un pin alla terra. Ma essendoci tre terre, vuol dire che ad una singola messa a terra posso collegare più rami, o l'idea è che ci siano poche cose almonetate dai pin, che magari leggeranno molti input e useranno pochi output (e quindi terre)? Altrimenti, come sj fa? Grazie mille! :smiley:

Ho riletto più volte e non ho capito molto, cosa intendi per:
che magari leggeranno molti input e useranno pochi output (e quindi terre)?

Sia input che output condividono un unico potenziale di riferimento chiamato GND.
Tutti i pin GND sono collegati insieme, quindi la duplicazione è stata pensata solo per comodità.

Ciao.

Si in effetti ho scrtto malissimo :stuck_out_tongue:

No niente il punto è: più pin (linee, rami, che dir si voglia) possono condividere lo stesso GND, o ognuno deve andare ad una singola linea di terra?

L'incomprensione deriva dal fatto che esiste un solo nodo di riferimento GND.
Se su Arduino board ci sono più pin chiamati GND si tratta di una duplicazione motivata dalla comodità di utilizzo,
ed elettricamente sono collegati insieme, per cui puoi usarne uno o tutti.

Quindi si puoi condividere il GND, anzi non hai scelta.

Comunque ci sono delle eccezioni che non valgono solo per Arduino, ma riguardano le basi di elettronica, per cui se
hai un dubbio posta e includi un disegno di un circuito, o una foto della breadboard.

Ciao.