Cum sa hackuiesti o telecomanda de elicopter de jucarie

Am primit acum mult timp un elicopter de jucarie, de la cineva care il „maltratase” destul de bine. Era un coaxial cu comanda IR si efectiv avea elicele atat de „roase”, incat am crezut ca proprietarul l-a folosit sa tunda gazonul prin spatele casii 😀

In fine, elicopterul l-am facut bucatele (motorasele alea coreless sunt super, apropo) si am ramas cu telecomanda infrarosu. Am incercat sa citesc codurile emise de telecomanda, cu ajutorul lui Arduino, dar era prea mare bataie de cap (pe viitor trebuie sa imi iau un Analizor Logic!), asa ca am facut-o bucati.

2016-03-03 13.13.01

In interior, un PCB, un singur microcontroller fara nume, fara numar, fara serie (se stieee!), 3 LED-uri IR (pe care le-am extras frumos), dar mai ales miezul: 4 potentiometre!

Am incercat sa urmaresc traseele de pe placa, pentru a ma folosi de acestea, am taiat acolo unde era cazul (traseele care duceau spre microcontroler si spre alte circuite inutile de pe placa) si am curatat cu biaxul emailul din apropierea terminalelor potentiometrelor pentru a avea o suprafata perfecta pentru lipirea firelor.

2016-03-03 13.13.10

Pentru alimentare am folosit in mare parte traseele de pe placa si m-am legat cu doua fire in apropierea terminalelor potentiometrului de pe axa orizontala. Firele de comanda de la potentiometre sunt lipite pe terminalele corespunzatoare cursoarelor (pinii din mijloc marcati cu galben).

In urma masuratorilor, aproape toate potentiometrele din telecomanda au valoarea de 5 kOhmi. De data asta am omis intentionat sa ma folosesc si de celelalte componente de pe placa: mai sunt trei butoane, doua cu doua pozitii si unul cu trei pozitii si un led bicolor (rosu si galben). In functie de rezultatele pe care le voi avea in continuare cu telecomanda, voi folosi si restul componentelor.

2016-03-03 13.14.59

Dupa incheierea sesiunii de lipit, am montat placuta cu joystickurile inapoi in carcasa si am rupt bucatelele de plastic care foloseau ca despartitoare pentru baterii (telecomanda folosea 6 baterii AA), pentru a face spatiu pentru un Arduino Pro Mini sau un o alta placuta Arduino mai „low-profile”.

Pentru proba, am modificat un sketch gasit aici si a iesit codul de mai jos.

 

void setup() {
Serial.begin(9600);
}

void loop() {
int sensorValue = analogRead(A0);
float axaX = map(sensorValue, 0, 1023, 0, 1023);

int sensorValue2 = analogRead(A1);
float axaY = map(sensorValue2, 0, 1023, 0, 1023);

int sensorValue3 = analogRead(A2);
float axaZ = map(sensorValue3, 0, 1023, 0, 1023);

int sensorValue4 = analogRead(A3);
float pot = map(sensorValue4, 0, 1023, 0, 1023);

Serial.println("_____________");
Serial.print("Directie= ");
Serial.println(axaX);
Serial.print("Altitudine= ");
Serial.println(axaY);
Serial.print("Acceleratie= ");
Serial.println(axaZ);
Serial.print("Auxiliar= ");
Serial.println(pot);

delay(5000);
}



Rezultatul citirilor din Serial Monitor cu toate potentiometrele in pozitie neutra (joystickul din stanga este in jos), este urmatorul:

Directie= 497.00
Altitudine= 510.00
Acceleratie= 148.00
Auxiliar= 0.00

Acceleratie maxima
____________________
Directie= 497.00
Altitudine= 510.00
Acceleratie= 810.00
Auxiliar= 0.00

Directie maxim stanga
____________________
Directie= 148.00
Altitudine= 494.00
Acceleratie= 810.00
Auxiliar= 0.00

Directie maxim dreapta
____________________
Directie= 840.00
Altitudine= 511.00
Acceleratie= 810.00
Auxiliar= 0.00

Altitudine maxim sus
____________________
Directie= 500.00
Altitudine= 833.00
Acceleratie= 810.00
Auxiliar= 0.00

Altitudine maxim jos
____________________
Directie= 494.00
Altitudine= 167.00
Acceleratie= 810.00
Auxiliar= 0.00

Auxiliar la maxim
____________________
Directie= 494.00
Altitudine= 517.00
Acceleratie= 150.00
Auxiliar= 1023.00

Dupa cum putem observa, potentiometrele nu au curse prea mari si nici rezolutie prea buna, ceea ce inseamna ca telecomanda nu e tocmai indicata pentru activitati aero, unde sunt necesare potentiometre de calitate si cu o cursa consistenta.

In fine, si daca tot am facut-o si pe asta, am zis sa vad cum se comporta telecomanda cand vine vorba de controlat servomecanisme.

2016-03-03 13.02.39

Am folosit codul asta (care e un exemplu de sketch modificat din libraria Servo din Arduino IDE):

#include <Servo>

Servo myservo1;
Servo myservo2;
int potpin1 = A1;
int potpin2 = A2;
int val1;
int val2;

void setup()
{
myservo1.attach(9);
myservo2.attach(10);
}

void loop()
{
val1 = analogRead(potpin1);
val1 = map(val1, 0, 1023, 180, 0);
myservo1.write(val1);
delay(15);
val2 = analogRead(potpin2);
val2 = map(val2, 150, 813, 180, 0);
myservo2.write(val2);
delay(15);
}


Iar rezultatul este cel din videoul de mai jos.

Anunțuri

2 păreri la “Cum sa hackuiesti o telecomanda de elicopter de jucarie”

Lasă un răspuns

Completează mai jos detaliile tale sau dă clic pe un icon pentru a te autentifica:

Logo WordPress.com

Comentezi folosind contul tău WordPress.com. Dezautentificare / Schimbă )

Poză Twitter

Comentezi folosind contul tău Twitter. Dezautentificare / Schimbă )

Fotografie Facebook

Comentezi folosind contul tău Facebook. Dezautentificare / Schimbă )

Fotografie Google+

Comentezi folosind contul tău Google+. Dezautentificare / Schimbă )

Conectare la %s