{"id":597,"date":"2011-07-09T15:02:08","date_gmt":"2011-07-09T14:02:08","guid":{"rendered":"http:\/\/pinguino.walii.es\/?p=597"},"modified":"2011-07-09T15:05:41","modified_gmt":"2011-07-09T14:05:41","slug":"pcbc-v1-pinguino-car-bluetooth-control","status":"publish","type":"post","link":"https:\/\/pinguino.walii.es\/?p=597","title":{"rendered":"PCBC v1 – PINGUINO CAR Bluetooth Control"},"content":{"rendered":"

\"\"<\/a> Hoy os mostrare como controlar un coche a radio control pero via bluetooth y ayudando me con PINGUINO.
\nLa idea viene a rais de un MINI controlado por Android que venden en algunas tiendas y pens\u00e9, que ser\u00eda facil de reproducir.<\/p>\n

 <\/p>\n

 <\/p>\n

El control es basico pero he puesto un detalle muy interesante, ya que la direcci\u00f3n de este veh\u00edculo es exponencial ya que puedes indicarle que gire X grados (a diferencia de los coches de radio control tradicionales que son TOPE IZQUIERDA o TOPE DERECHA), para poder controlarlo finamente he puesto un servo para dirigirlo como si de un conductor se tratase, este puede girar la direcci\u00f3n tantos grados como le indiquemos, ahora en el ejemplo lo he puesto en m\u00e1ximos de ambos extremos, pero f\u00e1cilmente puede indicarse que gire a la izquierda X grados.<\/p>\n

El motor principal es controlado por un PUENTE H basico con BC548, y el pinguino es el tradicional 8bits 18f4550, el modulo bluetooth es el mismo que vengo utilizando en anteriores circuitos y facilmente comprable a traves de EBAY.<\/p>\n

La comunicaci\u00f3n bluetooth la realizo con un ordenador MAC, pero puede realizarse con cualquier equipo o distribuci\u00f3n ya que utiliza los protocolos RS232 sobre Bluetooth, generando una interfaz serie virtual en el equipo cliente.<\/p>\n

Tambien el c\u00f3digo de PROCESSING es muy f\u00e1cil y conciso, exportable a java para ser reproducido en cualquier ordenador.
\nDejo el c\u00f3digo fuente para que cada uno lo reproduzca en su PC de casa sea cual sea la distribuci\u00f3n.<\/p>\n

Este es el c\u00f3digo de PINGUINO<\/p>\n

 <\/p>\n

[sourcecode language=\u00bbpy\u00bb]
\n\/\/ PCBC v1
\n\/\/ Pinguino Car Bluetooth Control v1
\n\/\/ Walii.es 2011
\n\/\/ pinguino.walii.es
\n#define RUNLED PORTAbits.RA4
\n#define PIC18F4550 \/\/ control pin of servo
\nint counter; \/\/ counter used for interrupt
\nint position0=50; \/\/pin0 servo vertical
\nint previous;
\nint i;
\nint key;
\nint pulseWidth = 20;
\nvoid setup()
\n{
\nT1CON=0x01; \/\/ configure timer 1
\nPIE1bits.TMR1IE=1; \/\/ set interrupt for timer 1
\nINTCON|=0xA0; \/\/ enable GIE and PEIE
\nfor (i=1;i<8;i++) { \/\/servos conections
\npinMode(i,OUTPUT);
\ndigitalWrite(i,LOW);\t\t\t\/\/ fixe un niveau 0 sur les sorties<\/p>\n

}
\npinMode(0,OUTPUT);
\nSerial.begin(9600);
\n}
\nvoid UserInterrupt()
\n{
\nif (PIR1bits.TMR1IF)
\n{
\nTMR1H=0xFF; \/\/ reload value timer 1
\nTMR1L=0x9C;
\nPIR1bits.TMR1IF=0; \/\/ clear interrupt flag
\nif (counter>position0+51) PORTBbits.RB0=0; \/\/ position
\nelse PORTBbits.RB0=1;
\nif (counter==1500) counter=0; \/\/ value for ~20 mS
\ncounter++;
\n}
\n}<\/p>\n

void stop()
\n{
\n\tdigitalWrite(2,LOW);
\n\tdigitalWrite(1,LOW);
\n\tdelay(10);
\n}
\nvoid stoptotal()
\n{
\n\tdigitalWrite(2,LOW);
\n\tdigitalWrite(1,LOW);
\n\tposition0=50;
\n\tdelay(10);
\n}
\nvoid w()
\n{
\n\tdigitalWrite(2,HIGH);
\n\tdigitalWrite(1,LOW);
\n}
\nvoid s()
\n{
\n\tdigitalWrite(2,LOW);
\n\tdigitalWrite(1,HIGH);
\n}
\nvoid a()
\n{
\nposition0=10;
\n}
\nvoid d()
\n{
\nposition0=80;
\n}
\nvoid q()
\n{
\nposition0=10;
\ndigitalWrite(2,HIGH);
\ndigitalWrite(1,LOW);
\n}
\nvoid e()
\n{
\nposition0=80;
\ndigitalWrite(2,HIGH);
\ndigitalWrite(1,LOW);
\n}
\nvoid z()
\n{
\nposition0=80;
\ndigitalWrite(2,LOW);
\ndigitalWrite(1,HIGH);
\n}
\nvoid c()
\n{
\nposition0=10;
\ndigitalWrite(2,LOW);
\ndigitalWrite(1,HIGH);
\n}<\/p>\n

void loop()
\n{
\nif (Serial.available())
\n {
\nkey=Serial.read();
\nif (key==’w’ && previous!=’w’) stop(),w();
\nif (key==’s’ && previous!=’s’) stop(),s();
\nif (key==’a’ && previous!=’a’) stop(),a();
\nif (key==’d’ && previous!=’d’) stop(),d();
\nif (key==’q’ && previous!=’q’) stop(),q();
\nif (key==’e’ && previous!=’e’) stop(),e();
\nif (key==’z’ && previous!=’z’) stop(),z();
\nif (key==’c’ && previous!=’c’) stop(),c();
\nprevious=key;
\n} else; stoptotal();
\nSerial.printf(" %d", position0);
\n}<\/p>\n

[\/sourcecode]<\/p>\n

 <\/p>\n

y Este es el c\u00f3digo de processing<\/p>\n

[sourcecode language=\u00bbpy\u00bb]
\n\/**
\nPINGUINO CAR CONTROL via BLUETOOTH
\nWalii & walterleonardo
\nPinguino.walii.es
\n*\/
\nimport processing.serial.*;
\nSerial myPort;
\nString port[];
\nint i;<\/p>\n

final static int NORTH = 1;
\nfinal static int EAST = 2;
\nfinal static int SOUTH = 4;
\nfinal static int WEST = 8;
\nfinal static int STOP = 16;
\nint result;
\nfloat x,y;<\/p>\n

void setup() {
\n size(512,400);
\n frameRate(30);
\n result = 0;
\n x = width\/2;
\n y = height\/2;
\n port=Serial.list();
\nprintln(port);
\nmyPort=new Serial(this,port[10],9600);
\n}<\/p>\n

void draw() {
\n background(0);
\n switch(result) {
\n case NORTH: myPort.write("w"); break;
\n case EAST: myPort.write("d"); break;
\n case SOUTH: myPort.write("s"); break;
\n case WEST: myPort.write("a"); break;
\n case NORTH|EAST: myPort.write("e"); break;
\n case NORTH|WEST: myPort.write("q"); break;
\n case SOUTH|EAST: myPort.write("c"); break;
\n case SOUTH|WEST: myPort.write("z"); break;
\n case STOP: myPort.write("x"); break;
\n }
\n fill(255);
\n rect(x,y,10,10);
\n}<\/p>\n

void keyPressed(){
\n switch(key) {
\n case(‘w’):case(‘W’):result |=NORTH;break;
\n case(‘d’):case(‘D’):result |=EAST;break;
\n case(‘s’):case(‘S’):result |=SOUTH;break;
\n case(‘a’):case(‘A’):result |=WEST;break;
\n case(‘x’):case(‘X’):result |=STOP;break;
\n }
\n}<\/p>\n

void keyReleased(){
\n switch(key) {
\n case(‘w’):case(‘W’):result ^=NORTH;break;
\n case(‘d’):case(‘D’):result ^=EAST;break;
\n case(‘s’):case(‘S’):result ^=SOUTH;break;
\n case(‘a’):case(‘A’):result ^=WEST;break;
\n case(‘x’):case(‘X’):result ^=STOP;break;
\n\/\/ case(‘w’):case(‘W’):result |=STOP;break;
\n\/\/ case(‘d’):case(‘D’):result |=STOP;break;
\n\/\/ case(‘s’):case(‘S’):result |=STOP;break;
\n\/\/ case(‘a’):case(‘A’):result |=STOP;break;
\n }
\n}
\n[\/sourcecode]<\/p>\n

 <\/p>\n

 <\/p>\n

<\/span><\/p>\n

\"\"<\/a><\/p>\n

<\/span><\/p>\n

\"\"<\/a><\/p>\n


<\/p>\n","protected":false},"excerpt":{"rendered":"

Hoy os mostrare como controlar un coche a radio control pero via bluetooth y ayudando me con PINGUINO. La idea viene a rais de un…<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[13,3,12],"tags":[],"_links":{"self":[{"href":"https:\/\/pinguino.walii.es\/index.php?rest_route=\/wp\/v2\/posts\/597"}],"collection":[{"href":"https:\/\/pinguino.walii.es\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pinguino.walii.es\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pinguino.walii.es\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/pinguino.walii.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=597"}],"version-history":[{"count":3,"href":"https:\/\/pinguino.walii.es\/index.php?rest_route=\/wp\/v2\/posts\/597\/revisions"}],"predecessor-version":[{"id":635,"href":"https:\/\/pinguino.walii.es\/index.php?rest_route=\/wp\/v2\/posts\/597\/revisions\/635"}],"wp:attachment":[{"href":"https:\/\/pinguino.walii.es\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=597"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pinguino.walii.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=597"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pinguino.walii.es\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=597"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}