Vai al contenuto

Utente:ThaNigro/Arduino/Luci per macchina RC

Da Wikiversità, l'apprendimento libero.

Questo progetto consiste nella creazione, attraverso la scheda arduino, di un kit di luci per macchine radiocomandate, attraverso la modifica del codice è possibile personalizzare la sequanza in esecuzione.

Funzionamento di una macchina RC

[modifica]

Per comprendere al meglio come utilizzeremo la scheda arduino in una macchina radiocomandata, spieghiamo prima le basi delle varie parti elettroniche presenti in un modello di macchina RC:

  • Trasmittente e Ricevente: ovvero il radiocomando e il ricevitore che ricevono i comandi dal pilota;
  • Servo motore: motore che si occupa del sistema meccanico che permette la sterzata del veicolo;
  • Electronic Speed Controller (ESC): è il componente che fa da tramite dalla ricevente al motore, che si occupa di fornire l'energia necessaria al motore, in base al valore dell'accelerazione proveniente dalla ricevente;
  • Motore: permette il movimento del modellino. possono essere di tipo brushed o brushless;

La batteria di una macchina radiocomandata viene collegata all'ESC, che dal connettore a tre pin (che fornisce una tensione inferiore alla decina di Volt) alimenta a sua volta la ricevente e il servomotore, controllato dal terzo pin del connettore (tipicamente di colore bianco o giallo).

Implementazione di Arduino

[modifica]

Da questo ragionamento ci è possibile capira in maniera piu chiara il motivo dei collegamenti elettronici che seguono.

per alimentare la scheda di Arduino inseriremo nel canale destinato all'ESC un adattatore che permette la connessione di due connettori (uno dei due destinato sempre all'ESC) dal quale con un connettore prenderemo l'alimentazione per la scheda di Arduino, e collegeremo il terzo filo ad un ingresso analogico, con il quale rileveremo il valore dell'accelerazione che proviene dalla ricevente, per poter eseguire una sequenza luminosa che dipende da tale valore.

con un altro adattatore dello stesso tipo (senza pero utilizzare i due fili di alimentazione in quanto Arduino è gia alimentato dall'ESC) collegeremo il cavo che trasporta il valore destinato al servomotore per poter ad esempio indicare la sterzata del modellino.

Codice Arduino

[modifica]
int ch3 = A0;
int th = A1;
int st = A2;

Definizione dei pin per la selezione della seqenza luminosa (ch3, 'channel 3'), per l'aquisizione del valore dell'accelerazione (th, 'throttle') e per l'acquisizione del valore della sterzata (st, 'steering').

const int r = 3; //PWM
const int g = 5; //PWM
const int b = 6; //PWM

Definizione dei pin per il collegamento dei led RGB da inserire intorno al modellino, sono tutti pin PWM (sulla scheda Arduino UNO), cio permette effetti piu visivamente elaborati

const int Lindicator = 7;
const int Rindicator = 8;
const int bk = 9; //PWM
const int light = 10; //PWM

Definizione dei pin per il collegamento dei led per gli indicatori di svolta (Lindicator e Rindicator), per le luci di frenata (bk) e per le luci frontali (light).

int ch3SelValue = digitalRead(ch3);
int thValue = digitalRead(th);
int stValue = digitalRead(st);

Elaborazione del valore in ingresso per i tre ingressi, successivamente memorizzati in una variabile di tipo intero.

int ch3Sel = map(ch3SelValue, 0, 255, 1, 20);

Con una variabile di tipo intero, suddividiamo l'intervallo dei valore per la selezione della sequenza luminosa in venti possibili casi.

void setup() {

  pinMode(ch3 , INPUT);
  pinMode(th, INPUT);
  pinMode(st, INPUT);

  pinMode(r, OUTPUT);
  pinMode(g, OUTPUT);
  pinMode(b, OUTPUT);
  pinMode(Lindicator, OUTPUT);
  pinMode(Rindicator, OUTPUT);
  pinMode(bk, OUTPUT);
  pinMode(light, OUTPUT);

}

Definizione del blocco Setup(), nel quale indichiamo i vari pin come entrate (INPUT), o uscite (OUTPUT).

void loop() {

 switch(ch3Sel){
  case 1:     // Sequenza luminosa 1
      analogWrite(light, 255);
      analogWrite(bk, 190);
      
      if (thValue <= bkThreshold) {
        analogWrite(bk, 255);
      }
      if (stValue >= rStThreshold){
        digitalWrite(Rindicator, HIGH);
        delay (780);
        digitalWrite(Rindicator, LOW);
        delay(780);
      }
      if (stValue >= lStThreshold){
        digitalWrite(Lindicator, HIGH);
        delay (780);
        digitalWrite(Lindicator, LOW);
        delay(780);
      }
    }
  
  break;
  case 2:     // Sequenza luminosa 2

  break;
  case 3:     // Sequenza luminosa 3

  break;
  case 4:     // Sequenza luminosa 4

  break;
  case 5:     // Sequenza luminosa 5

  break;
  case 6:     // Sequenza luminosa 6

  break;
  case 7:     // Sequenza luminosa 7

  break;
  case 8:     // Sequenza luminosa 8

  break;
  case 9:     // Sequenza luminosa 9

  break;
  case 10:     // Sequenza luminosa 10

  break;
  case 11:     // Sequenza luminosa 11

  break;
  case 12:     // Sequenza luminosa 12

  break;
  case 13:     // Sequenza luminosa 13

  break;
  case 14:     // Sequenza luminosa 14

  break;
  case 15:     // Sequenza luminosa 15

  break;
  case 16:     // Sequenza luminosa 16

  break;
  case 17:     // Sequenza luminosa 17

  break;
  case 18:     // Sequenza luminosa 18

  break;
  case 19:     // Sequenza luminosa 19

  break;
  case 20:     // Sequenza luminosa 20

  break;
 }

}

Definizione del blocco Loop(), nel quale analizziamo la variabile 'ch3Sel', che restituisce un valore che va da 1 a 20, che corrisponde ad una diversa sequenza luminosa.