{"id":8666,"date":"2024-05-08T14:09:36","date_gmt":"2024-05-08T12:09:36","guid":{"rendered":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?p=8666"},"modified":"2024-05-08T14:09:38","modified_gmt":"2024-05-08T12:09:38","slug":"robot-disuasorio","status":"publish","type":"post","link":"https:\/\/blogs.etsii.urjc.es\/dseytr\/robot-disuasorio\/","title":{"rendered":"Robot disuasorio"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"1024\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/IMG_5938-768x1024.jpeg\" alt=\"\" class=\"wp-image-8667\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/IMG_5938-768x1024.jpeg 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/IMG_5938-225x300.jpeg 225w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/IMG_5938-1152x1536.jpeg 1152w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/IMG_5938.jpeg 1536w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/figure>\n\n\n\n<p class=\"has-large-font-size\"><strong>Grupo 17<\/strong><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Hecho por:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>EOUZAN Erwan<\/li>\n\n\n\n<li>LE RAY Thomas<\/li>\n\n\n\n<li>LEBRET Flavien<\/li>\n<\/ul>\n\n\n\n<p class=\"has-large-font-size\"><strong>Introducci\u00f3n<\/strong><\/p>\n\n\n\n<p>Por el marco del m\u00f3dulo \u00abSistemas Empotrados y de Tiempo Real\u00bb, tuvimos la tarea de realizar un proyecto Arduino. Despu\u00e9s de discutir entre los miembros del grupo, los tres ten\u00edamos el deseo de llevar a cabo un proyecto Arduino que nos apasionara. Una noche, mientras convers\u00e1bamos, Thomas nos cont\u00f3 la historia de un robo cerca de su casa, lo que dio origen a nuestra idea de proyecto: un robot que se mueve, se controla a distancia y asusta! Aqu\u00ed les presentaremos el proyecto en todos sus aspectos.<\/p>\n\n\n\n<p class=\"has-large-font-size\"><strong>Materiales usado<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"680\" height=\"517\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/image-22.png\" alt=\"\" class=\"wp-image-8792\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/image-22.png 680w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/image-22-300x228.png 300w\" sizes=\"auto, (max-width: 680px) 100vw, 680px\" \/><\/figure>\n\n\n\n<p class=\"has-large-font-size\"><strong>Pasos dados<\/strong><\/p>\n\n\n\n<p>El primer paso en la realizaci\u00f3n de nuestro proyecto fue definirlo adecuadamente, tener una idea del material necesario, de los subsistemas a implementar (costos y riesgos para cada uno), as\u00ed como definir los objetivos del proyecto. Aqu\u00ed est\u00e1n los objetivos del proyecto que nos propusimos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El robot debe poder controlarse (4 direcciones) a trav\u00e9s de una p\u00e1gina web (WIFI)<\/li>\n\n\n\n<li>El usuario debe poder realizar a distancia acciones como encender la luz o hacer ruido.<\/li>\n\n\n\n<li>El robot debe poder utilizarse de d\u00eda y de noche.\u00a0<\/li>\n\n\n\n<li>El usuario debe poder controlar la torreta<\/li>\n<\/ul>\n\n\n\n<p>Entonces pudimos crear un primer diagrama de sistema, con los componentes y las conexiones. A continuaci\u00f3n, puedes ver el primer diagrama de sistema que elaboramos:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"693\" height=\"404\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/image-23.png\" alt=\"\" class=\"wp-image-8793\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/image-23.png 693w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/image-23-300x175.png 300w\" sizes=\"auto, (max-width: 693px) 100vw, 693px\" \/><figcaption class=\"wp-element-caption\"><em>Figura: Primer diagrama de conexi\u00f3n del sistema<\/em><\/figcaption><\/figure>\n\n\n\n<p>Luego, probamos todos nuestros subsistemas individualmente para asegurarnos de su correcto funcionamiento. Una vez que estuvimos seguros de que cada subsistema funcionaba correctamente, pudimos ensamblarlos para formar el robot. Este ensamblaje nos permiti\u00f3 optimizar el diagrama de conexi\u00f3n y entender bien c\u00f3mo colocar los diferentes componentes. En este punto, el robot funcionaba y estaba ensamblado. Por lo tanto, pudimos validar con respecto a los objetivos que nos hab\u00edamos fijado y finalizar el conjunto asegurando firmemente.<\/p>\n\n\n\n<p class=\"has-large-font-size\"><strong>Diagrama de conexi\u00f3n<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"477\" height=\"511\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/image-24.png\" alt=\"\" class=\"wp-image-8794\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/image-24.png 477w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/image-24-280x300.png 280w\" sizes=\"auto, (max-width: 477px) 100vw, 477px\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-left has-large-font-size\"><strong>Software \/ Code<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include \"esp_camera.h\"\n#include &lt;WiFi.h&gt;\n#include \"esp_timer.h\"\n#include \"img_converters.h\"\n#include \"Arduino.h\"\n#include \"fb_gfx.h\"\n#include \"soc\/soc.h\"             \n#include \"soc\/rtc_cntl_reg.h\"    \n#include \"esp_http_server.h\"\n#include &lt;ESP32Servo.h&gt;\n\n\nconst char* ssid = \"ErwanPOA\";\nconst char* password = \"******\";\n\n#define PART_BOUNDARY \"123456789000000000000987654321\"\n\n#define CAMERA_MODEL_AI_THINKER\n\n\n#if defined(CAMERA_MODEL_AI_THINKER)\n  #define PWDN_GPIO_NUM     32\n  #define RESET_GPIO_NUM    -1\n  #define XCLK_GPIO_NUM      0\n  #define SIOD_GPIO_NUM     26\n  #define SIOC_GPIO_NUM     27\n  \n  #define Y9_GPIO_NUM       35\n  #define Y8_GPIO_NUM       34\n  #define Y7_GPIO_NUM       39\n  #define Y6_GPIO_NUM       36\n  #define Y5_GPIO_NUM       21\n  #define Y4_GPIO_NUM       19\n  #define Y3_GPIO_NUM       18\n  #define Y2_GPIO_NUM        5\n  #define VSYNC_GPIO_NUM    25\n  #define HREF_GPIO_NUM     23\n  #define PCLK_GPIO_NUM     22\n\n#else\n  #error \"Camera model not selected\"\n#endif\n\n#define MOTOR_1_PIN_1    14\n#define MOTOR_1_PIN_2    15\n#define MOTOR_2_PIN_1    13\n#define MOTOR_2_PIN_2    12\n#define LIGHT_PIN        4\n#define SERVO_PIN        2\nServo servo;\n\n\n\n\n\nstatic const char* _STREAM_CONTENT_TYPE = \"multipart\/x-mixed-replace;boundary=\" PART_BOUNDARY;\nstatic const char* _STREAM_BOUNDARY = \"\\r\\n--\" PART_BOUNDARY \"\\r\\n\";\nstatic const char* _STREAM_PART = \"Content-Type: image\/jpeg\\r\\nContent-Length: %u\\r\\n\\r\\n\";\nint lig=0;\n\n\nhttpd_handle_t camera_httpd = NULL;\nhttpd_handle_t stream_httpd = NULL;\n\nstatic const char PROGMEM INDEX_HTML&#091;] = R\"rawliteral(\n&lt;html&gt;\n&lt;head&gt;\n  &lt;title&gt;ESP32-CAM Robot&lt;\/title&gt;\n  &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"&gt;\n  &lt;style&gt;\n    body {\n      font-family: Arial;\n      text-align: center;\n      margin: 0px auto;\n      padding-top: 30px;\n      background-color: #f0f0f0; \/* Couleur de fond *\/\n    }\n    h1 {\n      color: white; \/* Texte blanc *\/\n      background-color: #333; \/* Fond gris fonc\u00e9 *\/\n      padding: 20px; \/* Ajoute de l'espace autour du titre *\/\n    }\n    table {\n      margin-left: auto;\n      margin-right: auto;\n      margin-top: 20px; \/* Espace entre le titre et le tableau *\/\n    }\n    td {\n      padding: 8px;\n    }\n    .button {\n      background-color: #333;\n      border: none;\n      color: white;\n      padding: 10px 20px;\n      text-align: center;\n      text-decoration: none;\n      display: inline-block;\n      font-size: 18px;\n      margin: 6px 3px;\n      cursor: pointer;\n      -webkit-touch-callout: none;\n      -webkit-user-select: none;\n      -khtml-user-select: none;\n      -moz-user-select: none;\n      -ms-user-select: none;\n      user-select: none;\n      -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n    }\n    img {\n      width: auto;\n      max-width: 100%;\n      height: auto;\n      margin-top: 20px; \/* Espace entre le tableau et l'image *\/\n    }\n    .title {\n      background-color: #333;\n      color: white;\n      padding: 10px;\n      font-size: 24px;\n      margin-bottom: 10px; \/* Espace entre les titres et le contenu *\/\n      margin-top: 20px; \/* Ajoutez cette ligne pour l'espace entre le titre et l'image *\/\n    }\n    .slider-container {\n      margin-top: 20px;\n    }\n    .slider {\n      -webkit-appearance: none;\n      width: 80%;\n      height: 10px;\n      border-radius: 5px;\n      background: #333;\n      outline: none;\n      opacity: 0.7;\n      -webkit-transition: .2s;\n      transition: opacity .2s;\n      margin: auto;\n    }\n    .slider:hover {\n      opacity: 1;\n    }\n    .slider::-webkit-slider-thumb {\n      -webkit-appearance: none;\n      appearance: none;\n      width: 20px;\n      height: 20px;\n      border-radius: 50%;\n      background: #ffffff;\n      cursor: pointer;\n    }\n    .slider::-moz-range-thumb {\n      width: 20px;\n      height: 20px;\n      border-radius: 50%;\n      background: #ffffff;\n      cursor: pointer;\n    }\n    .slider-value-bg {\n    background-color: #333; \/* Couleur de fond *\/\n    color: white; \/* Couleur du texte *\/\n    padding: 4px 8px; \/* Ajoute de l'espace autour du texte *\/\n    border-radius: 4px; \/* Coins arrondis *\/\n  }\n\n  &lt;\/style&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n  &lt;h1&gt;ESP32-CAM Robot&lt;\/h1&gt;\n\n  &lt;img src=\"\" id=\"photo\"&gt;\n\n  &lt;div class=\"title\"&gt;Camera moove&lt;\/div&gt;\n  &lt;div class=\"slider-container\"&gt;\n  &lt;input type=\"range\" min=\"60\" max=\"160\" value=\"140\" class=\"slider\" id=\"camera-slider\"&gt;\n  &lt;span id=\"slider-value\" class=\"slider-value-bg\"&gt;95&lt;\/span&gt;\n  &lt;\/div&gt;\n\n  &lt;div class=\"title\"&gt;Moove Robot&lt;\/div&gt;\n\n  &lt;table&gt;\n    &lt;tr&gt;\n      &lt;td colspan=\"3\" align=\"center\"&gt;\n        &lt;button class=\"button\" onmousedown=\"toggleCheckbox('forward');\" ontouchstart=\"toggleCheckbox('forward');\" onmouseup=\"toggleCheckbox('stop');\" ontouchend=\"toggleCheckbox('stop');\"&gt;Forward&lt;\/button&gt;\n      &lt;\/td&gt;\n    &lt;\/tr&gt;\n    &lt;tr&gt;\n      &lt;td align=\"center\"&gt;\n        &lt;button class=\"button\" onmousedown=\"toggleCheckbox('left');\" ontouchstart=\"toggleCheckbox('left');\" onmouseup=\"toggleCheckbox('stop');\" ontouchend=\"toggleCheckbox('stop');\"&gt;Left&lt;\/button&gt;\n      &lt;\/td&gt;\n      &lt;td align=\"center\"&gt;\n        &lt;button class=\"button\" onmousedown=\"toggleCheckbox('right');\" ontouchstart=\"toggleCheckbox('right');\" onmouseup=\"toggleCheckbox('stop');\" ontouchend=\"toggleCheckbox('stop');\"&gt;Right&lt;\/button&gt;\n      &lt;\/td&gt;\n    &lt;\/tr&gt;\n    &lt;tr&gt;\n      &lt;td colspan=\"3\" align=\"center\"&gt;\n        &lt;button class=\"button\" onmousedown=\"toggleCheckbox('backward');\" ontouchstart=\"toggleCheckbox('backward');\" onmouseup=\"toggleCheckbox('stop');\" ontouchend=\"toggleCheckbox('stop');\"&gt;Backward&lt;\/button&gt;\n      &lt;\/td&gt;\n    &lt;\/tr&gt;\n  &lt;\/table&gt;\n\n  &lt;!-- Titre \"asustar\" --&gt;\n  &lt;div class=\"title\"&gt;Asustar&lt;\/div&gt;\n\n  &lt;table&gt;\n    &lt;tr&gt;\n      &lt;td colspan=\"3\" align=\"center\"&gt;\n        &lt;button class=\"button\" onmousedown=\"toggleCheckbox('light');\" ontouchstart=\"toggleCheckbox('light');\"&gt;Light and buzzer&lt;\/button&gt;\n      &lt;\/td&gt;\n    &lt;\/tr&gt;\n  &lt;\/table&gt;\n\n  &lt;script&gt;\n    function toggleCheckbox(x) {\n      var xhr = new XMLHttpRequest();\n      xhr.open(\"GET\", \"\/action?go=\" + x, true);\n      xhr.send();\n    }\n\n    window.onload = function() {\n      document.getElementById(\"photo\").src = window.location.href.slice(0, -1) + \":81\/stream\";\n    };\n\n    function updateSliderValue() {\n      var slider = document.getElementById(\"camera-slider\");\n      var valueSpan = document.getElementById(\"slider-value\");\n      valueSpan.innerHTML = slider.value;\n      toggleCheckbox(slider.value);\n    }\n\n    document.getElementById(\"camera-slider\").addEventListener(\"input\", updateSliderValue);\n\n    updateSliderValue();\n    \n  &lt;\/script&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;\n)rawliteral\";\n\n\nstatic esp_err_t index_handler(httpd_req_t *req){\n  httpd_resp_set_type(req, \"text\/html\");\n  return httpd_resp_send(req, (const char *)INDEX_HTML, strlen(INDEX_HTML));\n}\n\nstatic esp_err_t stream_handler(httpd_req_t *req){\n  camera_fb_t * fb = NULL;\n  esp_err_t res = ESP_OK;\n  size_t _jpg_buf_len = 0;\n  uint8_t * _jpg_buf = NULL;\n  char * part_buf&#091;64];\n\n  res = httpd_resp_set_type(req, _STREAM_CONTENT_TYPE);\n  if(res != ESP_OK){\n    return res;\n  }\n\n  while(true){\n    fb = esp_camera_fb_get();\n    if (!fb) {\n      Serial.println(\"Camera capture failed\");\n      res = ESP_FAIL;\n    } else {\n      if(fb-&gt;width &gt; 400){\n        if(fb-&gt;format != PIXFORMAT_JPEG){\n          bool jpeg_converted = frame2jpg(fb, 80, &amp;_jpg_buf, &amp;_jpg_buf_len);\n          esp_camera_fb_return(fb);\n          fb = NULL;\n          if(!jpeg_converted){\n            Serial.println(\"JPEG compression failed\");\n            res = ESP_FAIL;\n          }\n        } else {\n          _jpg_buf_len = fb-&gt;len;\n          _jpg_buf = fb-&gt;buf;\n        }\n      }\n    }\n    if(res == ESP_OK){\n      size_t hlen = snprintf((char *)part_buf, 64, _STREAM_PART, _jpg_buf_len);\n      res = httpd_resp_send_chunk(req, (const char *)part_buf, hlen);\n    }\n    if(res == ESP_OK){\n      res = httpd_resp_send_chunk(req, (const char *)_jpg_buf, _jpg_buf_len);\n    }\n    if(res == ESP_OK){\n      res = httpd_resp_send_chunk(req, _STREAM_BOUNDARY, strlen(_STREAM_BOUNDARY));\n    }\n    if(fb){\n      esp_camera_fb_return(fb);\n      fb = NULL;\n      _jpg_buf = NULL;\n    } else if(_jpg_buf){\n      free(_jpg_buf);\n      _jpg_buf = NULL;\n    }\n    if(res != ESP_OK){\n      break;\n    }\n  }\n  return res;\n}\n\nstatic esp_err_t cmd_handler(httpd_req_t *req){\n  char*  buf;\n  size_t buf_len;\n  char variable&#091;32] = {0,};\n  \n  buf_len = httpd_req_get_url_query_len(req) + 1;\n  if (buf_len &gt; 1) {\n    buf = (char*)malloc(buf_len);\n    if(!buf){\n      httpd_resp_send_500(req);\n      return ESP_FAIL;\n    }\n    if (httpd_req_get_url_query_str(req, buf, buf_len) == ESP_OK) {\n      if (httpd_query_key_value(buf, \"go\", variable, sizeof(variable)) == ESP_OK) {\n      } else {\n        free(buf);\n        httpd_resp_send_404(req);\n        return ESP_FAIL;\n      }\n    } else {\n      free(buf);\n      httpd_resp_send_404(req);\n      return ESP_FAIL;\n    }\n    free(buf);\n  } else {\n    httpd_resp_send_404(req);\n    return ESP_FAIL;\n  }\n\n  sensor_t * s = esp_camera_sensor_get();\n  int res = 0;\n  \n  if(!strcmp(variable, \"forward\")) {\n    Serial.println(\"Forward\");\n    digitalWrite(MOTOR_1_PIN_1, 0);\n    digitalWrite(MOTOR_1_PIN_2, 1);\n    digitalWrite(MOTOR_2_PIN_1, 0);\n    digitalWrite(MOTOR_2_PIN_2, 1);\n  }\n  else if(!strcmp(variable, \"left\")) {\n    Serial.println(\"Left\");\n    digitalWrite(MOTOR_1_PIN_1, 0);\n    digitalWrite(MOTOR_1_PIN_2, 1);\n    digitalWrite(MOTOR_2_PIN_1, 1);\n    digitalWrite(MOTOR_2_PIN_2, 0);\n  }\n  else if(!strcmp(variable, \"right\")) {\n    Serial.println(\"Right\");\n    digitalWrite(MOTOR_1_PIN_1, 1);\n    digitalWrite(MOTOR_1_PIN_2, 0);\n    digitalWrite(MOTOR_2_PIN_1, 0);\n    digitalWrite(MOTOR_2_PIN_2, 1);\n  }\n  else if(!strcmp(variable, \"backward\")) {\n    Serial.println(\"Backward\");\n    digitalWrite(MOTOR_1_PIN_1, 1);\n    digitalWrite(MOTOR_1_PIN_2, 0);\n    digitalWrite(MOTOR_2_PIN_1, 1);\n    digitalWrite(MOTOR_2_PIN_2, 0);\n  }\n  else if(!strcmp(variable, \"stop\")) {\n    Serial.println(\"Stop\");\n    digitalWrite(MOTOR_1_PIN_1, 0);\n    digitalWrite(MOTOR_1_PIN_2, 0);\n    digitalWrite(MOTOR_2_PIN_1, 0);\n    digitalWrite(MOTOR_2_PIN_2, 0);\n  }\n  else if(!strcmp(variable, \"light\")) {\n    delay(100);\n    Serial.println(lig);\n    if (lig==0){\n      lig = 1;\n      Serial.println(\"Light On\");\n      digitalWrite(LIGHT_PIN, HIGH);\n      delay(50);\n      digitalWrite(LIGHT_PIN, LOW);\n      delay(50);\n      digitalWrite(LIGHT_PIN, HIGH);\n      delay(50);\n      digitalWrite(LIGHT_PIN, LOW);\n      delay(50);\n      digitalWrite(LIGHT_PIN, HIGH);\n      delay(50);\n      digitalWrite(LIGHT_PIN, HIGH);\n    }\n    else{\n      lig=0;\n      Serial.println(\"Light Off\");\n      digitalWrite(LIGHT_PIN, LOW);\n    } \n  }\n\n\n\n  else {\n    Serial.println(variable);\n    int var = atoi(variable);\n    servo.write(var);\n  }\n\n  if(res){\n    return httpd_resp_send_500(req);\n  }\n\n  httpd_resp_set_hdr(req, \"Access-Control-Allow-Origin\", \"*\");\n  return httpd_resp_send(req, NULL, 0);\n}\n\nvoid startCameraServer(){\n  httpd_config_t config = HTTPD_DEFAULT_CONFIG();\n  config.server_port = 80;\n  httpd_uri_t index_uri = {\n    .uri       = \"\/\",\n    .method    = HTTP_GET,\n    .handler   = index_handler,\n    .user_ctx  = NULL\n  };\n\n  httpd_uri_t cmd_uri = {\n    .uri       = \"\/action\",\n    .method    = HTTP_GET,\n    .handler   = cmd_handler,\n    .user_ctx  = NULL\n  };\n  httpd_uri_t stream_uri = {\n    .uri       = \"\/stream\",\n    .method    = HTTP_GET,\n    .handler   = stream_handler,\n    .user_ctx  = NULL\n  };\n  if (httpd_start(&amp;camera_httpd, &amp;config) == ESP_OK) {\n    httpd_register_uri_handler(camera_httpd, &amp;index_uri);\n    httpd_register_uri_handler(camera_httpd, &amp;cmd_uri); \n  }\n  config.server_port += 1;\n  config.ctrl_port += 1;\n  if (httpd_start(&amp;stream_httpd, &amp;config) == ESP_OK) {\n    httpd_register_uri_handler(stream_httpd, &amp;stream_uri);\n  }\n}\n\nvoid setup() {\n  WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); \n  \n  pinMode(MOTOR_1_PIN_1, OUTPUT);\n  pinMode(MOTOR_1_PIN_2, OUTPUT);\n  pinMode(MOTOR_2_PIN_1, OUTPUT);\n  pinMode(MOTOR_2_PIN_2, OUTPUT);\n  pinMode(LIGHT_PIN, OUTPUT); \n  servo.attach(SERVO_PIN);\n\n  \n  Serial.begin(115200);\n  Serial.setDebugOutput(false);\n  \n  camera_config_t config;\n  config.ledc_channel = LEDC_CHANNEL_0;\n  config.ledc_timer = LEDC_TIMER_0;\n  config.pin_d0 = Y2_GPIO_NUM;\n  config.pin_d1 = Y3_GPIO_NUM;\n  config.pin_d2 = Y4_GPIO_NUM;\n  config.pin_d3 = Y5_GPIO_NUM;\n  config.pin_d4 = Y6_GPIO_NUM;\n  config.pin_d5 = Y7_GPIO_NUM;\n  config.pin_d6 = Y8_GPIO_NUM;\n  config.pin_d7 = Y9_GPIO_NUM;\n  config.pin_xclk = XCLK_GPIO_NUM;\n  config.pin_pclk = PCLK_GPIO_NUM;\n  config.pin_vsync = VSYNC_GPIO_NUM;\n  config.pin_href = HREF_GPIO_NUM;\n  config.pin_sscb_sda = SIOD_GPIO_NUM;\n  config.pin_sscb_scl = SIOC_GPIO_NUM;\n  config.pin_pwdn = PWDN_GPIO_NUM;\n  config.pin_reset = RESET_GPIO_NUM;\n  config.xclk_freq_hz = 20000000;\n  config.pixel_format = PIXFORMAT_JPEG; \n  \n  if(psramFound()){\n    config.frame_size = FRAMESIZE_VGA;\n    config.jpeg_quality = 10;\n    config.fb_count = 2;\n  } else {\n    config.frame_size = FRAMESIZE_SVGA;\n    config.jpeg_quality = 12;\n    config.fb_count = 1;\n  }\n  \n  \/\/ Camera init\n  esp_err_t err = esp_camera_init(&amp;config);\n  if (err != ESP_OK) {\n    Serial.printf(\"Camera init failed with error 0x%x\", err);\n    return;\n  }\n  \/\/ Wi-Fi connection\n  WiFi.begin(ssid, password);\n  while (WiFi.status() != WL_CONNECTED) {\n    delay(500);\n    Serial.print(\".\");\n  }\n  Serial.println(\"\");\n  Serial.println(\"WiFi connected\");\n  \n  Serial.print(\"Camera Stream Ready! Go to: http:\/\/\");\n  Serial.println(WiFi.localIP());\n  \n  \/\/ Start streaming web server\n  startCameraServer();\n}\n\nvoid loop() {\n  \n}<\/code><\/pre>\n\n\n\n<p class=\"has-large-font-size\"><strong>Problemas Encontrados<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Componentes que no funcionan (cables, zumbador)<\/li>\n\n\n\n<li>Componentes rotos (ESP32 c\u00e1mara, servomotor)<\/li>\n\n\n\n<li>Montaje dif\u00edcil de realizar para que el peso est\u00e9 equilibrado y todo permanezca firmemente fijado<\/li>\n\n\n\n<li>Problema de potencia en los motores para hacer avanzar correctamente el robot<\/li>\n\n\n\n<li>Espera de la llegada de los componentes (compras por internet)<\/li>\n\n\n\n<li>Desarrollo de la interfaz web (esto tom\u00f3 mucho tiempo)<\/li>\n<\/ul>\n\n\n\n<p class=\"has-large-font-size\"><strong>Posibles Mejoras<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Agregar nuevos componentes para tener otras formas de asustar<\/li>\n\n\n\n<li>Creaci\u00f3n de un modelo 3D para est\u00e9tica y asustar<\/li>\n\n\n\n<li>Agregar reconocimiento facial para distinguir a un ladr\u00f3n de un residente de la casa<\/li>\n\n\n\n<li>Robot con visi\u00f3n nocturna<\/li>\n\n\n\n<li>Modo aut\u00f3nomo \u2192 No se necesita a nadie para controlar el robot, que puede moverse solo en la casa seg\u00fan un patr\u00f3n deseado<\/li>\n\n\n\n<li>Robot conectado a sensores de movimiento para moverse donde haya habido movimiento<\/li>\n<\/ul>\n\n\n\n<p class=\"has-large-font-size\"><strong>Funcionamiento del robot<\/strong><\/p>\n\n\n\n<p>Aqu\u00ed explicaremos c\u00f3mo funciona nuestro robot. En primer lugar, es necesario adaptar el c\u00f3digo al entorno de la casa para permitir que el robot acceda al WIFI (SSID + contrase\u00f1a) y as\u00ed permitir el control remoto. Una vez hecho esto, podemos conectarnos a nuestra interfaz web para poder controlar el robot.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"578\" height=\"429\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/image-25.png\" alt=\"\" class=\"wp-image-8795\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/image-25.png 578w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/image-25-300x223.png 300w\" sizes=\"auto, (max-width: 578px) 100vw, 578px\" \/><\/figure>\n\n\n\n<p>En la interfaz web, recuperamos en tiempo real a trav\u00e9s del wifi el v\u00eddeo capturado por la c\u00e1mara ESP32. Es posible modificar la vista de la c\u00e1mara moviendo la barra lateral. Mover la barra lateral cambiar\u00e1 el \u00e1ngulo del servomotor en el que est\u00e1 fijada la c\u00e1mara.<\/p>\n\n\n\n<p>Luego, tenemos la opci\u00f3n de mover el robot en 4 direcciones (adelante, atr\u00e1s, derecha, izquierda). Para ello, simplemente mantenemos presionada la direcci\u00f3n deseada y soltamos cuando queremos dejar de moverlo.<\/p>\n\n\n\n<p>Finalmente, el bot\u00f3n inferior enciende los comportamientos que asustan: despu\u00e9s de presionar, suena un sonido fuerte y se enciende una luz brillante. Hay que volver a presionar para detener esto. Puedes ver el video a continuaci\u00f3n para visualizar todo esto.<\/p>\n\n\n\n<p class=\"has-large-font-size\"><strong>V\u00eddeo explicativo<\/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=\"Proyecto Robot disuasorio\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/GdRnnIqJXqM?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>Grupo 17 Hecho por: Introducci\u00f3n Por el marco del m\u00f3dulo \u00abSistemas Empotrados y de Tiempo Real\u00bb, tuvimos la tarea de realizar un proyecto Arduino. Despu\u00e9s de discutir entre los miembros del grupo, los tres&#46;&#46;&#46;<\/p>\n","protected":false},"author":214,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-8666","post","type-post","status-publish","format-standard","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>Robot disuasorio - 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\/robot-disuasorio\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Robot disuasorio - Proyectos con Arduino.\" \/>\n<meta property=\"og:description\" content=\"Grupo 17 Hecho por: Introducci\u00f3n Por el marco del m\u00f3dulo \u00abSistemas Empotrados y de Tiempo Real\u00bb, tuvimos la tarea de realizar un proyecto Arduino. Despu\u00e9s de discutir entre los miembros del grupo, los tres&#046;&#046;&#046;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/robot-disuasorio\/\" \/>\n<meta property=\"og:site_name\" content=\"Proyectos con Arduino.\" \/>\n<meta property=\"article:published_time\" content=\"2024-05-08T12:09:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-05-08T12:09:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/IMG_5938-768x1024.jpeg\" \/>\n<meta name=\"author\" content=\"dsemo2324g17\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"dsemo2324g17\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 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\\\/robot-disuasorio\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/robot-disuasorio\\\/\"},\"author\":{\"name\":\"dsemo2324g17\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/person\\\/4c8f1224e60fc8a085474f8a314dc2b9\"},\"headline\":\"Robot disuasorio\",\"datePublished\":\"2024-05-08T12:09:36+00:00\",\"dateModified\":\"2024-05-08T12:09:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/robot-disuasorio\\\/\"},\"wordCount\":652,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/robot-disuasorio\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2024\\\/05\\\/IMG_5938-768x1024.jpeg\",\"articleSection\":[\"Proyectos\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/robot-disuasorio\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/robot-disuasorio\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/robot-disuasorio\\\/\",\"name\":\"Robot disuasorio - Proyectos con Arduino.\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/robot-disuasorio\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/robot-disuasorio\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2024\\\/05\\\/IMG_5938-768x1024.jpeg\",\"datePublished\":\"2024-05-08T12:09:36+00:00\",\"dateModified\":\"2024-05-08T12:09:38+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/robot-disuasorio\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/robot-disuasorio\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/robot-disuasorio\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2024\\\/05\\\/IMG_5938.jpeg\",\"contentUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2024\\\/05\\\/IMG_5938.jpeg\",\"width\":1536,\"height\":2048},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/robot-disuasorio\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Robot disuasorio\"}]},{\"@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\\\/4c8f1224e60fc8a085474f8a314dc2b9\",\"name\":\"dsemo2324g17\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b21429d6b2f4935ad7468ebc40dd3aedd1d4415992cad337f046555457dd8850?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b21429d6b2f4935ad7468ebc40dd3aedd1d4415992cad337f046555457dd8850?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b21429d6b2f4935ad7468ebc40dd3aedd1d4415992cad337f046555457dd8850?s=96&d=mm&r=g\",\"caption\":\"dsemo2324g17\"},\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/author\\\/dsemo2324g17\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Robot disuasorio - 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\/robot-disuasorio\/","og_locale":"es_ES","og_type":"article","og_title":"Robot disuasorio - Proyectos con Arduino.","og_description":"Grupo 17 Hecho por: Introducci\u00f3n Por el marco del m\u00f3dulo \u00abSistemas Empotrados y de Tiempo Real\u00bb, tuvimos la tarea de realizar un proyecto Arduino. Despu\u00e9s de discutir entre los miembros del grupo, los tres&#46;&#46;&#46;","og_url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/robot-disuasorio\/","og_site_name":"Proyectos con Arduino.","article_published_time":"2024-05-08T12:09:36+00:00","article_modified_time":"2024-05-08T12:09:38+00:00","og_image":[{"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/IMG_5938-768x1024.jpeg","type":"","width":"","height":""}],"author":"dsemo2324g17","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"dsemo2324g17","Tiempo de lectura":"12 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/robot-disuasorio\/#article","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/robot-disuasorio\/"},"author":{"name":"dsemo2324g17","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/person\/4c8f1224e60fc8a085474f8a314dc2b9"},"headline":"Robot disuasorio","datePublished":"2024-05-08T12:09:36+00:00","dateModified":"2024-05-08T12:09:38+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/robot-disuasorio\/"},"wordCount":652,"commentCount":0,"publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/robot-disuasorio\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/IMG_5938-768x1024.jpeg","articleSection":["Proyectos"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/robot-disuasorio\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/robot-disuasorio\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/robot-disuasorio\/","name":"Robot disuasorio - Proyectos con Arduino.","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/robot-disuasorio\/#primaryimage"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/robot-disuasorio\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/IMG_5938-768x1024.jpeg","datePublished":"2024-05-08T12:09:36+00:00","dateModified":"2024-05-08T12:09:38+00:00","breadcrumb":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/robot-disuasorio\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/robot-disuasorio\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/robot-disuasorio\/#primaryimage","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/IMG_5938.jpeg","contentUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/IMG_5938.jpeg","width":1536,"height":2048},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/robot-disuasorio\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/blogs.etsii.urjc.es\/dseytr\/"},{"@type":"ListItem","position":2,"name":"Robot disuasorio"}]},{"@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\/4c8f1224e60fc8a085474f8a314dc2b9","name":"dsemo2324g17","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/b21429d6b2f4935ad7468ebc40dd3aedd1d4415992cad337f046555457dd8850?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/b21429d6b2f4935ad7468ebc40dd3aedd1d4415992cad337f046555457dd8850?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b21429d6b2f4935ad7468ebc40dd3aedd1d4415992cad337f046555457dd8850?s=96&d=mm&r=g","caption":"dsemo2324g17"},"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/author\/dsemo2324g17\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/8666","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\/214"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/comments?post=8666"}],"version-history":[{"count":2,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/8666\/revisions"}],"predecessor-version":[{"id":8796,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/8666\/revisions\/8796"}],"wp:attachment":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media?parent=8666"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/categories?post=8666"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/tags?post=8666"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}