{"id":4767,"date":"2021-12-18T22:15:02","date_gmt":"2021-12-18T22:15:02","guid":{"rendered":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?p=4767"},"modified":"2021-12-22T20:48:51","modified_gmt":"2021-12-22T20:48:51","slug":"carrito-gps","status":"publish","type":"post","link":"https:\/\/blogs.etsii.urjc.es\/dseytr\/carrito-gps\/","title":{"rendered":"Carrito GPS"},"content":{"rendered":"\n<p>Proyecto realizado por el grupo 11 : Pedro Barquero Torres para la asignatura de Dise\u00f1o de Sistemas Empotrados<\/p>\n\n\n\n<p><strong>Objetivo <\/strong>:<\/p>\n\n\n\n<p>El objetivo del proyecto es dise\u00f1ar un carro que por bluetooth se conecta al m\u00f3vil y a trav\u00e9s de un m\u00f3dulo GPS y una br\u00fajula magn\u00e9tica sigue los pasos de la persona que lo est\u00e1 dirigiendo por el m\u00f3vil.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blogs.etsii.urjc.es\/wp-content\/uploads\/sites\/8\/2021\/12\/WhatsApp-Image-2021-12-16-at-18.07.57.jpeg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/blogs.etsii.urjc.es\/wp-content\/uploads\/sites\/8\/2021\/12\/WhatsApp-Image-2021-12-16-at-18.07.57-1024x768.jpeg\" alt=\"\" class=\"wp-image-4782\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2021\/12\/WhatsApp-Image-2021-12-16-at-18.07.57-1024x768.jpeg 1024w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2021\/12\/WhatsApp-Image-2021-12-16-at-18.07.57-300x225.jpeg 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2021\/12\/WhatsApp-Image-2021-12-16-at-18.07.57-768x576.jpeg 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2021\/12\/WhatsApp-Image-2021-12-16-at-18.07.57-1536x1152.jpeg 1536w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2021\/12\/WhatsApp-Image-2021-12-16-at-18.07.57.jpeg 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p><strong>Materiales y presupuesto :<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/blogs.etsii.urjc.es\/wp-content\/uploads\/sites\/8\/2021\/12\/image-47.png\"><img loading=\"lazy\" decoding=\"async\" width=\"583\" height=\"737\" src=\"https:\/\/blogs.etsii.urjc.es\/wp-content\/uploads\/sites\/8\/2021\/12\/image-47.png\" alt=\"\" class=\"wp-image-4769\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2021\/12\/image-47.png 583w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2021\/12\/image-47-237x300.png 237w\" sizes=\"auto, (max-width: 583px) 100vw, 583px\" \/><\/a><\/figure>\n\n\n\n<p><strong>Esquema de conexiones :<\/strong><\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blogs.etsii.urjc.es\/wp-content\/uploads\/sites\/8\/2021\/12\/cooler_diagram_ai7Q6UO55S-3-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"523\" src=\"https:\/\/blogs.etsii.urjc.es\/wp-content\/uploads\/sites\/8\/2021\/12\/cooler_diagram_ai7Q6UO55S-3-1-1024x523.png\" alt=\"\" class=\"wp-image-4771\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2021\/12\/cooler_diagram_ai7Q6UO55S-3-1-1024x523.png 1024w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2021\/12\/cooler_diagram_ai7Q6UO55S-3-1-300x153.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2021\/12\/cooler_diagram_ai7Q6UO55S-3-1-768x392.png 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2021\/12\/cooler_diagram_ai7Q6UO55S-3-1-1536x784.png 1536w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2021\/12\/cooler_diagram_ai7Q6UO55S-3-1-2048x1045.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p><strong>Casos de uso :<\/strong><\/p>\n\n\n\n<p>El carrito puede ser controlado mediante el uso del bluetooth (de manera manual) o a trav\u00e9s del uso del GPS (de manera autom\u00e1tica siguiendo tus pasos ).<\/p>\n\n\n\n<p>Para ello en esta pr\u00e1ctica se utiliza la aplicaci\u00f3n : Blynk.<\/p>\n\n\n\n<p>Con la siguiente interfaz : <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/blogs.etsii.urjc.es\/wp-content\/uploads\/sites\/8\/2021\/12\/image-48.png\"><img loading=\"lazy\" decoding=\"async\" width=\"480\" height=\"965\" src=\"https:\/\/blogs.etsii.urjc.es\/wp-content\/uploads\/sites\/8\/2021\/12\/image-48.png\" alt=\"\" class=\"wp-image-4773\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2021\/12\/image-48.png 480w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2021\/12\/image-48-149x300.png 149w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><\/a><\/figure>\n\n\n\n<p><strong>Problemas y posibles soluciones :<\/strong><\/p>\n\n\n\n<p>El mayor problema encontrado es que los motores de 12V no alcanzan la fuerza suficiente como para mover la estructura del carro, por lo que se necesitar\u00edan motores con mayor n\u00famero de RPM.<\/p>\n\n\n\n<p>Otro problema es que el GPS del carro tarda mucho tiempo en hacer conexi\u00f3n con un sat\u00e9lite por lo que se hace muy tedioso probar el funcionamiento del c\u00f3digo. Posible soluci\u00f3n, utilizar un GPS con mayor precisi\u00f3n.<\/p>\n\n\n\n<p><strong>C\u00f3digo :<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/librerias\n#include &lt;Wire.h&gt;\n#include &lt;Adafruit_Sensor.h&gt;\n#include &lt;Adafruit_HMC5883_U.h&gt;\n#include &lt;Servo.h&gt;\n#include &lt;SoftwareSerial.h&gt;\n#include &lt;BlynkSimpleSerialBLE.h&gt;\n#include \".\/TinyGPS.h\"                \n\n\n\/\/Definicion\nchar auth&#091;] = \"B1rGOPW6QUwpx5Np1b-RF0oCb9_rwBuK\";\n#define BLUETOOTH_TX_PIN 10\n#define BLUETOOTH_RX_PIN 11\n#define GPS_TX_PIN 6\n#define MOTOR_A_EN_PIN 5\n#define MOTOR_B_EN_PIN 9\n#define MOTOR_A_IN_1_PIN 7\n#define MOTOR_A_IN_2_PIN 8\n#define MOTOR_B_IN_1_PIN 12\n#define MOTOR_B_IN_2_PIN 4\n#define MOTOR_B_OFFSET 20\n#define MOTOR_A_OFFSET 0\n\n\n\/\/bluetooth\nSoftwareSerial bluetoothSerial(BLUETOOTH_TX_PIN, BLUETOOTH_RX_PIN);\nSoftwareSerial nss(GPS_TX_PIN, 255);            \n\n\n\/\/Brujula\n#define DECLINATION_ANGLE -0.003f \/\/eror del campo magnetico \n#define COMPASS_OFFSET 0.0f\nAdafruit_HMC5883_Unified mag = Adafruit_HMC5883_Unified(12345);\n\n\/\/GPS\n#define GPS_UPDATE_INTERVAL 1000\n#define GPS_STREAM_TIMEOUT 18\n#define GPS_WAYPOINT_TIMEOUT 45\n\n\/\/\/\/Variables de control \nbool arriba = false ;\nbool abajo = false ;\nbool izquierda = false ; \nbool derecha = false; \nbool stp = false ; \/\/stop\nWidgetTerminal terminal(V4);\n\nbool seguir = false;\n\n\n\/\/Mas GPS\nstruct GeoLoc {\n  float lat;\n  float lon;\n};\nTinyGPS gps;\n\n\/\/************************************************************************\n\/\/ CONTROL POR BLUETOOTH\n\/\/************************************************************************\nBLYNK_WRITE(V1) {\n\n Serial.println(\"Modo bluetooth adelante \") ;\n terminal.println(\"Modo bluetooth adelante \") ;\n terminal.flush(); \n bool arriba = true;\nbool abajo = false ;\nbool izquierda = false ; \nbool derecha = false; \nbool stp = false;\nrun(arriba,abajo,izquierda,derecha,stp); \n}\nBLYNK_WRITE(V2) {\n  Serial.println(\"Modo bluetooth derecha \") ;\n   terminal.println(\"Modo bluetooth derecha \") ;\n   terminal.flush(); \n  \n  bool arriba = false ;\nbool abajo = false ;\nbool izquierda = false ; \nbool derecha = true; \nbool stp = false;\nrun(arriba,abajo,izquierda,derecha,stp); \n}\nBLYNK_WRITE(V3) {\n  Serial.println(\"Modo bluetooth izquierda \") ;\n    terminal.println(\"Modo bluetooth izquierda \") ;\n     terminal.flush(); \n     bool arriba = false ;\nbool abajo = false ;\nbool izquierda = true; \nbool derecha = false; \nbool stp = false;\nrun(arriba,abajo,izquierda,derecha,stp);  \n  \n}BLYNK_WRITE(V5) {\n  Serial.println(\"Modo bluetooth atras \") ;\n   terminal.println(\"Modo bluetooth atras \") ;\n    terminal.flush(); \n   bool arriba = false ;\nbool abajo = true ;\nbool izquierda = false; \nbool derecha = false; \nbool stp = false;\nrun(arriba,abajo,izquierda,derecha,stp);  \n}\nBLYNK_WRITE(V6) {\n\n  Serial.println(\"Modo bluetooth parar \") ;\n   terminal.println(\"Modo bluetooth parar \") ;\n    terminal.flush(); \n   bool arriba = false ;\nbool abajo = false;\nbool izquierda = false; \nbool derecha = false; \nbool stp = true;\nrun(arriba,abajo,izquierda,derecha,stp); \n}\nvoid run(bool arriba, bool abajo, bool izquierda,bool derecha, bool stp){ \n  analogWrite(MOTOR_A_EN_PIN,255);\n    analogWrite(MOTOR_B_EN_PIN,255);\n   \n    Serial.println(arriba);\n    Serial.println(abajo);\n    Serial.println(izquierda);\n    Serial.println(derecha);\n     Serial.println(stp);\n     \n  if(arriba){\n  \n\n digitalWrite(MOTOR_A_IN_1_PIN, LOW);\n  digitalWrite(MOTOR_A_IN_2_PIN, HIGH);  \n  digitalWrite(MOTOR_B_IN_1_PIN, HIGH);\n  digitalWrite(MOTOR_B_IN_2_PIN, LOW);\n  }\n  if(abajo){\n\n\n     digitalWrite(MOTOR_A_IN_1_PIN, HIGH);\n  digitalWrite(MOTOR_A_IN_2_PIN, LOW);  \n  digitalWrite(MOTOR_B_IN_1_PIN, LOW);\n  digitalWrite(MOTOR_B_IN_2_PIN,  HIGH);\n    }\n     if(derecha){\n  digitalWrite(MOTOR_A_IN_1_PIN, LOW);\n  digitalWrite(MOTOR_A_IN_2_PIN, LOW);  \n  digitalWrite(MOTOR_B_IN_1_PIN, HIGH);\n  digitalWrite(MOTOR_B_IN_2_PIN, LOW);\n    }\n     if(izquierda){\n  digitalWrite(MOTOR_A_IN_1_PIN, LOW);\n  digitalWrite(MOTOR_A_IN_2_PIN, HIGH);  \n  digitalWrite(MOTOR_B_IN_1_PIN, LOW);\n  digitalWrite(MOTOR_B_IN_2_PIN, LOW);\n    }\n     if(stp){\n  digitalWrite(MOTOR_A_IN_1_PIN, LOW);\n  digitalWrite(MOTOR_A_IN_2_PIN, LOW);  \n  digitalWrite(MOTOR_B_IN_1_PIN, LOW);\n  digitalWrite(MOTOR_B_IN_2_PIN, LOW);\n    }\n  delay(1000);\n  }\n \/\/************************************************************************\n \/\/************************************************************************\n \/\/***********************************TERMINAL ANDROID*********************\nBLYNK_WRITE(V4) {\n  terminal.println(\"Hola mundo\");\n  terminal.flush();\n  \n  }\n\/\/************************************************************************\n\/\/************************************************************************\n\/\/********CONTROL GPS*****************************************************\n GeoLoc checkGPS() {\n  Serial.println(\"Leyendo GPS carro: \");\n  terminal.println(\"Leyendo GPS carro : \\n\");\n  terminal.flush();\n  bool newdata = false;\n  unsigned long start = millis();\n  while (millis() - start &lt; GPS_UPDATE_INTERVAL) {\n    if (feedgps())\n      newdata = true;\n  }\n  if (newdata) {\n    return gpsdump(gps);\n  }\n\n  GeoLoc carroLoc;\n  carroLoc.lat = 0.0;\n carroLoc.lon = 0.0;\n  \n  return carroLoc;\n}\n\n\/\/ En caso de tener datos nuevos los procesaremos :\nGeoLoc gpsdump(TinyGPS &amp;gps) {\n  float flat, flon;\n  unsigned long age;\n  \n  gps.f_get_position(&amp;flat, &amp;flon, &amp;age);\n\n  GeoLoc carroLoc;\n  carroLoc.lat = flat;\n  carroLoc.lon = flon;\n\n  Serial.print(carroLoc.lat, 7); Serial.print(\", \"); Serial.println(carroLoc.lon, 7);\n  terminal.print(carroLoc.lat, 7); terminal.print(\", \"); terminal.println(carroLoc.lon, 7);\n  terminal.print(\"Conseguidas las coordenadas del carro \") ;\n    terminal.flush();\n  return carroLoc;\n}\n\n\/\/ proporciona datos a medida que estan listos \nbool feedgps() {\n  while (nss.available()) {\n    if (gps.encode(nss.read()))\n      return true;\n  }\n  return false;\n}\n\n\/\/Control para que nos siga el carro \nBLYNK_WRITE(V7) {\n \n  seguir = !seguir;\n\n  stop();\n   \n}\n\/\/Control para proporcionarle al carro las coordenadas gps del movil \nBLYNK_WRITE(V8) {\n  GpsParam gps(param);\n  \n  Serial.println(\"Recibidas coordenadas GPS android : \");\n  terminal.println(\"Recibidas coordenadas GPS android : \");\n   \n  \n  Serial.print(gps.getLat(), 7); Serial.print(\", \"); Serial.println(gps.getLon(), 7);\n   terminal.print(gps.getLat(), 7); terminal.print(\", \"); terminal.println(gps.getLon(), 7);\n     terminal.flush();\n\n  GeoLoc phoneLoc;\n  phoneLoc.lat = gps.getLat();\n  phoneLoc.lon = gps.getLon();\n\n  driveTo(phoneLoc, GPS_STREAM_TIMEOUT);\n}\n\n\/\/************************************************************************\n\/\/************************************************************************\n\/\/********CONTROL BRUJULA*****************************************************\nvoid displayCompassDetails(void)\n{\n  sensor_t sensor;\n  mag.getSensor(&amp;sensor);\n  Serial.println(\"------------------------------------\");\n  Serial.print  (\"Sensor:       \"); Serial.println(sensor.name);\n  Serial.print  (\"Driver Ver:   \"); Serial.println(sensor.version);\n  Serial.print  (\"Unique ID:    \"); Serial.println(sensor.sensor_id);\n  Serial.print  (\"Max Value:    \"); Serial.print(sensor.max_value); Serial.println(\" uT\");\n  Serial.print  (\"Min Value:    \"); Serial.print(sensor.min_value); Serial.println(\" uT\");\n  Serial.print  (\"Resolution:   \"); Serial.print(sensor.resolution); Serial.println(\" uT\");  \n  Serial.println(\"------------------------------------\");\n  Serial.println(\"\");\n  delay(500);\n}\n\n#ifndef DEGTORAD\n#define DEGTORAD 0.0174532925199432957f\n#define RADTODEG 57.295779513082320876f\n#endif\n\nfloat geoBearing(struct GeoLoc &amp;a, struct GeoLoc &amp;b) {\n  float y = sin(b.lon-a.lon) * cos(b.lat);\n  float x = cos(a.lat)*sin(b.lat) - sin(a.lat)*cos(b.lat)*cos(b.lon-a.lon);\n  return atan2(y, x) * RADTODEG;\n}\n\nfloat geoDistance(struct GeoLoc &amp;a, struct GeoLoc &amp;b) {\n  const float R = 6371000; \/\/ km\n  float p1 = a.lat * DEGTORAD;\n  float p2 = b.lat * DEGTORAD;\n  float dp = (b.lat-a.lat) * DEGTORAD;\n  float dl = (b.lon-a.lon) * DEGTORAD;\n\n  float x = sin(dp\/2) * sin(dp\/2) + cos(p1) * cos(p2) * sin(dl\/2) * sin(dl\/2);\n  float y = 2 * atan2(sqrt(x), sqrt(1-x));\n\n  return R * y;\n}\n\nfloat geoHeading() {\n  sensors_event_t event; \n  mag.getEvent(&amp;event);\n  float heading = atan2(event.magnetic.y, event.magnetic.x);\n  heading -= DECLINATION_ANGLE;\n  heading -= COMPASS_OFFSET;\n  if(heading &lt; 0)\n    heading += 2*PI;\n  if(heading &gt; 2*PI)\n    heading -= 2*PI;\n  float headingDegrees = heading * 180\/M_PI; \n  while (headingDegrees &lt; -180) headingDegrees += 360;\n  while (headingDegrees &gt;  180) headingDegrees -= 360;\n  return headingDegrees;\n}\n\nvoid testDriveNorth() {\n  float heading = geoHeading();\n  int testDist = 10;\n  Serial.println(heading);\n  \n  while(!(heading &lt; 5 &amp;&amp; heading &gt; -5)) {\n    drive(testDist, heading);\n    heading = geoHeading();\n    Serial.println(heading);\n    delay(500);\n  }\n  \n  stop();\n}\n\nvoid setupCompass() {\n   \n  if(!mag.begin())\n  {\n    Serial.println(\"Ooops, no HMC5883 detected ... Check your wiring!\");\n    terminal.println(\"Ooops, no HMC5883 detected ... Check your wiring!\");\n      terminal.flush();\n    while(1);\n  }\n  \n  displayCompassDetails();\n}\n\n\n\n\/\/************************************************************************\n\/\/******************************fUNCIONES DE MOVIMIENTO********************************\nvoid stop() {\n  \/\/ now turn off motors\n  digitalWrite(MOTOR_A_IN_1_PIN, LOW);\n  digitalWrite(MOTOR_A_IN_2_PIN, LOW);  \n  digitalWrite(MOTOR_B_IN_1_PIN, LOW);\n  digitalWrite(MOTOR_B_IN_2_PIN, LOW);\n  \n}\nvoid drive(int distance, float turn) {\n \n\n  int fullSpeed = 230;\n  int stopSpeed = 0;\n\n  \/\/ drive to location\n  int s = fullSpeed;\n  if ( distance &lt; 8 ) {\n    int wouldBeSpeed = s - stopSpeed;\n    wouldBeSpeed *= distance \/ 8.0f;\n    s = stopSpeed + wouldBeSpeed;\n  }\n  \n  int autoThrottle = constrain(s, stopSpeed, fullSpeed);\n  autoThrottle = 230;\n\n  float t = turn;\n  while (t &lt; -180) t += 360;\n  while (t &gt;  180) t -= 360;\n  \n  Serial.print(\"turn: \");\n  Serial.println(t);\n  Serial.print(\"original: \");\n  Serial.println(turn);\n  \n  float t_modifier = (180.0 - abs(t)) \/ 180.0;\n  float autoSteerA = 1;\n  float autoSteerB = 1;\n\n  if (t &lt; 0) {\n    autoSteerB = t_modifier;\n  } else if (t &gt; 0){\n    autoSteerA = t_modifier;\n  }\n\n  Serial.print(\"steerA: \"); Serial.println(autoSteerA);\n  Serial.print(\"steerB: \"); Serial.println(autoSteerB);\n\n  int speedA = (int) (((float) autoThrottle) * autoSteerA);\n  int speedB = (int) (((float) autoThrottle) * autoSteerB);\n  \n  setSpeedMotorA(speedA);\n  setSpeedMotorB(speedB);\n}\nvoid setSpeedMotorA(int speed) {\n  digitalWrite(MOTOR_A_IN_1_PIN, HIGH);\n  digitalWrite(MOTOR_A_IN_2_PIN, LOW);\n  analogWrite(MOTOR_A_EN_PIN, speed + MOTOR_A_OFFSET);\n}\n\nvoid setSpeedMotorB(int speed) {\n  digitalWrite(MOTOR_B_IN_1_PIN, HIGH);\n  digitalWrite(MOTOR_B_IN_2_PIN, LOW);\n  analogWrite(MOTOR_B_EN_PIN, speed + MOTOR_B_OFFSET);\n}\n\nvoid setSpeed(int speed)\n{\n  setSpeedMotorA(speed);\n  setSpeedMotorB(speed);\n}\n\n\nvoid driveTo(struct GeoLoc &amp;loc, int timeout) {\n  nss.listen();\n  GeoLoc carroLoc = checkGPS();\n  bluetoothSerial.listen();\n\n  if (carroLoc.lat != 0 &amp;&amp; carroLoc.lon != 0 &amp;&amp; seguir) {\n    float d = 0;\n    \/\/Start move loop here\n    do {\n      nss.listen();\n      carroLoc = checkGPS();\n      bluetoothSerial.listen();\n      \n      d = geoDistance(carroLoc, loc);\n      float t = geoBearing(carroLoc, loc) - geoHeading();\n      \n      Serial.print(\"Distancia : \");\n      Serial.println(geoDistance(carroLoc, loc));\n    \n      Serial.print(\"rumbo: \");\n      Serial.println(geoBearing(carroLoc, loc));\n\n      Serial.print(\"grados: \");\n      Serial.println(geoHeading());\n      \n      drive(d, t);\n      timeout -= 1;\n    } while (d &gt; 3.0 &amp;&amp; seguir &amp;&amp; timeout&gt;0);\n\n    stop();\n  }\n}\n\/\/************************************************************************\n\/\/************************************************************************\nvoid setup()\n{\n   \/\/Terminal movil\n   terminal.clear();\n   \n  \/\/ Brujula\n  setupCompass();\n  \n  \/\/Motor\n   pinMode(MOTOR_A_IN_1_PIN, OUTPUT);\n  pinMode(MOTOR_A_IN_2_PIN, OUTPUT);\n  pinMode(MOTOR_B_IN_1_PIN, OUTPUT);\n  pinMode(MOTOR_B_IN_2_PIN, OUTPUT);\n   pinMode(MOTOR_A_EN_PIN, OUTPUT);\n  pinMode(MOTOR_B_EN_PIN, OUTPUT);\n\n   \/\/GPS\n  nss.begin(9600);\n  \n Serial.begin(9600);       \n\n      \/\/Bluetooth\n  bluetoothSerial.begin(9600);\n  Blynk.begin(bluetoothSerial, auth);\n  \n \n\n}\n\n\nvoid loop()\n{\n    Blynk.run();\n}<\/code><\/pre>\n\n\n\n<p><strong>Memoria :<\/strong><\/p>\n\n\n\n<div class=\"wp-block-file\"><a href=\"https:\/\/blogs.etsii.urjc.es\/wp-content\/uploads\/sites\/8\/2021\/12\/MemoriaDSE.pdf\">MemoriaDSE<\/a><a href=\"https:\/\/blogs.etsii.urjc.es\/wp-content\/uploads\/sites\/8\/2021\/12\/MemoriaDSE.pdf\" class=\"wp-block-file__button\" download>Descarga<\/a><\/div>\n\n\n\n<p><strong>Video del proyecto<\/strong> :<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"video-container\"><iframe loading=\"lazy\" title=\"CarritoGPS\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/kBpm4ZK0DwY?feature=oembed&#038;wmode=opaque\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Proyecto realizado por el grupo 11 : Pedro Barquero Torres para la asignatura de Dise\u00f1o de Sistemas Empotrados Objetivo : El objetivo del proyecto es dise\u00f1ar un carro que por bluetooth se conecta al&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":4769,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-4767","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-proyectos"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Carrito GPS - Proyectos con Arduino.<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/carrito-gps\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Carrito GPS - Proyectos con Arduino.\" \/>\n<meta property=\"og:description\" content=\"Proyecto realizado por el grupo 11 : Pedro Barquero Torres para la asignatura de Dise\u00f1o de Sistemas Empotrados Objetivo : El objetivo del proyecto es dise\u00f1ar un carro que por bluetooth se conecta al&#046;&#046;&#046;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/carrito-gps\/\" \/>\n<meta property=\"og:site_name\" content=\"Proyectos con Arduino.\" \/>\n<meta property=\"article:published_time\" content=\"2021-12-18T22:15:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-12-22T20:48:51+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2021\/12\/image-47.png\" \/>\n\t<meta property=\"og:image:width\" content=\"583\" \/>\n\t<meta property=\"og:image:height\" content=\"737\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Administrador de la red\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Administrador de la red\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/carrito-gps\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/carrito-gps\\\/\"},\"author\":{\"name\":\"Administrador de la red\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/person\\\/bdc38fea664f13638d2a51f4d2fc7211\"},\"headline\":\"Carrito GPS\",\"datePublished\":\"2021-12-18T22:15:02+00:00\",\"dateModified\":\"2021-12-22T20:48:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/carrito-gps\\\/\"},\"wordCount\":214,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/carrito-gps\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2021\\\/12\\\/image-47.png\",\"articleSection\":[\"Proyectos\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/carrito-gps\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/carrito-gps\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/carrito-gps\\\/\",\"name\":\"Carrito GPS - Proyectos con Arduino.\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/carrito-gps\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/carrito-gps\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2021\\\/12\\\/image-47.png\",\"datePublished\":\"2021-12-18T22:15:02+00:00\",\"dateModified\":\"2021-12-22T20:48:51+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/carrito-gps\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/carrito-gps\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/carrito-gps\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2021\\\/12\\\/image-47.png\",\"contentUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2021\\\/12\\\/image-47.png\",\"width\":583,\"height\":737},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/carrito-gps\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Carrito GPS\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\",\"name\":\"Proyectos con Arduino.\",\"description\":\"Blog de proyectos de Arduino de alumnos de la URJC\",\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\",\"name\":\"Universidad Rey Juan Carlos\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/05\\\/logourjc-1.jpg\",\"contentUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/05\\\/logourjc-1.jpg\",\"width\":745,\"height\":288,\"caption\":\"Universidad Rey Juan Carlos\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/person\\\/bdc38fea664f13638d2a51f4d2fc7211\",\"name\":\"Administrador de la red\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e8e366128f81a82735b0b00fe6d280414b4bad087e380fa9fee9694454b8a6fa?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e8e366128f81a82735b0b00fe6d280414b4bad087e380fa9fee9694454b8a6fa?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e8e366128f81a82735b0b00fe6d280414b4bad087e380fa9fee9694454b8a6fa?s=96&d=mm&r=g\",\"caption\":\"Administrador de la red\"},\"sameAs\":[\"https:\\\/\\\/blogs.etsii.urjc.es\"],\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/author\\\/etsiiadmin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Carrito GPS - Proyectos con Arduino.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blogs.etsii.urjc.es\/dseytr\/carrito-gps\/","og_locale":"es_ES","og_type":"article","og_title":"Carrito GPS - Proyectos con Arduino.","og_description":"Proyecto realizado por el grupo 11 : Pedro Barquero Torres para la asignatura de Dise\u00f1o de Sistemas Empotrados Objetivo : El objetivo del proyecto es dise\u00f1ar un carro que por bluetooth se conecta al&#46;&#46;&#46;","og_url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/carrito-gps\/","og_site_name":"Proyectos con Arduino.","article_published_time":"2021-12-18T22:15:02+00:00","article_modified_time":"2021-12-22T20:48:51+00:00","og_image":[{"width":583,"height":737,"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2021\/12\/image-47.png","type":"image\/png"}],"author":"Administrador de la red","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Administrador de la red","Tiempo de lectura":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/carrito-gps\/#article","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/carrito-gps\/"},"author":{"name":"Administrador de la red","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/person\/bdc38fea664f13638d2a51f4d2fc7211"},"headline":"Carrito GPS","datePublished":"2021-12-18T22:15:02+00:00","dateModified":"2021-12-22T20:48:51+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/carrito-gps\/"},"wordCount":214,"commentCount":0,"publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/carrito-gps\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2021\/12\/image-47.png","articleSection":["Proyectos"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/carrito-gps\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/carrito-gps\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/carrito-gps\/","name":"Carrito GPS - Proyectos con Arduino.","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/carrito-gps\/#primaryimage"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/carrito-gps\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2021\/12\/image-47.png","datePublished":"2021-12-18T22:15:02+00:00","dateModified":"2021-12-22T20:48:51+00:00","breadcrumb":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/carrito-gps\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/carrito-gps\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/carrito-gps\/#primaryimage","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2021\/12\/image-47.png","contentUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2021\/12\/image-47.png","width":583,"height":737},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/carrito-gps\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/blogs.etsii.urjc.es\/dseytr\/"},{"@type":"ListItem","position":2,"name":"Carrito GPS"}]},{"@type":"WebSite","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/","name":"Proyectos con Arduino.","description":"Blog de proyectos de Arduino de alumnos de la URJC","publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization","name":"Universidad Rey Juan Carlos","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/logo\/image\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/logourjc-1.jpg","contentUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/logourjc-1.jpg","width":745,"height":288,"caption":"Universidad Rey Juan Carlos"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/person\/bdc38fea664f13638d2a51f4d2fc7211","name":"Administrador de la red","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/e8e366128f81a82735b0b00fe6d280414b4bad087e380fa9fee9694454b8a6fa?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/e8e366128f81a82735b0b00fe6d280414b4bad087e380fa9fee9694454b8a6fa?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e8e366128f81a82735b0b00fe6d280414b4bad087e380fa9fee9694454b8a6fa?s=96&d=mm&r=g","caption":"Administrador de la red"},"sameAs":["https:\/\/blogs.etsii.urjc.es"],"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/author\/etsiiadmin\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/4767","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/comments?post=4767"}],"version-history":[{"count":11,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/4767\/revisions"}],"predecessor-version":[{"id":4861,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/4767\/revisions\/4861"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media\/4769"}],"wp:attachment":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media?parent=4767"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/categories?post=4767"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/tags?post=4767"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}