"robotizzare" una macchinina telecomandata

L'altro giorno sono stato a un mercatino dell'usato a Roma (via Conca D'Oro), e mi sono imbattuto in un'inaspettata occasione! C'e' una tizia che vende (credo che il mercatino ci sia tutti i weekend) delle stupide automobiline telecomandate da 4 soldi (anzi, da 12 euro); ne ho comprata una e smontata, e dentro c'e' un circuito con un chippetto RX 2CS: http://tec.icbuy.com/upload/silan/TX-2C(RX-2C)AY.pdf

Guardando il datasheet, si intuisce che il chip è fatto per controllare due ponti H, che credevo fosse quindi cio' che contiene il circuitino che ho trovato nella macchinina. Così ho pensato: e se invece del chip di bordo, ci collego una arduino e dei sensori? Detto-fatto. :)

Ho collegato la arduino ai piedini 6,7, 10 e 11 (senza nemmeno bisogno di staccare il chip di bordo)., che controllano direzione di moto e direzione di sterzata... e questo è tutto! Ho il mio primo robot! :) Per il momento ovviamente puo' solo svolgere compiti preprogrammati, ma ora provero' ad aggiungere dei sensori; ovviamente sempre in ottica economica: due normali led IR da usare come "distanziometro" per farla fermare prima che sbatta contro gli ostacoli. Poi dovro' installarci una Ardweeny invece che una "pesantissima" Arduino: la macchinina è poco piu' grande della arduino stessa!

bella mossa! hai un telaio già costruito, e se riesci ad intercettare il segnale della ricevente e della trasmittente, puoi inviare comandi attraverso di essi, magari pilotandola dal pc... uhmm quante idee! devo cercare la mia vecchia macchina radiocomandata!

Ci avevo pensato, ma se mando i comandi tramite il telecomando, la macchinina non è autonoma, quindi non è un robot, ma rimane un giocattolo! Invece voglio mettergli il "cervello elettronico" a bordo. Anche perche' se mettessi a bordo anche dei sensori, per fargli inviare i dati al "cervello" collegato al telecomando... mi servirebbe comunque una arduino anche a bordo per gestire l'invio dei dati!

diventa un drone. magari i comandi che passi non sono per pilotarlo, ma semplicemente per modificareil suo comportamento (guida aggressiva/cauta, ecc..)

Sarebbe bello avere una comunicazione full-duplex, in modo da poter leggere a pc i dati rilevati da arduino ecc...

dai un'occhiata alle vecchie discussioni, c'è una discussuine su come usare i led IR come sensori per distanza molto economici ma comunque molto validi

E così, sono riuscito a costruire il mio primo robot. 8)
Con una arduino, una macchinina da 12 euro e due led IR che avevo nel cassetto. :astonished:
Roba da pazzi. :astonished:

Eccovi lo sketch:

#define irEmitter 12            // polo positivo emettitore
#define irReceiverN 7          // polo negativo ricevitore
#define irReceiverP 9   // polo positivo ricevitore

#define LEFT 8
#define RIGHT 10
#define FORWARD A3
#define BACKWARD A0

long distance = 0;
int interval = 15;

void setup() {
  Serial.begin(57600);             // inizializza seriale a 9600 baud
  pinMode(irEmitter, OUTPUT);      // il led emettitore è un output
  pinMode(irReceiverP, OUTPUT);    // il polo positivo del led ricevitore è un output
  digitalWrite(irReceiverP, LOW);  // e deve essere LOW
  
  pinMode(LEFT,OUTPUT);
  pinMode(RIGHT,OUTPUT);
  pinMode(FORWARD,OUTPUT);
  pinMode(BACKWARD,OUTPUT);  
}


int focus() {
 distance = readLight(true) - readLight(false);
 if(distance < 0) distance = 0;
 // processing
 int data = int(Serial.read());    //ottieni seriale
 if(data == '1') interval++;       //se processing chiede di aumentare aumenta
 if(interval > 0) if(data == '2') interval--; //se non sei a 0 diminuisci
 Serial.print(interval);           //spedisci a processing distanza
 Serial.print(" ");                //suddivisa da uno spazio
 Serial.println(distance);         //e l'intervallo
 return distance;
}

double readLight(boolean lightOn) {
 digitalWrite(irEmitter, lightOn ? HIGH : LOW);
 pinMode(irReceiverN, OUTPUT);
 digitalWrite(irReceiverN, HIGH); //carico ricevitore di induttanza
 long reading = 0;
 pinMode(irReceiverN, INPUT);
 digitalWrite(irReceiverN, LOW);
 long lightTime = millis();
 while((millis() - lightTime) < interval)
  if(digitalRead(irReceiverN) == 0)
   reading++;

 return reading;
}

void GoForward() {
  digitalWrite(FORWARD,HIGH);
  digitalWrite(BACKWARD,LOW);  
}
    
void GoBackward() {
  digitalWrite(FORWARD,LOW);
  digitalWrite(BACKWARD,HIGH);  
}


void StopEngine() {
  digitalWrite(FORWARD,LOW);
  digitalWrite(BACKWARD,LOW);  
}

void loop() {
  while (focus() < 200) {
    GoForward();
  }
  GoBackward();
}

La macchinina va avanti finchè non vede un ostacolo, poi va indietro finche’ non lo vede piu’, poi rivà avanti… :stuck_out_tongue:
'na cretinata… ma lo decide da sola, quindi è un robot a tutti gli effetti!
Unico problema: una arduino standard e una batteria sono TROOOOOPPO pesanti per questa macchinina… quindi le ruote girano solo se la tengo in mano! :roll_eyes: Domani devo passare alla versione Ardweeny…

Probabilmente dovò aggiungere anche un’isteresi, perche’ per quei due secondi che la macchinina riesce a camminare da sola prima che il peso “ciucci” tutte le batterie di bordo :roll_eyes: , siccome va molto piano va “in stallo” quando arriva alla distanza critica dall’ostacolo.

Complimenti!

Volevo fare una cosa del genere con una vecchia macchinina che ha mio zio che ha la ricetrasmittente rotta...

Ma come sensore formato dai due led hai utilizzato il codice di gioblu che si trovava qualche topic fa?

Ciao JumpJack non sai che piacere vedere una mia invenzione essere utile a qualcuno :grin:!! Fai qualche foto e magari un video!! Sono curioso di vedere l'oggetto!! Perchè non carichi un articolo sulla tua realizzazione (magari potrebbe essere utile a qualcun altro :grin:) http://www.gioblu.com/index.php?option=com_content&view=article&layout=form&Itemid=15

xelendilx: Complimenti!

Volevo fare una cosa del genere con una vecchia macchinina che ha mio zio che ha la ricetrasmittente rotta...

Ma come sensore formato dai due led hai utilizzato il codice di gioblu che si trovava qualche topic fa?

Esatto.

gbm: Ciao JumpJack non sai che piacere vedere una mia invenzione essere utile a qualcuno :grin:!! Fai qualche foto e magari un video!! Sono curioso di vedere l'oggetto!! Perchè non carichi un articolo sulla tua realizzazione (magari potrebbe essere utile a qualcun altro :grin:) http://www.gioblu.com/index.php?option=com_content&view=article&layout=form&Itemid=15

Sì, infatti ho preparato un articolo... ma per il sito del "gruppo arduino" che sta organizzando DigitalRome di settembre, mi spiace! http://jumpjack.altervista.org//digitalrome/progetti/macchinina/index.xhtml

Cavolo, sembra che il metodo dei led IR sia molto piu' sensibile alla luce di quello che credevo, nonostante abbia usato gli infrarossi! Il comportamento della macchinina cambia profondamente lontano o vicino alla finestra!

prova a fare una specie di "tettuccio" in modo da tenere i led sempre in ombra, dovrebbe funzionare

edit: ancora meglio se li metti in una scatola

Sì, infatti ho preparato un articolo... ma per il sito del "gruppo arduino" che sta organizzando DigitalRome di settembre, mi spiace! http://jumpjack.altervista.org//digitalrome/progetti/macchinina/index.xhtml

Ciao, perché se clicco sul link mi appare una pagine che mi dice "la risorsa è qui" e cliccando cerca di scaricarmi il file index invece di aprire la pagina? (Ho procurato una macchinina.... :D)

menniti:

Sì, infatti ho preparato un articolo... ma per il sito del "gruppo arduino" che sta organizzando DigitalRome di settembre, mi spiace! http://jumpjack.altervista.org//digitalrome/progetti/macchinina/index.xhtml

Ciao, perché se clicco sul link mi appare una pagine che mi dice "la risorsa è qui" e cliccando cerca di scaricarmi il file index invece di aprire la pagina? (Ho procurato una macchinina.... :D)

Che appaia quella fastidiosissima pagina è "normale", perche' Altervista funziona cosi', ahime'. Pero' è strano che il browser cerchi di scaricare il file invece di aprirlo!

Pero' in teoria la pagina "di intermezzo" dovrebbe apaprirti solo se clicki sul link dalla pagina principale del nostro sito, mentre se scrivi questo nella barra-indirizzi dovrebbe aprirsi subito la pagina... o no? http://jumpjack.altervista.org//digitalrome/progetti/macchinina/index.xhtml

Niente da fare, sono andato direttamente sulla home del tuo sito, mi fa entrare nelle altre due sezioni, invece su questa mi propone di scaricare l’home page, sarà la desinenza xhtml o il nome index1? Il sito sulla programmazione ha una pagina html “semplice” e si apre. :astonished:

Io ho appena provato sia con Chrome che con FF sotto Linux: a parte che a volte compare la pagina di intermezzo, cliccando su "qui" arrivo alla pagina del progetto.

Io ho la coppia maledetta WinXP-IE8, speriamo che jumpjack risolva la cosa, vorrei proprio realizzarlo questo progettino.

Con QUESTO link riesco ad accedere direttamente alla pagina!

Sono riuscito a vederlo con Firefox, explorer non ne vuole. Bello, appena possibile voglio far fare anch'io alla mia macchinina avanti e indietro XD

Stavo pensando che si potrebbe fare anche un'altra prova: un sensore di luce. Se si mette una lampadina/accendino/cellulare davanti alla macchinina, quella lo segue. :) Oppure scappa, che è piu' bello. :)

Che dite, un normale LED IR potrà essere usato per "leggere" una linea nera sul pavimento, come si fa coi sensori "veri" dei line follower?

Bel progettino, più o meno quello che vorrei fare anche io :. :D

Ecco pronta l' "evoluzione" della macchinina! http://jumpjack.altervista.org/digitalrome/progetti/macchinina/index20.html

Pero' i sensori ancora non sono attivi...