{"id":1072,"date":"2024-07-31T00:11:56","date_gmt":"2024-07-30T22:11:56","guid":{"rendered":"https:\/\/www.pinguytaz.net\/?p=1072"},"modified":"2024-08-01T10:50:06","modified_gmt":"2024-08-01T08:50:06","slug":"rust-embebido-arduino-hc-sr04contador-de-tiempo-parte-7","status":"publish","type":"post","link":"https:\/\/www.pinguytaz.net\/index.php\/2024\/07\/31\/rust-embebido-arduino-hc-sr04contador-de-tiempo-parte-7\/","title":{"rendered":"Rust-Embebido \u00abArduino\u00bb HC-SR04(Contador de tiempo) parte 7"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Finalizamos esta serie con un ejemplo muy interesante para calcular tiempos que en este caso utilizaremos para medir el tiempo que tarda en llegarnos  un <strong>ECO<\/strong> de un sonar, en este caso el HC-SR04, como se ve en el ejemplo <a href=\"https:\/\/github.com\/pinguytaz\/Arduino-ESP32\/blob\/master\/CuadernoTecnico\/RustArduino\/src\/bin\/sonar.rs\" data-type=\"link\" data-id=\"https:\/\/github.com\/pinguytaz\/Arduino-ESP32\/blob\/master\/CuadernoTecnico\/RustArduino\/src\/bin\/sonar.rs\" target=\"_blank\" rel=\"noreferrer noopener\">sonar.rs<\/a> que es el que explicamos su funcionamiento.<\/p>\n\n\n\n<figure class=\"wp-block-image alignleft size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"581\" height=\"224\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2024\/07\/image-4.png\" alt=\"\" class=\"wp-image-1090\" style=\"width:537px;height:auto\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2024\/07\/image-4.png 581w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2024\/07\/image-4-300x116.png 300w\" sizes=\"auto, (max-width: 581px) 100vw, 581px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">En este caso configuraremos un <em>TimerCount<\/em> que realizara la cuenta de lo que tarda en llegar una se\u00f1al a un pin, ejemplo del Echo de un sonar, al igual que con la generaci\u00f3n de <strong>PWM<\/strong> lo primero es saber que prescales que utilizaremos, interes\u00e1ndonos del tiempo de cada Tick que junto al contador nos permitir\u00e1 conocer el tiempo y claro esta el  m\u00e1ximo tiempo posible <\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">Tiempo trascurrido = Ticks*tiempo<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En este caso solo definimos el prescaler (64 en nuestro caso) y no definiremos el registro <strong><em>WGM1<\/em><\/strong> pues no tenemos que definir ninguna onda solo contar Ticks.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>let timer1 = dp.TC1;\ntimer1.tccr1b.write(|w| w.cs1().prescale_64());<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Deberemos conocer las caracter\u00edsticas del dispositivo sonar que vamos a utilizar para medir distancia, en nuestro caso el sonar HC-SR04 con las caracter\u00edsticas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Medici\u00f3n entre 2cm y 400cm.<\/li>\n\n\n\n<li>Precisi\u00f3n de 3mm<\/li>\n\n\n\n<li>Mantener el triger en alto durante 10\u03bc para el lanzamiento de la onda.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Y utilizaremos la siguiente formula \u00ab<strong><em>Distancia = Tiempo_llegada * velocidad del sonido (340m\/s) \/2 <\/em><\/strong>\u00bb podemos ver que dividimos entre dos ya que el tiempo sera el de ida y el de vuelta una vez rebota con el objeto, aunque en realizada utilizaremos la siguiente formula que nos dar\u00e1 la distancia en cent\u00edmetros.<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">Distancia = Tiempo de llegada \/ 58<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Con el contador definido, con su prescaler y sabiendo lo que tenemos que medir solo nos queda iniciar el contador a 0, lanzar el ECHO y esperar para una vez que nos llegue leer el n\u00famero de <em>Ticks<\/em>  y calcular el tiempo y por lo tanto la distancia.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>timer1.tcnt1.write(|w| w.bits(0));    \/\/ Iniciamos el contador a 0\n\/\/ Se multiplica por 4 convirti\u00e9ndolo en us si usamos un prescaler de 64\nlet contador = timer1.tcnt1.read().bits().saturating_mul(4); \n\nlet distancia = contador \/ 58;   \/\/ Calculo de la distancia con los Ticks obtenidos en la espera.\n\n\/\/ Forma de realizar una pausa con el contador sin utilizar el dalay\ntimer1.tcnt1.write(|w| w.bits(0));\nwhile timer1.tcnt1.read().bits() &lt; 25000 {}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hasta aqu\u00ed los 7 temas tratados<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><a title=\"Rust-Embebido \u00abArduino\u00bb Introducci\u00f3n parte 1\" href=\"https:\/\/www.pinguytaz.net\/index.php\/2024\/06\/09\/rust-embebido-arduino-introduccion-parte-1\/\">Introducci\u00f3n<\/a><\/li>\n\n\n\n<li><a title=\"Rust-Embebido \u00abArduino\u00bb E\/S Digitales parte 2\" href=\"https:\/\/www.pinguytaz.net\/index.php\/2024\/06\/29\/rust-embebido-arduino-e-s-digitales-parte-2\/\">E\/S Digitales<\/a><\/li>\n\n\n\n<li><a title=\"Rust-Embebido \u00abArduino\u00bb Entradas anal\u00f3gicas parte 3\" href=\"https:\/\/www.pinguytaz.net\/index.php\/2024\/07\/03\/rust-embebido-arduino-entradas-analogicas-parte-3\/\">Entradas anal\u00f3gicas<\/a> <\/li>\n\n\n\n<li><a href=\"https:\/\/www.pinguytaz.net\/index.php\/2024\/07\/09\/rust-embebido-arduino-pwm-parte-4\/\" data-type=\"post\" data-id=\"1006\">PWM<\/a> <\/li>\n\n\n\n<li><a href=\"https:\/\/www.pinguytaz.net\/index.php\/2024\/07\/17\/rust-embebido-arduino-interrupciones-externas-parte-5\/\" data-type=\"post\" data-id=\"1008\" target=\"_blank\" rel=\"noreferrer noopener\">Interrupciones externas<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.pinguytaz.net\/index.php\/2024\/07\/25\/rust-embebido-arduino-servomotor-generacion-de-onda-parte-6\/\" data-type=\"post\" data-id=\"1064\" target=\"_blank\" rel=\"noreferrer noopener\">Servomotor (Generaci\u00f3n de Onda)<\/a><\/li>\n\n\n\n<li>HC-SRC04 (Contador de tiempo)<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Y con esto terminamos con la programaci\u00f3n Rust-Arduino, aunque seguro que trataremos alg\u00fan tema m\u00e1s, decir que el programar el Arduino en Rust me ha servido para conocer m\u00e1s el funcionamiento del micro AVR utilizado por Arduino y depurar y mejorar alg\u00fan que otro programa del caj\u00f3n y que seguramente expondremos en estas p\u00e1ginas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Finalizamos esta serie con un ejemplo muy interesante para calcular tiempos que en este caso utilizaremos para medir el tiempo que tarda en llegarnos un ECO de un sonar, en este caso el HC-SR04, como se ve en el ejemplo sonar.rs que es el que explicamos su funcionamiento. En este caso configuraremos un TimerCount que [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":996,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-container-style":"default","site-container-layout":"default","site-sidebar-layout":"default","disable-article-header":"default","disable-site-header":"default","disable-site-footer":"default","disable-content-area-spacing":"default","footnotes":""},"categories":[3,186],"tags":[23,198,187,197],"class_list":["post-1072","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arduino","category-rust","tag-arduino","tag-hc-sr04","tag-rust","tag-sonar"],"_links":{"self":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/1072","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/comments?post=1072"}],"version-history":[{"count":8,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/1072\/revisions"}],"predecessor-version":[{"id":1104,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/1072\/revisions\/1104"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/media\/996"}],"wp:attachment":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/media?parent=1072"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/categories?post=1072"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/tags?post=1072"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}