tag:blogger.com,1999:blog-11804681931486115812024-02-24T03:01:42.384+01:00RSPPI - RaSPberry PIMi objetivo es instalar un Raspberrypi, con todo lo necesario para el hogar actual, asi que:
un mediacenter, centralita telefónica, domótica, torrents, un poco de android y por qué no ... un poco de arduinoUnknownnoreply@blogger.comBlogger100125tag:blogger.com,1999:blog-1180468193148611581.post-82367757200190170152014-11-25T17:56:00.001+01:002014-11-25T17:58:00.300+01:00consulta el calendario de Google desde linea de comandos<h2>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiPcEUq7mTtDTFw4zSSCtZYUfd8QoTfP16Jf2daI5Ig2C6Dy1OQrKS1jIeHL5tnURVj4HVrZdVwwE4gyNbdGbc3pJqrloY6GUvlrVlYAalHnkApBN-P92yfNy9z7X6mlocU0z6opFDfyw/s1600/Captura_calendar3.PNG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiPcEUq7mTtDTFw4zSSCtZYUfd8QoTfP16Jf2daI5Ig2C6Dy1OQrKS1jIeHL5tnURVj4HVrZdVwwE4gyNbdGbc3pJqrloY6GUvlrVlYAalHnkApBN-P92yfNy9z7X6mlocU0z6opFDfyw/s1600/Captura_calendar3.PNG" /></a>
Actualizado a la última API (funcionando desde el 25/11/2014)</h2>
Hola amijos, <a href="http://rsppi.blogspot.com.es/2012/06/generador-mp3-para-despertador.html" target="_blank">hace un millón</a> de años puse un post de cómo consultar el calendario de Google desde <br />
línea de comandos, cosa superútil cuando queremos enviar un mensaje por Gtalk al personal que está de guardia ... y tenemos el calendario de guardias en Google Calendar. Desde el (creo) 17 de Noviembre, esto ya no funciona, porque Google ha cambiado la API del calendario y da un error 403. Os pongo aquí la solución para que no tengáis que dar muchas vueltas.<br />
<br />
<a name='more'></a>Necesitamos conectar a través de la API 3 de Google Calendar, <a href="https://github.com/insanum/gcalcli" target="_blank">gcalcli</a> nos permite esto en su última versión, que por supuesto no esta en los repositorios de Debian:<br />
<script src="https://gist.github.com/juanmol/7e7fba6027b2597cca65.js"></script><br />
y este es el resultado:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfMr9_A_DlqLNelis2drxDs9el7hspCLd8OfTh72gcWEVWcKVI_btQRcA_QR2AZ6sa-rp4gzHQAuiNt-IPIGyolZeatQ2N4QbUg6Rmoo0zL31o9_Pwwo5dYetPsWc7hkTwjNhpPb6_YCY/s1600/Captura_calendar.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfMr9_A_DlqLNelis2drxDs9el7hspCLd8OfTh72gcWEVWcKVI_btQRcA_QR2AZ6sa-rp4gzHQAuiNt-IPIGyolZeatQ2N4QbUg6Rmoo0zL31o9_Pwwo5dYetPsWc7hkTwjNhpPb6_YCY/s1600/Captura_calendar.PNG" /></a></div>
Ahora podéis hacer lo que se os antoje con el gcalcli y sus 7 millones de combinaciones distintas, los que somos muy aburridos usaremos:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeXanauzwyqMkARU0xFT0oT8q6t432AQe7kqR0ByapPX_ECWPS_kTgJlJfo2fw09l_8iOAQICQ6Tj-F663PigyzfnEwR9Q5wR-yRu2KTdj76iM0borx6O09LRKaTZJzuTgB3QyAfI8oow/s1600/Captur_calendar2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeXanauzwyqMkARU0xFT0oT8q6t432AQe7kqR0ByapPX_ECWPS_kTgJlJfo2fw09l_8iOAQICQ6Tj-F663PigyzfnEwR9Q5wR-yRu2KTdj76iM0borx6O09LRKaTZJzuTgB3QyAfI8oow/s1600/Captur_calendar2.PNG" /></a></div>
Fácil y sencillo ... y para toda la familia.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1180468193148611581.post-42761949689306498352014-09-25T16:47:00.000+02:002014-09-26T12:41:47.356+02:00Proyecto Centinela Asesino: fin del prototipo<h2>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbkQ9811-4MmvRpXOdC5J0Bvp0quQWuTAbRkYgsKPagCo2HnQwXYSkU9oC8kMocB2I2dHD-llmdaGi-mFh2cgK5ZV54XzWNfvtN1dWgTqGYab5_3Wgs2Bcm_bk6Vf7QI1UbIbqaGyzfaA/s1600/centinelaasesino.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbkQ9811-4MmvRpXOdC5J0Bvp0quQWuTAbRkYgsKPagCo2HnQwXYSkU9oC8kMocB2I2dHD-llmdaGi-mFh2cgK5ZV54XzWNfvtN1dWgTqGYab5_3Wgs2Bcm_bk6Vf7QI1UbIbqaGyzfaA/s1600/centinelaasesino.png" height="195" width="200" /></a>todo ensamblado</h2>
Buenos días, ya tengo terminado el ensamblado y programado de todo el proyecto. Faltaría sólo ponerle la Raspicam, pero como eso no tiene misterio ninguno, no la pondré por ahora. A continuación unas fotillos.<br />
<br />
<a name='more'></a>Os recuerdo que esto es solo un prototipo a pequeña escala, de lo que pretendo montar en un futuro:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhT9I9yX_6-_Lh10UlQAM02DuPh4bq9h5-trl-acVjaEin9kSsJSoNaYerkkpqsSL0Fh7QuQ1EJpBj7HTyVkaVRGDkWfkapL98Rkgr9bNQhDYZ8jhHassvyRtwPM2J4y_lx1j6yKGgqKk/s1600/20140925_133925.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhT9I9yX_6-_Lh10UlQAM02DuPh4bq9h5-trl-acVjaEin9kSsJSoNaYerkkpqsSL0Fh7QuQ1EJpBj7HTyVkaVRGDkWfkapL98Rkgr9bNQhDYZ8jhHassvyRtwPM2J4y_lx1j6yKGgqKk/s1600/20140925_133925.jpg" height="320" width="240" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc9z1mVGlf1W4LijQcVv6_GHw_S83YvW0G42eRAc1DnsEu8vN3VhqC1nJcI654s9MYREl1KA04QWQXSo3xvhy5oPabQgru3htgvGNLukR3DUOs1fRbRkSlqxhh9VO2sn-PrOVAbKgHf04/s1600/20140925_133933.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc9z1mVGlf1W4LijQcVv6_GHw_S83YvW0G42eRAc1DnsEu8vN3VhqC1nJcI654s9MYREl1KA04QWQXSo3xvhy5oPabQgru3htgvGNLukR3DUOs1fRbRkSlqxhh9VO2sn-PrOVAbKgHf04/s1600/20140925_133933.jpg" height="240" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0U4cXKBrDr7HUgqhwjrHI6haaG0qPHI3im8nCjuIBReLls91LdbQ7LAmlmsMJz9gt9ff9myDjeoAOV_ltQ7Ud79mZooIIXMjwwGMHrKL6gmbwg5RM7DgRlpIfAuF2sNPPYxgqGjxOS4I/s1600/20140925_133949.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0U4cXKBrDr7HUgqhwjrHI6haaG0qPHI3im8nCjuIBReLls91LdbQ7LAmlmsMJz9gt9ff9myDjeoAOV_ltQ7Ud79mZooIIXMjwwGMHrKL6gmbwg5RM7DgRlpIfAuF2sNPPYxgqGjxOS4I/s1600/20140925_133949.jpg" height="240" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
No es cutre, es un prototipo. Como veis, destaca el equipo de comunicaciones, que no es más que un wifi con una antena gorda; se ve además el brazo pan tilt y las ruedas motoras. Para la rueda loca:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtvUz9DUmOmoQ1M56obk5p5BaAyRTVNV-PfesYZtRdxwBNjXCDy8zmPWd33-6upSPW4r0WG22K-DqYvH8E3IHEBDjbznZ6Fp0Tm3tdS3gILBgTCSHB5iOjvZ__6rBgHE9-DIOsf2LcI20/s1600/20140925_134032.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtvUz9DUmOmoQ1M56obk5p5BaAyRTVNV-PfesYZtRdxwBNjXCDy8zmPWd33-6upSPW4r0WG22K-DqYvH8E3IHEBDjbznZ6Fp0Tm3tdS3gILBgTCSHB5iOjvZ__6rBgHE9-DIOsf2LcI20/s1600/20140925_134032.jpg" height="240" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
es una bola que se mueve en todas direcciones, la he sacado de ...</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLvHxCSlWAJU0W2TgMHtn5-2OCj56Lwx01_W_kXP4yGbxVaoA2upNlOVqkveP2nI_V-Su54MH76H7SOOmaXpz9JwRIzeLlcLM_uwK2SYRYURm2R-0HLQZt-0DN0ohGG84HIeBlm8lvzoU/s1600/rollon-con-avena.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLvHxCSlWAJU0W2TgMHtn5-2OCj56Lwx01_W_kXP4yGbxVaoA2upNlOVqkveP2nI_V-Su54MH76H7SOOmaXpz9JwRIzeLlcLM_uwK2SYRYURm2R-0HLQZt-0DN0ohGG84HIeBlm8lvzoU/s1600/rollon-con-avena.jpg" height="320" width="274" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
Efectivamente amigos! el desodorante roll on del Mercadona, en su variante "Macho Machote" por supuesto. Los motores, como ya os comenté los saqué de una impresora difunta, que creía que a 6v iban a funcionar bien, pero al final necesitan 12V:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1io08SJ9IGWQ0pTXH4jTIg1kSucD_u2ePRUFkHdJCJI6d23r2QjOascOtN11rnTrkUO82qxEeAicIEj6rgu6a_7x_iFBiM3TYubUSu2iDdQqJ70Q6K8BViij9Qwk-unSQGBKylNGJHcY/s1600/20140925_134311.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1io08SJ9IGWQ0pTXH4jTIg1kSucD_u2ePRUFkHdJCJI6d23r2QjOascOtN11rnTrkUO82qxEeAicIEj6rgu6a_7x_iFBiM3TYubUSu2iDdQqJ70Q6K8BViij9Qwk-unSQGBKylNGJHcY/s1600/20140925_134311.jpg" height="240" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
8 pilas AA a 1'5V la unidad = 12V . Se que es una burrada, lo lógico es usar una batería lipo pero os recuerdo que el presupuesto del proyecto es 0€. Mi Raspberry no se puede alimentar a 12V, explota, así que buscando buscando he encontrado este circuito:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwRMhWwgbHtDRPKG6KtV2fLyzduk2gduQwOllpWuimMoMQZH06JSZfj_nH_2lW84eScS8ScZUAeNl_YnrWdUIWqHBD0-04gdkZCjNpbnqlwmvkPr_pIxpW6wtPPBbQdIwnDOjUbWmnJys/s1600/20140925_133939.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwRMhWwgbHtDRPKG6KtV2fLyzduk2gduQwOllpWuimMoMQZH06JSZfj_nH_2lW84eScS8ScZUAeNl_YnrWdUIWqHBD0-04gdkZCjNpbnqlwmvkPr_pIxpW6wtPPBbQdIwnDOjUbWmnJys/s1600/20140925_133939.jpg" height="240" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
El de abajo con los dos condensadores y el potenciómetro. Le conecto los 12V en la entrada y con el potenciometro regulo la salida a 6V, he usado esto mismo para el mando:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjS32Qkq-tf_MiWb75Bw9rnnetb7DVvQdzz6tEeAfj9pybkwButS31FuJsi05jWrL6Rsd4Mkgil29o73Xo6heEJxqGJgV016UGUGWdL15VbBAIDCQVDGxT6ZrgqI7IRvdqIYAKEW6JMyRg/s1600/20140925_134153.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjS32Qkq-tf_MiWb75Bw9rnnetb7DVvQdzz6tEeAfj9pybkwButS31FuJsi05jWrL6Rsd4Mkgil29o73Xo6heEJxqGJgV016UGUGWdL15VbBAIDCQVDGxT6ZrgqI7IRvdqIYAKEW6JMyRg/s1600/20140925_134153.jpg" height="240" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh10n5Qk9kr_xQ3YrzEN3r-217JK-aiypLtBON7NAoHCUNl3BS4_5KPKL2TDLKFEDaw2KX15jg63GOpM8VrtZbLMFDg2gB6O6fO3gi2WeBHd5bzsDAm0BpoTd11WK7ZqTFgmn840kyxgqM/s1600/20140925_134159.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh10n5Qk9kr_xQ3YrzEN3r-217JK-aiypLtBON7NAoHCUNl3BS4_5KPKL2TDLKFEDaw2KX15jg63GOpM8VrtZbLMFDg2gB6O6fO3gi2WeBHd5bzsDAm0BpoTd11WK7ZqTFgmn840kyxgqM/s1600/20140925_134159.jpg" height="240" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<h3>
Código</h3>
<div>
Finalmente el código (también en fase de pruebas [tiene mucha trampa]):</div>
<div><script src="https://gist.github.com/juanmol/afb264af4f84856670c4.js"></script>
<br /></div>
<h3>
Resultado y conclusiones</h3>
<div class="separator" style="clear: both; text-align: left;">
Estoy muy contento con lo que he conseguido sin gastar nada (me lo había gastado antes para otros proyectos, pero no cuenta). La comunicación va como la seda, superrápido, fiable, no falla ... el acabado en realidad ... me encanta, lo que tiene pinta de Frankenstein va conmigo. El brazo pan-tilt, funciona y los motores de las ruedas ... funcionar funcionan, pero necesito mucha más potencia, una batería tipo lipo o algo por el estilo.</div>
<div class="separator" style="clear: both; text-align: left;">
Sin cambiar mucho, sólo el wifi por un modem 3G, puedo controlarlo a través de internet, para lo que necesitaría lógicamente ponerle la Raspicam.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Y bueno, he usado casi todos mis conocimientos para montar el prototipo, porque aunque no lo he comentado he estado haciendo pruebas de control del brazo pan-tilt con un casco VR último modelo:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6P6be4epA737-85Eu0gh2BW55aOsmiG7XkuCogkw0_BCEQeFKnoDxZcdwUw-_XFmCr0or-loMyi1Y_4AsiVxGj0A6JcRqItgD-oHnVAWNMfL3U2lCfSlXdZsGgIrhDwc5UMnyV-2nNFA/s1600/google-cardboard.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6P6be4epA737-85Eu0gh2BW55aOsmiG7XkuCogkw0_BCEQeFKnoDxZcdwUw-_XFmCr0or-loMyi1Y_4AsiVxGj0A6JcRqItgD-oHnVAWNMfL3U2lCfSlXdZsGgIrhDwc5UMnyV-2nNFA/s1600/google-cardboard.jpg" height="226" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
Efectivamente, es el Google CaradBoard, derrochando presupuesto (3€ en Aliexpress), para lo que además, tengo que modificar la imagen captada por la Raspicam, para que se pueda ver a través de las lentes sin deformidades. Y también he probado usar comandos de voz que interpretaría el Android de dentro del Google Cardboard (que te recuerdo que es el que recibe por BT desde el mando y lo envía al Raspberry) para controlar aspectos más avanzados del centinela. Pero eso ya os lo enseñaré más adelante.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYplV_HoxWNXpOGHuZW1wk8SKlb1TXLzCGV_XA5pLayAyCi_-fzOWu1gyQ4_103USA8ZXlkhqBr8OS10yQwC5SqHK9_keVy5Lx6ajCBKcVuxhL7ec6qO5GJzLfC6si4jIozSl92I07waY/s1600/tumblr_lh6sayYpIJ1qzaxefo1_400.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYplV_HoxWNXpOGHuZW1wk8SKlb1TXLzCGV_XA5pLayAyCi_-fzOWu1gyQ4_103USA8ZXlkhqBr8OS10yQwC5SqHK9_keVy5Lx6ajCBKcVuxhL7ec6qO5GJzLfC6si4jIozSl92I07waY/s1600/tumblr_lh6sayYpIJ1qzaxefo1_400.gif" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>Unknownnoreply@blogger.com3tag:blogger.com,1999:blog-1180468193148611581.post-82957587858834342232014-09-01T18:44:00.000+02:002014-09-01T18:51:15.488+02:00Proyecto Centinela Asesino: Enviar los datos al RaspberryPi<h2>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbkQ9811-4MmvRpXOdC5J0Bvp0quQWuTAbRkYgsKPagCo2HnQwXYSkU9oC8kMocB2I2dHD-llmdaGi-mFh2cgK5ZV54XzWNfvtN1dWgTqGYab5_3Wgs2Bcm_bk6Vf7QI1UbIbqaGyzfaA/s1600/centinelaasesino.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbkQ9811-4MmvRpXOdC5J0Bvp0quQWuTAbRkYgsKPagCo2HnQwXYSkU9oC8kMocB2I2dHD-llmdaGi-mFh2cgK5ZV54XzWNfvtN1dWgTqGYab5_3Wgs2Bcm_bk6Vf7QI1UbIbqaGyzfaA/s1600/centinelaasesino.png" height="195" width="200" /></a>envío de datos en tiempo real</h2>
Hola de nuevo,<br />
en este post vamos a terminar con la comunicación entre el pad bluetooth y el Raspberry, usando como reenviador un movil con Android, para tener cobertura mundial. Este paso es el más sencillo, pero el más caro.<br />
<br />
<a name='more'></a><br />
Después de probar cientos de combinaciones entre Appinventor y RaspberryPi, he llegado a la conclusión de que lo mejor y más rápido es usar sshfs. Se trata de montar en nuestro RaspberryPi, un recurso (directorio) por ssh que se encuentra en nuestro Android. Esto es algo que se usa mucho a nivel de servidores y que tiene licencia GNU ... menos en Android. Necesitamos:<br />
<br />
<ul>
<li>sshfs (servidor) en android, que cuesta la friolera de <b>1'96€</b> y no me llevo comisión. <a href="https://play.google.com/store/apps/details?id=com.chaos9k.sshfsandroid" target="_blank">Enlace a Google Play.</a></li>
<li>La app del <a href="http://rsppi.blogspot.com.es/2014/08/proyecto-centinela-asesino-app-de.html" target="_blank">post anterior</a>.</li>
</ul>
<br />
y nada más. La comunicación entre Android y RaspberryPi es vía datos, es por esto que para las pruebas necesitamos que estén en la misma red (que se vean). Una vez instalada la app en Android:<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCLw5jdFkhS5pJIb_6aSoYjSOJneC9kXt3CcAX-WCH-BoQX4EcvEwygA_kZlMAZrb110fXLwxlsTLiEaeRjq3tNF68wPv6T1Eecocb1f8HiCOHEKYUBf2FImbTLScw9Z2SdU_MMRJh0mA/s1600/Screenshots_2014-09-01-11-25-30.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCLw5jdFkhS5pJIb_6aSoYjSOJneC9kXt3CcAX-WCH-BoQX4EcvEwygA_kZlMAZrb110fXLwxlsTLiEaeRjq3tNF68wPv6T1Eecocb1f8HiCOHEKYUBf2FImbTLScw9Z2SdU_MMRJh0mA/s1600/Screenshots_2014-09-01-11-25-30.png" height="320" width="200" /></a></div>
<br />
La ip que hay que poner es la ip del RaspberryPi, en mi caso tengo un wifi usb en el Rasp que conecta con la zona wifi del Android, tal y como explico en <a href="http://rsppi.blogspot.com.es/2013/04/configurando-el-mando-distancia-del.html" target="_blank">este post</a>.<br />
Mount Point es la ruta local donde la app guarda los datos, en mi caso es esa, si instalas directamente el apk, también será la misma, si generas el apk desde el appinventor, cambiará "juanmol" por tu usuario.<br />
En opciones avanzadas marcamos nonempty, el resto lo dejamos igual.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7cO3S9YXnWjaaen4p1_RJuEO6WHQTIAXgOh-cabmlqzKlyOQzcSLzzmM7kn7tx4LYNXbcayGKzQF8zWmtXkHeZ-CDBgNGUjjtONgVQNrvmN4yKgO0rE3JBU1842BuRRgLK22nYneRjyI/s1600/Screenshots_2014-09-01-11-19-31.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7cO3S9YXnWjaaen4p1_RJuEO6WHQTIAXgOh-cabmlqzKlyOQzcSLzzmM7kn7tx4LYNXbcayGKzQF8zWmtXkHeZ-CDBgNGUjjtONgVQNrvmN4yKgO0rE3JBU1842BuRRgLK22nYneRjyI/s1600/Screenshots_2014-09-01-11-19-31.png" height="320" width="200" /></a></div>
<br />
Antes de seguir, en el Rasp creamos el Remote Path:<br />
<blockquote class="tr_bq">
mkdir -p /mnt/recibidoandroid</blockquote>
y ahora en sshfsandroid conectamos contra el Raspberry. Ahora cualquier dato que nuestra app en Android escriba en el dispositivo, lo estará escribiendo directamente en el RaspberryPi, como son datos muy livianos la comunicación en casi instantánea y como es vía datos, podemos usar la ZonaWifi, el wifi de tu casa e incluso 3G/4G para tener cobertura mundial.<br />
En el siguiente post, gestionaremos los datos recibidos para mover los motores.Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-1180468193148611581.post-36818738643794586942014-08-28T20:59:00.001+02:002014-08-28T20:59:24.541+02:00Proyecto Centinela Asesino: video recopilatorio 1<h2>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbkQ9811-4MmvRpXOdC5J0Bvp0quQWuTAbRkYgsKPagCo2HnQwXYSkU9oC8kMocB2I2dHD-llmdaGi-mFh2cgK5ZV54XzWNfvtN1dWgTqGYab5_3Wgs2Bcm_bk6Vf7QI1UbIbqaGyzfaA/s1600/centinelaasesino.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbkQ9811-4MmvRpXOdC5J0Bvp0quQWuTAbRkYgsKPagCo2HnQwXYSkU9oC8kMocB2I2dHD-llmdaGi-mFh2cgK5ZV54XzWNfvtN1dWgTqGYab5_3Wgs2Bcm_bk6Vf7QI1UbIbqaGyzfaA/s1600/centinelaasesino.png" height="195" style="cursor: move;" width="200" /></a>... el camino hasta ahora ...</h2>
Para que nadie se pierda, voy a ir subiendo videotutoriales de todo el proceso. Aquí tenéis el primero, no tiene la calidad que me gustaría, pero no consigo encontrar un editor de vídeo para Linux, en condiciones. Espero que os guste.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="https://i.ytimg.com/vi/-L_8JTF_f5I/0.jpg" height="240" width="400"><param name="movie" value="https://www.youtube.com/v/-L_8JTF_f5I?version=3&f=user_uploads&c=google-webdrive-0&app=youtube_gdata" /><param name="bgcolor" value="#FFFFFF" /><param name="allowFullScreen" value="true" /><embed width="400" height="240" src="https://www.youtube.com/v/-L_8JTF_f5I?version=3&f=user_uploads&c=google-webdrive-0&app=youtube_gdata" type="application/x-shockwave-flash" allowfullscreen="true"></embed></object></div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1180468193148611581.post-40681007447087127472014-08-23T10:50:00.000+02:002014-08-23T10:51:21.542+02:00Proyecto Centinela Asesino: app de Android<h2>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2An2Bns6T4Nnwh64O7qK2vnzY06l9sl-sGUFFJXf1hhh2y4fK2Y1sJC9hsqBz6P6BcW5cloHWXAILkktzJcFI2e_BCG3R2AOiAjwVo6X8haWSUQAHh9paFrE3CdaBnh8SifosHsuFqF0/s1600/centinelaasesino.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2An2Bns6T4Nnwh64O7qK2vnzY06l9sl-sGUFFJXf1hhh2y4fK2Y1sJC9hsqBz6P6BcW5cloHWXAILkktzJcFI2e_BCG3R2AOiAjwVo6X8haWSUQAHh9paFrE3CdaBnh8SifosHsuFqF0/s1600/centinelaasesino.png" height="195" width="200" /></a>
usando Appinventor v2</h2>
Bueno bueno, el Centinela Asesino va teniendo sistema nervioso. Para enviar las pulsaciones del pad bluetooth del post anterior al RaspberryPi, vamos a usar un cacharro intermedio, que nos lo permita. Por ejemplo un móvil con Android. El móvil recibe por BT las pulsaciones y las reenvía vía datos al RaspberryPi. Cómo los datos son datos, pueden ser enviados por <a href="http://rsppi.blogspot.com.es/2013/04/configurando-el-mando-distancia-del.html" target="_blank">zona wifi</a>, o por 3G a cualquier parte del mundo.<br />
<br />
<a name='more'></a>Con el Quad-raspbi-coptero no se me ocurrió otra idea, que usar un demonio http para recibir las ordenes desde Android. No es mala idea, pero me daba retrasos de 1s, lo cual no es aceptable hoy día. Después de probar 359 millones de combinaciones posibles, caí en la cuenta de que llevo usando la solución años y años. Voy a usar sshfs para montar un directorio del RaspberryPi en el Android y mi app se limitará a generar un archivo en ese recurso con los datos que recibe por BT. Fácil y sencillo y para toda la familia.<br />
<span style="background-color: yellow;">¡¡OJO!! al final pongo un enlace para que te descargues la app para Appinventor y el apk.</span><br />
En realidad es muy fácil, mi app tiene este aspecto:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEf4uF_Gq5qpdhJ4NGvvERhJP_lSvmpDyYLUMx8I03F5hxQSoCZhO-9PAb7h65apukYN_q29pV1r1Hxf75vSju3Hc-cWutYRQnWo6yMLKGzF9-LK4wNYwJXdp6QvaTrbsrgfg8brhrN3w/s1600/appinventor.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEf4uF_Gq5qpdhJ4NGvvERhJP_lSvmpDyYLUMx8I03F5hxQSoCZhO-9PAb7h65apukYN_q29pV1r1Hxf75vSju3Hc-cWutYRQnWo6yMLKGzF9-LK4wNYwJXdp6QvaTrbsrgfg8brhrN3w/s1600/appinventor.PNG" height="320" width="202" /></a></div>
<br />
No puede ser mas simple, en la parte de "Designer" el único componente que tiene un valor cambiado es el Clock1:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgL17GV_0La4kBOELzQuDxmKvhtfSDYz-bKFW-Yeo5-kEB9Fxz_UR2-k51GaK-cnTRHe3eb4OJJ1bk-3E1rviMohanifDOxptPJ-Buny1hyphenhyphen4WH9LE4EJWGBGJsX8px-2E_sk_nOHZr0PtY/s1600/appinventor2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgL17GV_0La4kBOELzQuDxmKvhtfSDYz-bKFW-Yeo5-kEB9Fxz_UR2-k51GaK-cnTRHe3eb4OJJ1bk-3E1rviMohanifDOxptPJ-Buny1hyphenhyphen4WH9LE4EJWGBGJsX8px-2E_sk_nOHZr0PtY/s1600/appinventor2.PNG" height="320" width="247" /></a></div>
<br />
Ahora vamos a Blocks:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3S1qONzl7GPaKuyi2oArqfxtFnCT9FoJRi7Jr0Frfknznsc_UKvigsGPd7zOefF_rtymR3xV2rjiih9cwjJCxdy1uTX-1edH-6_Fp1Xto35HF52aNL7mz9xaldqmy2U7oDQfFJbEoNuE/s1600/appinventor3.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3S1qONzl7GPaKuyi2oArqfxtFnCT9FoJRi7Jr0Frfknznsc_UKvigsGPd7zOefF_rtymR3xV2rjiih9cwjJCxdy1uTX-1edH-6_Fp1Xto35HF52aNL7mz9xaldqmy2U7oDQfFJbEoNuE/s1600/appinventor3.PNG" height="238" width="320" /></a></div>
<br />
supersimple. Te lo explico:<br />
<ol>
<li>Con el componente ListPicker, sacamos un listado con todos los dispositivos BT enlazados con nuestro móvil.</li>
<li>Al elegir el BT conectado al ATTiny84, ponemos en marcha el Clock1 y comenzamos a recibir datos.</li>
<li>El dato recibido (recuerda: 114545 por ejemplo) lo mostramos en un label, porque somos profesionales.</li>
<li>El dato recibido, lo descuartizamos y lo guardamos en archivos en el directorio particular de la app ¡¡MUCHO OJO CON ESTO!!.</li>
<li>Por en medio he metido algunas comprobaciones, que son fáciles de entender.</li>
</ol>
<div>
Y ya está, con esto recibimos un dato numérico de 6 dígitos por BT, y los almacenamos en 6 archivos en nuestro Android. En el siguiente post veremos como enlazarnos con Raspberrypi con sshfs, para usar estos datos.</div>
<blockquote class="tr_bq">
<div style="text-align: center;">
Enlace a archivo aia para importar a Appinventor V2 - <a href="https://www.dropbox.com/s/0hmf7qz4b67fs7a/reenviador.aia" target="_blank">link</a>.</div>
<div style="text-align: center;">
Enlace a archivo apk, directo a tu Android - <a href="https://www.dropbox.com/s/63elw4rodnqauac/reenviador.apk" target="_blank">link</a>.</div>
</blockquote>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1180468193148611581.post-78698810798056994252014-08-22T10:21:00.001+02:002014-08-22T10:21:22.824+02:00Proyecto Centinela Asesino: sistema de comunicaciones<h2>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2An2Bns6T4Nnwh64O7qK2vnzY06l9sl-sGUFFJXf1hhh2y4fK2Y1sJC9hsqBz6P6BcW5cloHWXAILkktzJcFI2e_BCG3R2AOiAjwVo6X8haWSUQAHh9paFrE3CdaBnh8SifosHsuFqF0/s1600/centinelaasesino.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2An2Bns6T4Nnwh64O7qK2vnzY06l9sl-sGUFFJXf1hhh2y4fK2Y1sJC9hsqBz6P6BcW5cloHWXAILkktzJcFI2e_BCG3R2AOiAjwVo6X8haWSUQAHh9paFrE3CdaBnh8SifosHsuFqF0/s1600/centinelaasesino.png" height="195" width="200" /></a>
... después de hacer 300 millones de pruebas</h2>
<div>
Recordemos la idea del sistema de comunicaciones del C-A:</div>
<div>
<ul>
<li>Barato</li>
<li>Controlable desde cualquier parte del mundo</li>
<li>Varios canales simultáneos</li>
<li>Respuesta inmediata</li>
</ul>
<div>
<a name='more'></a>Viendo el pad que vamos a usar:</div>
</div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqeP-Dc8sKXeKD_nCTKcP5E5Ftx0ibhIuWIDKztZ7D3frBnzAAdvJHEwAFV3aqkG4Mfhn8ODlibwHyTHafDCcaHBTDAvEkze6qRkKDdGWHI7VDHOQ-pv34Mhybq0V64_r-3k_vJ0i9jRs/s1600/joystics.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqeP-Dc8sKXeKD_nCTKcP5E5Ftx0ibhIuWIDKztZ7D3frBnzAAdvJHEwAFV3aqkG4Mfhn8ODlibwHyTHafDCcaHBTDAvEkze6qRkKDdGWHI7VDHOQ-pv34Mhybq0V64_r-3k_vJ0i9jRs/s1600/joystics.jpg" height="240" width="320" /></a></div>
<br />
nos damos cuenta de que tiene 4 sticks analógicos, dos botones (digitales obviusly) y Vcc y GND. Para que las pulsaciones se envíen por bluetooth, necesitaremos además del bluetooth, un controlador que lo haga todo. En mi caso usaré un ATtiny84:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizuFlyoL6oEvj5pxYNuyBbueRbu9vrmFIY9gHu3vGaM_8MAHMwH94OcTPn9bIPVHNvcGf5yIuoCqp9rMJxpplSDPS5l-4eo7gNFQTgTKan3iKeHMScZS3G9Ax2xaNEzeQjHwi3cJmk8xk/s1600/attiny84.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizuFlyoL6oEvj5pxYNuyBbueRbu9vrmFIY9gHu3vGaM_8MAHMwH94OcTPn9bIPVHNvcGf5yIuoCqp9rMJxpplSDPS5l-4eo7gNFQTgTKan3iKeHMScZS3G9Ax2xaNEzeQjHwi3cJmk8xk/s1600/attiny84.jpg" /></a></div>
<div>
<br /></div>
<div>
Se programa exactamente igual que el <a href="http://rsppi.blogspot.com.es/2013/09/sensores-inalambricos.html" target="_blank">ATTiny85</a>, desde un Arduino. Como esta parte es un poco liosa, voy a repetir los pasos, uno a uno, para que no me digáis que no os lo explico todo.<br />
<h3>
Preparación del Arduino en modo ISP:</h3>
</div>
<div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<ol>
<li>Descargamos e instalamos el IDE de Arduino, podemos usar la versión 1.5 o la 1.0, como gustes.</li>
<li>Descargamos la última versión de las librerias de ATTiny, <span style="background-color: yellow;">para la versión de nuestro IDE</span>, desde la web <a href="https://code.google.com/p/arduino-tiny/">https://code.google.com/p/arduino-tiny/</a></li>
<li>Descomprimimos el archivo anterior, renombramos el nombre del directorio a "tiny" y el archivo Prospective-Boards.txt, lo renombramos a boards.txt. La estructura tiene que quedar así:<br />tiny<br /> | - avr<br /> | - bootloaders (...)<br /> | - cores (...)<br /> | - boards.txt<br /> | - license.txt<br /> | - platform.txt<br /> | - README</li>
<li>Movemos el directorio tiny al directorio hardware del IDE de Arduino, por ejemplo:<br />C:\Users\juanmol\Documents\arduino\arduino-1.5.7\hardware</li>
<li>Abrimos el IDE, y cargamos el programa ArduinoISP:<br /><div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhRNfU-Ms8QZ0LKZRq4dMES_ezjDEfDTUfHsM9OPoR4RPLgVuCGVBE2PCX3YgH_OQ7wJg7lJng6ZHxqGGuBzedfelr6vPJlUpRfkYJE0YS9MjsB1BWFeHaMtO42NvWPIun-qiyjQKy2SU/s1600/carga_isp.png" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhRNfU-Ms8QZ0LKZRq4dMES_ezjDEfDTUfHsM9OPoR4RPLgVuCGVBE2PCX3YgH_OQ7wJg7lJng6ZHxqGGuBzedfelr6vPJlUpRfkYJE0YS9MjsB1BWFeHaMtO42NvWPIun-qiyjQKy2SU/s1600/carga_isp.png" height="320" width="227" /></a></div>
</li>
<li>Nos aseguramos de tener correctamente los datos de la placa y el programador:<br /><div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQ5jULmfh9PRNFrimSabpVjQf9ry8SmwGoiyg7DpN-Uzrfj0-lYHBjXpYxRe4GHXHolxZGdB5heVkwLPBhXX03MTqwx0LG45pWOYNc4a175Ao7RV0bAK9ocnO0qEHvdZIOqqeEHuOT0VY/s1600/carga_isp_3.png" imageanchor="1" style="display: inline !important; margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQ5jULmfh9PRNFrimSabpVjQf9ry8SmwGoiyg7DpN-Uzrfj0-lYHBjXpYxRe4GHXHolxZGdB5heVkwLPBhXX03MTqwx0LG45pWOYNc4a175Ao7RV0bAK9ocnO0qEHvdZIOqqeEHuOT0VY/s1600/carga_isp_3.png" height="320" width="227" /></a></div>
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-riqKxWOZXvXK-HxObYTFamQTVIImnQwpU_CSosOLHs3T7cYBs8BAvNwsFlIDAlkG0H6G3nuwvdsWmymQG3uh8N1peayVm_826khb-PYxm0bXdlDAQHp2ZdIpm7NyTgDDU9c7PzOC0S0/s1600/carga_isp_2.png" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-riqKxWOZXvXK-HxObYTFamQTVIImnQwpU_CSosOLHs3T7cYBs8BAvNwsFlIDAlkG0H6G3nuwvdsWmymQG3uh8N1peayVm_826khb-PYxm0bXdlDAQHp2ZdIpm7NyTgDDU9c7PzOC0S0/s1600/carga_isp_2.png" height="320" width="227" /></a></div>
<div style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em; text-align: center;">
</div>
</li>
<li>Enchufamos el Arduino UNO (o el que tengas) y le damos a cargar (upload) programa.</li>
</ol>
<h3>
Carga del bootloader del ATTiny84, usando el Arduino</h3>
</div>
<div>
Cableamos de la siguiente forma:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhumywOyDNR855B5p6rto5pCBDQTIRKPIA9wse6QEuVwiAX93E2NIfPEG_eC0c8qsU7lCmVmpNzNkosOH3qxD4xVH-D4TJ0dyrcACw5t_jTJQW2yn6OEOztXOqha1Szy17VqzNkqALvARM/s1600/programming-attiny44-attiny84-with-arduino-uno.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhumywOyDNR855B5p6rto5pCBDQTIRKPIA9wse6QEuVwiAX93E2NIfPEG_eC0c8qsU7lCmVmpNzNkosOH3qxD4xVH-D4TJ0dyrcACw5t_jTJQW2yn6OEOztXOqha1Szy17VqzNkqALvARM/s1600/programming-attiny44-attiny84-with-arduino-uno.png" height="239" width="320" /></a></div>
<div>
<br /></div>
<div>
Mucho ojo al condensador, recuerda que si NO usas un Arduino UNO, NO es necesario. Ahora volvemos al IDE de Arduino:</div>
<div>
<ol>
<li>Si has ido conectando el ATTIny84 al Arduino, al mismo tiempo que tenias éste último encendido (conectado por USB), pulsa en el Arduino el botón de reset varias veces.</li>
<li>En el IDE, selecciona la placa correspondiente:<br /><div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJDgM-TnEM_15XlwWP89q6ZYoY3Rx0d_bThDVMtrV2VpH0fJrill0cPMV-ESzmjAZcwIOeysSaDEWFro8VlYoaeD-pb_U0b8eIQpcT6gpqiadXvCfxO57_OJVj36vBiEl7OSk6NUz6eyY/s1600/attiny84-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJDgM-TnEM_15XlwWP89q6ZYoY3Rx0d_bThDVMtrV2VpH0fJrill0cPMV-ESzmjAZcwIOeysSaDEWFro8VlYoaeD-pb_U0b8eIQpcT6gpqiadXvCfxO57_OJVj36vBiEl7OSk6NUz6eyY/s1600/attiny84-1.png" height="320" width="225" /></a></div>
</li>
<li>Cambia el programador y elige Arduino as ISP:<br /><div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPUnF53oZwPjONZTMW3ybddD1E_66Vke7Fd4rJJBs_ZMDQ-M3LOjdD37ve9CMuS8iImtFaJ9CRj3pxhkgDBtgKaTuy2pCsz2fq53W3XcoDYuWmDXYyztmhXaTtUauh8uPEj4_Pg1RoTCo/s1600/attiny84-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPUnF53oZwPjONZTMW3ybddD1E_66Vke7Fd4rJJBs_ZMDQ-M3LOjdD37ve9CMuS8iImtFaJ9CRj3pxhkgDBtgKaTuy2pCsz2fq53W3XcoDYuWmDXYyztmhXaTtUauh8uPEj4_Pg1RoTCo/s1600/attiny84-2.png" height="320" width="267" /></a></div>
</li>
<li>REVISA EL CABLEADO!!!! (tres veces).</li>
<li>Grabamos el bootloader (secuencia de inicio):<br /><div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvDzH0rH2jbNt1n1rAOG1b0WoYElHzmIVKu4wtcth6TE_dAveCf2yOWVaHsT0fNK3obiL3wDykFUQhVRaSPlUmUcmZb1lx1g3K1YflCrtGaCxFw4E2L9FmklluJpOzi_375Ue2jkzIQa0/s1600/attiny84-3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvDzH0rH2jbNt1n1rAOG1b0WoYElHzmIVKu4wtcth6TE_dAveCf2yOWVaHsT0fNK3obiL3wDykFUQhVRaSPlUmUcmZb1lx1g3K1YflCrtGaCxFw4E2L9FmklluJpOzi_375Ue2jkzIQa0/s1600/attiny84-3.png" height="320" width="267" /></a></div>
</li>
<li>Si lo has hecho todo bien, es probable que te salgan un par (o cuatro) de mensajes de advertencia, puedes ignorarlos.</li>
</ol>
<h3>
Conexión BT-ATTiny84</h3>
</div>
<div>
La idea es la siguiente:</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiv2LcOuyNy6ToviUkBdexlrvB8ZzOhyphenhyphenSwQAt2tLj7IzFXDhGKK-z3cTt0rWhAJY81RWZhgzzS-49mRJa0J8JXwzLzg11X3QVrSYVi7o7Xof8KgSJllC6Gf6BA74qtPar8CkmliBsqf7qM/s1600/esquema.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiv2LcOuyNy6ToviUkBdexlrvB8ZzOhyphenhyphenSwQAt2tLj7IzFXDhGKK-z3cTt0rWhAJY81RWZhgzzS-49mRJa0J8JXwzLzg11X3QVrSYVi7o7Xof8KgSJllC6Gf6BA74qtPar8CkmliBsqf7qM/s1600/esquema.png" height="174" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
Fácil ¿verdad? Para las pruebas, conectamos los 5V y GND al Arduino. El programa a cargar en el ATTiny84 es el siguiente:</div>
<div>
<script src="https://gist.github.com/juanmol/6339c229691b6600e834.js"></script></div>
<div>
eh ... lo se, no se me da muy bien, si alguien sabe como encoger el código, se lo agradeceré. Si te fijas, las patitas 13 y 12 del ATTiny84 son botones, por lo que definirlas como analógicas y después limitarlas a 2 resultados, es un poco de tontos, pero <strike>yo soy muy tonto</strike> así queda más homogéneo.<br />
Te lo explico un poco:<br />
<ul>
<li>Limitamos a 2 los valores de los botones: 1 y 2.</li>
<li>Limitamos a 9 los valores de los sticks: 1, 2, 3, 4, 5, 6, 7, 8 y 9.</li>
<li>Los enviamos todos a la vez generando un único valor, por ejemplo: 114545</li>
<li>Para que la conexión BT no se engollipe, dejamos 100ms entre envío y envío, y si no hay modificación, no hay emisión, qué listo soy ;)</li>
</ul>
<h3>
Aspecto final</h3>
</div>
<div>
Aún no lo he terminado del todo, pero básicamente voy a usar un tapper del IKEA (de los verdes chiquitines) para guardarlo todo.</div>
Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-1180468193148611581.post-8385288102374592302014-08-21T16:51:00.002+02:002014-09-25T16:48:47.112+02:00Nuevo proyecto: el Centinela Asesino<h2>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2An2Bns6T4Nnwh64O7qK2vnzY06l9sl-sGUFFJXf1hhh2y4fK2Y1sJC9hsqBz6P6BcW5cloHWXAILkktzJcFI2e_BCG3R2AOiAjwVo6X8haWSUQAHh9paFrE3CdaBnh8SifosHsuFqF0/s1600/centinelaasesino.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2An2Bns6T4Nnwh64O7qK2vnzY06l9sl-sGUFFJXf1hhh2y4fK2Y1sJC9hsqBz6P6BcW5cloHWXAILkktzJcFI2e_BCG3R2AOiAjwVo6X8haWSUQAHh9paFrE3CdaBnh8SifosHsuFqF0/s1600/centinelaasesino.png" height="195" width="200" /></a>
He vuelto!!</h2>
Buenos días, llevo un siglo sin publicar nada, no porque se me hayan acabado las ideas (sólo un poco), sino porque realmente ya había cumplido el cometido de mi Raspberry y el Quad-Raspbi-Coptero ... lo tengo en el taller.<br />
Precisamente como el Quad-Raspbi-Coptero me ha dejado muy mal cuerpo, al no tener el conocimiento para hacerlo volar decentemente. He decidido volver a los inventitos por radiocontrol y por eso os presento mi nuevo proyecto: el Centinela Asesino.<br />
<br />
<a name='more'></a>Para no darme un batacazo, como el del QRC, voy a ir muy poco a poco y reciclando basura tecnológica que tengo por casa. Será por eso que mi primera versión del Centinela Asesino (C-A), no será asesino, ni tendrá un aspecto muy profesional.<br />
Básicamente se tratará de un radiocontrol, con cerebro de RaspberryPi, que recibirá los datos "lo mas cercano al tiempo real" que me permita una conexión de datos 3G o WIFI.<br />
Además le montaré el brazo pan-tilt de <a href="http://rsppi.blogspot.com.es/2013/08/control-pwm-por-software-parte-2.html" target="_blank">este post</a>, para mover la cámara.<br />
<h3>
Desplazamiento del C-A</h3>
Para esto usaré un par de motores DC que saqué de mi antigua y difunta impresora (que el dios de las impresoras la acoja en su seno). Estos motores funcionan a 5V, aunque si no les tienes aprecio, puedes llegar a los 12V.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcEXrSAW0TKWtkOwc5yMBoyzfYSyG16okAvjKZ97sUlQJyIcxi0OXSRtcFUzCMakc7PaE9hU8eLb06HUDz16Lnq8XpYGIABtS_VHfWtSoH49Nsmcu4wROKWQMCYCJIuJuxYE0C8ICVJoA/s1600/dcmotor.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcEXrSAW0TKWtkOwc5yMBoyzfYSyG16okAvjKZ97sUlQJyIcxi0OXSRtcFUzCMakc7PaE9hU8eLb06HUDz16Lnq8XpYGIABtS_VHfWtSoH49Nsmcu4wROKWQMCYCJIuJuxYE0C8ICVJoA/s1600/dcmotor.jpg" height="239" width="320" /></a></div>
<br />
Para controlar los motores (velocidad y sentido) necesitamos un controlador, como este:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhR-5pEodb0r0GcxNa_pmDqx6oFv88HFo16SjtOZIFHvUePWK1iP8AwpK4EFNC2-FbhizBqzZdLmhZu_uP-SKA9nPf6vddeTM7ONWZ82Ea1MvRnKf1s6Bt_yRjXG1g59Zv3rIEifunEL7k/s1600/L9110.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhR-5pEodb0r0GcxNa_pmDqx6oFv88HFo16SjtOZIFHvUePWK1iP8AwpK4EFNC2-FbhizBqzZdLmhZu_uP-SKA9nPf6vddeTM7ONWZ82Ea1MvRnKf1s6Bt_yRjXG1g59Zv3rIEifunEL7k/s1600/L9110.jpg" height="320" width="320" /></a></div>
<br />
se trata de un dual-channel h-bridge, con un chip L9110, que trabaja hasta los 12V. Le pondré un par de ruedas:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyHd7fU-9zU-BezvRJhFRf7znKAV3ikxVfS9g_r-P4xwh5rDHTTtcR26gMlzKbTdSA95T8LVZRYCACMBs-LpDwtRf6ocmcKDQBFVhSobkDeF3M3CjMFZPE8akf8p1ihaaxs7vn3UEkVyE/s1600/ruedas.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyHd7fU-9zU-BezvRJhFRf7znKAV3ikxVfS9g_r-P4xwh5rDHTTtcR26gMlzKbTdSA95T8LVZRYCACMBs-LpDwtRf6ocmcKDQBFVhSobkDeF3M3CjMFZPE8akf8p1ihaaxs7vn3UEkVyE/s1600/ruedas.jpg" height="239" width="320" /></a></div>
<br />
y una rueda (o dos) loca improvisada.<br />
<h3>
FPV</h3>
Que no será en realidad FPV, será videostreaming + brazo pan-tilt de <a href="http://rsppi.blogspot.com.es/2013/08/control-pwm-por-software-parte-2.html" target="_blank">este post</a>. Aunque no descarto del todo un FPV completo.<br />
<h3>
Sistema de radiocontrol</h3>
Podría usar una emisora de RC, pero tendría que comprarla. Así que voy a usar una combinación de WIFI/3G y bluetooth, que me va a dar una velocidad de respuesta de 200ms, nada que ver con la burrada de 1s que tenía con el QRC.<br />
Usaré el WIFI de <a href="http://rsppi.blogspot.com.es/2013/04/configurando-el-mando-distancia-del.html" target="_blank">este post</a>.<br />
Usaré un ATTiny84, programado como el ATTiny85 de <a href="http://rsppi.blogspot.com.es/2013/09/sensores-inalambricos.html" target="_blank">este post</a>.<br />
Destriparé sin contemplaciones este pad usb chino-total, malísimo:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQYea9PlsLA8OsXPEZr-LOs-vQs-XiKOie5d_tff9ebyARsn_7djkKsChpMrDslEj6UPo_XBdzU3zSAkoc_tmagJdJnvG8wPZUC7gp-rRzXRlc87oa16fHxduVWEh3kPufivbuCDVMm98/s1600/usbpad.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQYea9PlsLA8OsXPEZr-LOs-vQs-XiKOie5d_tff9ebyARsn_7djkKsChpMrDslEj6UPo_XBdzU3zSAkoc_tmagJdJnvG8wPZUC7gp-rRzXRlc87oa16fHxduVWEh3kPufivbuCDVMm98/s1600/usbpad.jpg" height="212" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
y me quedaré con los joystics analógicos:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqeP-Dc8sKXeKD_nCTKcP5E5Ftx0ibhIuWIDKztZ7D3frBnzAAdvJHEwAFV3aqkG4Mfhn8ODlibwHyTHafDCcaHBTDAvEkze6qRkKDdGWHI7VDHOQ-pv34Mhybq0V64_r-3k_vJ0i9jRs/s1600/joystics.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqeP-Dc8sKXeKD_nCTKcP5E5Ftx0ibhIuWIDKztZ7D3frBnzAAdvJHEwAFV3aqkG4Mfhn8ODlibwHyTHafDCcaHBTDAvEkze6qRkKDdGWHI7VDHOQ-pv34Mhybq0V64_r-3k_vJ0i9jRs/s1600/joystics.jpg" height="240" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
(si ... un tapper del IKEA)</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
El ATTiny84 se comunicará por bluetooth con Android:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeaaBsIqWZma-HeWzCrXs1jzBe6vr0M8Z1sMfkl9wuxs6McQNxCOZ9r8qQIyfPA6pJMVlXO-bVG7dt_gCWRyLuAxWx8MF-t0azhkjtw80lAdC-iSx_rrUZkbEK6Sb4L9h2RqKNakwi3-I/s1600/bt.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeaaBsIqWZma-HeWzCrXs1jzBe6vr0M8Z1sMfkl9wuxs6McQNxCOZ9r8qQIyfPA6pJMVlXO-bVG7dt_gCWRyLuAxWx8MF-t0azhkjtw80lAdC-iSx_rrUZkbEK6Sb4L9h2RqKNakwi3-I/s1600/bt.jpg" height="271" width="320" /></a></div>
<br />
<h3>
Armamento</h3>
Por ahora, nada.<br />
<h3>
Resumen</h3>
Si has llegado desde Google y eres mu flojo, te pongo los enlaces (si no está el link es que aun no lo he publicado):<br />
<ol>
<li>Comunicación, ATTiny84 con bluetooth (<a href="http://rsppi.blogspot.com.es/2014/08/proyecto-centinela-asesino-sistema-de.html" target="_blank">link</a>).</li>
<li>App de pasarela en Android (<a href="http://rsppi.blogspot.com.es/2014/08/proyecto-centinela-asesino-app-de.html" target="_blank">link</a>).</li>
<li>Sistema de comunicaciones (<a href="http://rsppi.blogspot.com.es/2014/08/proyecto-centinela-asesino-sistema-de.html" target="_blank">link</a>).</li>
<li>Conexión Android-Raspberry (<a href="http://rsppi.blogspot.com.es/2014/09/proyecto-centinela-asesino-enviar-los.html" target="_blank">link</a>)</li>
<li>Scripts en Raspberrypi (link).</li>
<li>Resultado final (<a href="http://rsppi.blogspot.com.es/2014/09/proyecto-centinela-asesino-fin-del.html" target="_blank">link</a>).</li>
<li>Más grande (link)</li>
<li>Armamento (link)</li>
</ol>
Unknownnoreply@blogger.com6tag:blogger.com,1999:blog-1180468193148611581.post-23313287350349806272013-11-11T08:14:00.002+01:002013-11-11T08:14:47.990+01:00Comunicación inalámbrica desde RaspberryPi a ATTiny85 (con trampa)<h2>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPuhUzhDgrhBVwlNwza7Ky8hHKiXEyD9Yw6aEDRvDEGjJiq-IrQx2yFLpOeZ9PqGlTIj5IXUzx3-Q2EimhyrtimhfXsHVv21oaSFQpHf0qIB4H3vRDU8nyNF1zCOwUBhjWVJdUWi5_ghk/s1600/pi_attiny85.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPuhUzhDgrhBVwlNwza7Ky8hHKiXEyD9Yw6aEDRvDEGjJiq-IrQx2yFLpOeZ9PqGlTIj5IXUzx3-Q2EimhyrtimhfXsHVv21oaSFQpHf0qIB4H3vRDU8nyNF1zCOwUBhjWVJdUWi5_ghk/s1600/pi_attiny85.png" height="125" width="200" /></a>
... un paso más cerca de la domótica ultra-low-cost ...</h2>
Buenas tardes, en mi afanosa tarea de llegar a la domótica más barata que se pueda tener, os voy a enseñar a enviar una señal, vía radiofrecuencia, desde el RaspberryPi, hacia un microcontrolador ATTiny85 (o cualquier otro). Parto del hecho que ya dominas mis otros posts:<br />
<br />
<ul>
<li><a href="http://rsppi.blogspot.com.es/2013/08/comunicacion-por-rf-433mhz-desde.html" target="_blank">Comunicacion por RF a 433Mhz desde Arduino hasta RaspberryPi</a></li>
<li><a href="http://rsppi.blogspot.com.es/2013/09/sensores-inalambricos.html" target="_blank">Sensores inalámbricos</a></li>
<li><a href="http://rsppi.blogspot.com.es/2013/11/depurando-codigo-en-attiny85.html" target="_blank">Depurando código en ATTiny85</a></li>
</ul>
<div>
Al lío ...</div>
<div>
<a name='more'></a>Vamos a empezar con un objetivo básico: encender un led vía RF. En los siguientes posts os enseñaré a aplicar esto mismo a una instalación de luz, pero seguro que a más de uno le sirve esto que os explico ahora (hola Xesco!).</div>
<div>
La lista de la compra, la más barata:</div>
<div>
- Emisor y receptor de RF a 433 mhz</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIGzZYqrRy7rBD3S6RJlrkwX-E-kwUPr4rhNiCVRcs2j6F-x9AXkeSCcuwxasXe7OONGYrm_t-yuQlLX4DNQgFDUgw0ZNZdCbVM4NVdye-SuZgPCFCilS3SElNXd9hBGHIm6enymNlEQk/s1600/kit_433mhz.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIGzZYqrRy7rBD3S6RJlrkwX-E-kwUPr4rhNiCVRcs2j6F-x9AXkeSCcuwxasXe7OONGYrm_t-yuQlLX4DNQgFDUgw0ZNZdCbVM4NVdye-SuZgPCFCilS3SElNXd9hBGHIm6enymNlEQk/s1600/kit_433mhz.jpg" /></a></div>
<div>
<br /></div>
<div>
- Dos ATTiny85</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyJESpHy1rpM6Mc1BS4P2i654tkrwlTzdJ_lRfxIONGdJhXSw81d78yht52VfgOmuYMeNxDnnENYI0SCP-ITvG9xrqLj0h4GjcZ6if0yAXdCEM3eI8pm3s6KpcMnbJam6jOMwuLXOlC6I/s1600/attiny85.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyJESpHy1rpM6Mc1BS4P2i654tkrwlTzdJ_lRfxIONGdJhXSw81d78yht52VfgOmuYMeNxDnnENYI0SCP-ITvG9xrqLj0h4GjcZ6if0yAXdCEM3eI8pm3s6KpcMnbJam6jOMwuLXOlC6I/s1600/attiny85.png" height="200" width="167" /></a></div>
<div>
<br /></div>
<div>
- Led</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjN_R5yAc56_HVe1q-M9edtsfZAYal2P64oJIQzJlERdyCeBdN4o7LYQ7Z6dXpyNhKZ3MhT0jelUemH_ooG4sbOvl_Df1bGyRJZF9I1LrJgCwcVHk_zXyh77Mn39th4UP01q4nyYyEho5M/s1600/led_rojo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjN_R5yAc56_HVe1q-M9edtsfZAYal2P64oJIQzJlERdyCeBdN4o7LYQ7Z6dXpyNhKZ3MhT0jelUemH_ooG4sbOvl_Df1bGyRJZF9I1LrJgCwcVHk_zXyh77Mn39th4UP01q4nyYyEho5M/s1600/led_rojo.png" /></a></div>
<div>
<br /></div>
<div>
<div>
Viendo la lista te preguntarás ¿para qué dos ATTinys? Básicamente porque no he conseguido poner en marcha el emisor de RF directamente en el RaspberryPi, así que usaré otro ATTiny controlado vía serie, como emisor. Si te sientes fuerte, <a href="http://madnerd.org/Send_Radio_Message:_Raspberry_Pi_to_Attiny85" target="_blank">aquí tienes las instrucciones</a> para conectar el emisor al RaspberryPi directamente, yo no lo he conseguido.</div>
</div>
<h3>
Los circuitos</h3>
<div>
El emisor en el RaspberryPi, quedaría tal que así:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTJhqRwOj7tmvr205ZJhWNYEEkP90yGjhnA5lq7bL6zxdmtZoyM57B4zv-WSyGp-iBuUAH5Eql0BO4V2-jLZssK0w2XWdz5ZQyu7TlVrBVezhnkRlMBdEbV26GeKHSegqFLU-yDPhqU9Q/s1600/esquema_emisor_433.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTJhqRwOj7tmvr205ZJhWNYEEkP90yGjhnA5lq7bL6zxdmtZoyM57B4zv-WSyGp-iBuUAH5Eql0BO4V2-jLZssK0w2XWdz5ZQyu7TlVrBVezhnkRlMBdEbV26GeKHSegqFLU-yDPhqU9Q/s1600/esquema_emisor_433.png" height="320" width="289" /></a></div>
<div>
<br /></div>
<div>
Aunque puede asustar un poco, realmente es muy simple. Es más, si te sientes con ganas, y no tienes dos manos izquierdas con sus 10 pulgares (yo si), puedes hacerte un circuito realmente pequeño:</div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRJQmHH-PLV3-sbbQFYdpSjg0AvIGKq9YvA1-UVNxJ1qGt7hLVW6eiEn2SyhmLdWbbPpfbxZSpFIN8tKjs90vebf4oQGms3pxRk5aw03o7UFKZEmE2J-FgyNFzeEn0edFVIt5s-Y2Qe_A/s1600/circuito_emisor_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRJQmHH-PLV3-sbbQFYdpSjg0AvIGKq9YvA1-UVNxJ1qGt7hLVW6eiEn2SyhmLdWbbPpfbxZSpFIN8tKjs90vebf4oQGms3pxRk5aw03o7UFKZEmE2J-FgyNFzeEn0edFVIt5s-Y2Qe_A/s1600/circuito_emisor_1.png" height="156" width="200" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjH9ctR9o0e2_OPq-0RTPU-7uR_VNicT1uoQFexN5EpIBnAi9cMglHY9sKiaL6w4uOJ2fStWg6lKbhXvEhyphenhyphentssZ5nLgnS9bkWDuTL9T3cAg7ptliKFORVNKY4xAna0JgY5PvbWlUvKk67A/s1600/circuito_emisor_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjH9ctR9o0e2_OPq-0RTPU-7uR_VNicT1uoQFexN5EpIBnAi9cMglHY9sKiaL6w4uOJ2fStWg6lKbhXvEhyphenhyphentssZ5nLgnS9bkWDuTL9T3cAg7ptliKFORVNKY4xAna0JgY5PvbWlUvKk67A/s1600/circuito_emisor_2.png" height="190" width="200" /></a></div>
<br /></div>
<div>
La parte receptora queda así:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZid3WVztEF8q1rbEO97HlXVvmbNseXbPdZ7esBLOoF_vq-X7WkfgrtouNkLVljBgtbZJxfAk9WqIqHw3ai-_PimNp9IfRagROx_fVblQ-1r9HHhEF8D8nUf93P2FOW95OQb0WRmfpi4g/s1600/circuito_receptor_433.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZid3WVztEF8q1rbEO97HlXVvmbNseXbPdZ7esBLOoF_vq-X7WkfgrtouNkLVljBgtbZJxfAk9WqIqHw3ai-_PimNp9IfRagROx_fVblQ-1r9HHhEF8D8nUf93P2FOW95OQb0WRmfpi4g/s1600/circuito_receptor_433.png" height="171" width="320" /></a></div>
<div>
<br /></div>
<div>
Este es algo más simple. No pongo el circuito para programar el ATTiny85, porque ya lo tienes <a href="http://rsppi.blogspot.com.es/2013/09/sensores-inalambricos.html" target="_blank">aquí</a>.</div>
<h3>
Los programas</h3>
<div>
Empecemos a teclear un poco. Este código va en el ATTiny85 EMISOR:</div>
<div>
<script src="https://gist.github.com/juanmol/7402085.js"></script></div>
<div>
Cómo muy bien puedes ver, usa las librerías TinyWireS y Manchester, descárgalas desde estos enlaces:</div>
<div>
<ul>
<li>Original <a href="http://playground.arduino.cc/Code/USIi2c" target="_blank">TinyWireS </a>- <a href="https://www.dropbox.com/s/dcm7xl5hfry0q4q/TinyWireS.zip" target="_blank">Mirror</a>.</li>
<li>Original Manchester - <a href="https://www.dropbox.com/s/71n1x4dw4ose3pm/Manchester.zip" target="_blank">Mirror</a>.</li>
</ul>
<div>
La idea del EMISOR es que nuestro RaspberryPi le dirá vía I2C algo, y este lo transmitirá por RF.</div>
</div>
<div>
<br /></div>
<div>
El siguiente código va en el ATTiny85 RECEPTOR:</div>
<div>
<script src="https://gist.github.com/juanmol/7402264.js"></script></div>
<div>
Volvemos a usar Manchester y como debug (no necesario), usamos TinyDebugSerial, que <a href="http://rsppi.blogspot.com.es/2013/11/depurando-codigo-en-attiny85.html" target="_blank">ya la tenías</a>. En el código de este ATTiny85, le hemos indicado con la variable <b>yosoy</b>, que sólo responda a las peticiones RF que lleguen con código <b>100</b>. Si recibe:</div>
<div>
<ul>
<li>100 10 - se enciende</li>
<li>100 11 - se apaga</li>
<li>100 12 - parpadea</li>
</ul>
<div>
Ahora sólo nos queda el script en python, que hablará vía I2C con el ATTIny85 EMISOR, /usr/local/bin/I2C.py:</div>
</div>
<div>
<script src="https://gist.github.com/juanmol/7409095.js"></script><br />
Seguramente tendrás que hacerle alguna modificación. Cuando lo tengas todo enchufado, tienes que localizar el bus al que le ha asignado la dirección. Para ello ejecuta:<br />
<pre class="brush: bash">i2cdetect -y 0
i2cdetect -y 1</pre>
el bus que buscamos es el que tenga una dirección, el que sólo tiene -- no nos sirve. Ese valor es el que va en la variable bus, del script en python.<br />
Para usarlo:<br />
<pre class="brush: bash">python /usr/local/bin/I2C.py 100 10
python /usr/local/bin/I2C.py 100 11
python /usr/local/bin/I2C.py 100 12
<pre></pre>
</pre>
</div>
<div>
Y esto es todo, que no es poco. Hemos conseguido emitir desde el RaspberryPi e interactuar con un led por RF. Si es que somos unos cráses.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhI7QTSj_DwVtfzHfPT18rQiDRL5jY3jJvN6iM-V8-tXXnxKp61KUI7fz96cx5bS1cGRPIpnM8duMyi_jiQbhjs0jBBAJGrflNFo5NHN1kAHVBcgFgC2_Lp3HIp6dlkS-zdeRkMFKqa6BM/s1600/tumblr_m46g6gKn311qeii60o1_400.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhI7QTSj_DwVtfzHfPT18rQiDRL5jY3jJvN6iM-V8-tXXnxKp61KUI7fz96cx5bS1cGRPIpnM8duMyi_jiQbhjs0jBBAJGrflNFo5NHN1kAHVBcgFgC2_Lp3HIp6dlkS-zdeRkMFKqa6BM/s1600/tumblr_m46g6gKn311qeii60o1_400.gif" height="143" width="320" /></a></div>
<br /></div>
Unknownnoreply@blogger.com17tag:blogger.com,1999:blog-1180468193148611581.post-43433994209452746782013-11-08T20:39:00.000+01:002013-11-15T13:12:01.726+01:00Depurando codigo en ATTiny85<h2>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDKorKCtjrXk386iZT2s4N5h07SaAlY4pmWs1UpShmSBWYTnmEzzZQ1JzdHpzW3Q2AKbLf4hxMioqMOAgd4ZbiKxhCiOfBBhyphenhyphenLSyFxYzw953I4j4XhT2J2syIk7MPVsbOP0Jx4xS501TM/s1600/attiny85.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDKorKCtjrXk386iZT2s4N5h07SaAlY4pmWs1UpShmSBWYTnmEzzZQ1JzdHpzW3Q2AKbLf4hxMioqMOAgd4ZbiKxhCiOfBBhyphenhyphenLSyFxYzw953I4j4XhT2J2syIk7MPVsbOP0Jx4xS501TM/s1600/attiny85.png" height="200" width="167" /></a>
primer y ultimo post sin RaspberryPi ...</h2>
Buenas tardes, antes de seguir con los sensores inalámbricos necesitamos poder depurar código en los ATTiny. En este post no hablaré de RaspberryPi, pero de verdad que necesitamos esto antes de seguir con los sensores y con "lo otro" que estoy probando". Al lío.<br />
<br />
<a name='more'></a>En realidad es algo muy fácil, nos aseguramos de tener las últimas librerías de <a href="https://code.google.com/p/arduino-tiny/" target="_blank">arduino-tiny</a>. Ahora cargamos el siguiente código en uno de nuestros 21 ATTiny:<br />
<pre class="brush: bash">#include <TinyDebugSerial.h>
TinyDebugSerial mySerial = TinyDebugSerial();
void setup()
{
mySerial.begin( 9600 );
}
void loop() {
mySerial.println("Hola mundo ... OLA K ASE?!!");
delay(1000);
}
</pre>
Como te has dado cuenta, no elegimos en que pin vamos a tener el serie, ya que viene a piñón en la librería y modificarlo es cosa ... de gente que tiene mucho tiempo ;) Cableamos tal que así:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhR6lvIhXbl0G6AzTP2-LOjzgf0FbBgDLLFED_c3Qhw_iXDSiOvUkvnU-sMKiHImGujFke1jM9a3GtOAFPqsGsWIMNCksZyAVu0OoNLluBJ0J1o3AyD1P30E34BsutL-CKRof0SEimo_Ig/s1600/tinydebug_bb.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhR6lvIhXbl0G6AzTP2-LOjzgf0FbBgDLLFED_c3Qhw_iXDSiOvUkvnU-sMKiHImGujFke1jM9a3GtOAFPqsGsWIMNCksZyAVu0OoNLluBJ0J1o3AyD1P30E34BsutL-CKRof0SEimo_Ig/s1600/tinydebug_bb.png" height="230" width="320" /></a></div>
Ponle cualquier resistencia (no la más gorda que tengas). Ahora vuelve al IDE de Arduino, dale a lo de Herramientas - Monitor Serial y ... OLA K ASE?!!<br />
¿a qué es fácil? Pues esta chorrada me ha llevado una semana ¬¬ El caso es que ahora tenemos una consola serie donde ver los datos que recibimos de los sensores o de cualquier otra cosa.Unknownnoreply@blogger.com6tag:blogger.com,1999:blog-1180468193148611581.post-49842915003064855502013-09-18T12:29:00.001+02:002013-09-18T12:29:12.396+02:00Sensores inalambricos: sensor de palmadas<h3>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimgUzM1M5C0EFiGRQZWx4x51G8pYuihT_5Qr3SmL3CHNpiPEQIFf7VfX0piUlf3fCDpkpht8W7NAiRqC88Onzkat5CSn0M6SnsApJS0tvz19xSr01SRL76GFcRGLLA-QWHahoGMNhZ9Ds/s1600/pi-palmada.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimgUzM1M5C0EFiGRQZWx4x51G8pYuihT_5Qr3SmL3CHNpiPEQIFf7VfX0piUlf3fCDpkpht8W7NAiRqC88Onzkat5CSn0M6SnsApJS0tvz19xSr01SRL76GFcRGLLA-QWHahoGMNhZ9Ds/s1600/pi-palmada.png" height="136" width="200" /></a>
... para apagar las luces a lo Hollywood ...</h3>
Buenas tardes, el primero de los sensores que os voy a enseñar, es el de palmadas. Podría haber empezado con el de temperatura, pero eso lo puede hacer cualquiera. Este post va a ser un poco más largo que para el resto de sensores, por aquello de ser el primero y esas cosas, así que vamos al lío.<br />
<br />
<a name='more'></a><h3>
La lista de la compra</h3>
Para el sensor de palmadas necesitaremos:<br />
<ul>
<li>ATtiny85</li>
<li>Emisor de 433 mhz</li>
<li>Protoboard, de las chiquititas</li>
<li>Cable</li>
<li>Portapilas y pilas (o una batería)</li>
<li>Jack hembra 3.5 de audio</li>
<li>Micrófono homnidireccional</li>
<li>Resistencia de 1KΩ</li>
</ul>
<div>
Ahora mismo no tengo resistencias de 1KΩ, así que usare una de 100KΩ, por lo que mis valores son algo bajos.</div>
<h3>
Primeras pruebas</h3>
<div>
El circuito que tenemos que fabricar puede ser pequeño o tremendamente pequeño, por lo que podemos esconder los sensores donde queramos. De hecho estos son un par de mis primeros prototipos:</div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAzEC3kJH9h0UoLiWVADQhvcUv5LeGTqjqMXeEkQNGXwv3LVhCVnJxYcAUz0gJONv2ce7YMf985130ZD7xrgKRzYDACxK-I3yBMAOeVvbX-UngaYRy2mYk8NJ9DQqbr1BAHuEJAyO4A-4/s1600/prototipo1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAzEC3kJH9h0UoLiWVADQhvcUv5LeGTqjqMXeEkQNGXwv3LVhCVnJxYcAUz0gJONv2ce7YMf985130ZD7xrgKRzYDACxK-I3yBMAOeVvbX-UngaYRy2mYk8NJ9DQqbr1BAHuEJAyO4A-4/s1600/prototipo1.png" height="195" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPkGriPWiAHi-sodlpzuWSe08BUn1Er2jdnx8eI2XGTEWFclBWcANnClh7gykgL0FThXvZvbZsx3K6X5dLSTh90vo5eBIKrFLb7F6Fyn9IQ_nBo7uMO_8P0q0qznb35xkPVM9zERZJ6Lw/s1600/prototipo2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPkGriPWiAHi-sodlpzuWSe08BUn1Er2jdnx8eI2XGTEWFclBWcANnClh7gykgL0FThXvZvbZsx3K6X5dLSTh90vo5eBIKrFLb7F6Fyn9IQ_nBo7uMO_8P0q0qznb35xkPVM9zERZJ6Lw/s1600/prototipo2.png" height="146" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFKTEsSzXkBR3asvdyAfz9KvpLt-b74XYTly6AF5u1qfJzCa72mWX7Kx0bCYPb2f7Skp4Knod_Z-WvWh6klDhKgIYERkaywqIF7cIWZUOwn4su69l82VauPRU-6JHiaBQmPqtsuc7zDFY/s1600/prototipo3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFKTEsSzXkBR3asvdyAfz9KvpLt-b74XYTly6AF5u1qfJzCa72mWX7Kx0bCYPb2f7Skp4Knod_Z-WvWh6klDhKgIYERkaywqIF7cIWZUOwn4su69l82VauPRU-6JHiaBQmPqtsuc7zDFY/s1600/prototipo3.png" height="151" width="320" /></a></div>
<br /></div>
<div>
como veis la idea es usar un socket dip de 16 pines, para aprovechar los sockets sobrantes. El conexionado lo hacemos en la placa que lo sostiene, con lo que el circuito es diminuto y ... muy elegante. Si a eso le añadimos una pila de botón, te queda un circuito autónomo la mar de cachondo. ¿Cuál es el problema? que la pila de botón te va a dar una autonomía de algunos meses, y yo soy demasiado flojo para ir cambiando las pilas. Así que haciendo cálculos, para cambiar las pilas cada año y medio o casi dos años, voy a usar 4 pilas AA, de las del mando a distancia de la tele, con su portapilas:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKa2y8fgGaz-WyLsUk1cNM29gZ_tfqsxmWTj_rm04gXCMw_vhyG6jQJITzGQwXnoq9K9swxfLfua6Kgp4SCLPfW4QKG1S2wRVoT8vx82T0PEBqCg5dEX31aeggna_GmwegjcmD4qLZBQQ/s1600/prototipo4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKa2y8fgGaz-WyLsUk1cNM29gZ_tfqsxmWTj_rm04gXCMw_vhyG6jQJITzGQwXnoq9K9swxfLfua6Kgp4SCLPfW4QKG1S2wRVoT8vx82T0PEBqCg5dEX31aeggna_GmwegjcmD4qLZBQQ/s1600/prototipo4.png" height="232" width="320" /></a></div>
<br />
con lo que como veis, es un poco absurdo esforzarte en hacer un circuito tan pequeño, cuando el tamaño real te lo da el portapilas (o bateria). Así que (aunque no le guste al Borreguero) voy a usar la mini protoboard, como soporte de los componentes.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_hBTCeMH42_R2KL8y2f2r2dCSeLuGWA82AWDgStwEgK3jr2ltBm5Db42czrq31w7DEwSnEKv2iZfVanbi8ox8Xp-tTHMYzE0WGC_6TR-XueKcfL9YPh-Ebef7kMiHSksNSlrd8Mh4yDc/s1600/mini-protoboard.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_hBTCeMH42_R2KL8y2f2r2dCSeLuGWA82AWDgStwEgK3jr2ltBm5Db42czrq31w7DEwSnEKv2iZfVanbi8ox8Xp-tTHMYzE0WGC_6TR-XueKcfL9YPh-Ebef7kMiHSksNSlrd8Mh4yDc/s1600/mini-protoboard.png" height="257" width="320" /></a></div>
<br />
Así además me ahorro soldar, que como veis no se me da muy bien. Son muy baratas y fáciles de encontrar.<br />
<h3>
Montando el circuito</h3>
El esquema del detector de palmadas es el siguiente:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6pzql6Eup-DGx6OskidKHbINcwC-oG33r_5nNG7j-mPx-NsOaocQF4OwpO_YIgV5lyfJyxBms50E5eG-W6kXrtugsdiT4SC6Z74AfalAgn3naX8RDupk27ia-tkZnJOaW6zEpYFRQ-qQ/s1600/sensorpalmadas_bb.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6pzql6Eup-DGx6OskidKHbINcwC-oG33r_5nNG7j-mPx-NsOaocQF4OwpO_YIgV5lyfJyxBms50E5eG-W6kXrtugsdiT4SC6Z74AfalAgn3naX8RDupk27ia-tkZnJOaW6zEpYFRQ-qQ/s1600/sensorpalmadas_bb.png" height="200" width="320" /></a></div>
Si os fijáis detenidamente, veréis que la patita de alimentación del emisor rf, no esta conectada a la tensión de entrada, ya que de ser así estaría continuamente consumiendo la batería y realmente sólo queremos usarlo cuando detecte las dos palmadas. Por eso lo conectamos a una de las patitas del ATtiny85 que nos quedan libres y mediante el código le daremos tensión cuando lo necesitemos, a que soy listo ¿eh? ;)<br />
<h3>
Explicación, almacenamiento de datos y demás cosas aburridas</h3>
Vamos a dejar de divertirnos un rato y vamos a pensar. La librería que estamos usando para la transmisión de rf, sólo envía números de hasta 32 bits. Cuando tengamos 100 sensores de todo tipo repartidos por la casa, nos gustará tener un histórico y poder diferenciar qué dato pertenece a qué sensor. Es por esto que vamos a usar un tipo de codificación de alto nivel llamada JASM (Juanmol se la Acaba de Sacar de la Manga), de forma que los datos se enviarán de la siguiente forma:<br />
<div style="text-align: center;">
<b><span style="font-size: x-large;">1XXYYYZZZZ</span></b></div>
1XX - código identificador único del sensor<br />
YYY - es un valor para identificar el envío y hacerlo único (ahora te explico esto).<br />
ZZZZ - valor a medir<br />
<br />
En este caso, mi sensor es el número 114 y va a recibir valores entre 1 y 1023, que son las escalas analógicas que es capaz de medir el ATtiny85.<br />
Después de hacer unos dos millones de pruebas, he visto que los módulos de 433 mhz, son tela de perros, además de que la banda tiene mucho ruido. Es por eso por lo que el mismo dato lo recibía hasta 3 veces consecutivas por error. Así que pensando un poco, se me ocurrió que podría identificar numéricamente cada envío y descartar aquellos ya se hayan recibido, a que soy listo ¿eh? ;)<br />
<h3>
Preparando la base de datos y el script</h3>
Voy a almacenarlo todo en una base de datos MySQL. Usaré dos tablas, una para registrar los sensores con su descripción y otra donde irán todos los datos. Aquí tienes <a href="https://www.dropbox.com/s/yjk3nic674if4vj/rf.sql" target="_blank">el archivo SQL</a>, para usarlo:<br />
<pre class="brush: bash">apt-get install mysql-server apache2 phpmyadmin
wget https://www.dropbox.com/s/yjk3nic674if4vj/rf.sql -O /tmp/rf.sql
mysql -u root -p < /tmp/rf.sql
</pre>
Ahora necesitamos que alguien meta ahí los datos, así que nos vamos a <a href="http://rsppi.blogspot.com.es/2013/08/comunicacion-por-rf-433mhz-desde.html" target="_blank">este post</a> y en la parte de "En RaspberryPi" modificamos el archivo rfreceive.cpp para que ejecute un script cada vez que recibe algo por rf. Lo dejamos así --> <a href="http://pastebin.com/2LM0PXbx" target="_blank">enlace a pastebin</a>. Y recompilamos con las instrucciones del post.<br />
<br />
Y ya sólo nos queda el script que se ejecuta cada vez que se recibe algo, que lo he llamado /usr/local/bin/recibe_rf.sh --> <a href="http://pastebin.com/rvfJQ3mh" target="_blank">enlace a pastebin</a>.<br />
Si te fijas, hago uso del demonio X10 que creé en este <a href="http://rsppi.blogspot.com.es/2013/05/control-domotico-con-android.html" target="_blank">otro post</a>.<br />
Ahora mismo el script es bastante escueto, he dejado sólo parte del sensor de palmadas, que por cierto hay que rellenar los datos en la tabla de sensores:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmyC2o65A3rFOOJZ6LB94pbCHP0ZLIbQCfPYNsR9iqX2g_yYv5ffR0KEy3junfvadeHJKCldSVdvUXQ7_BlL8Eq1sualCQcnw4G80337ZJy8dGVLY1rvv1agfz6Hvd1Lvzo8rMvABogm0/s1600/registro.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmyC2o65A3rFOOJZ6LB94pbCHP0ZLIbQCfPYNsR9iqX2g_yYv5ffR0KEy3junfvadeHJKCldSVdvUXQ7_BlL8Eq1sualCQcnw4G80337ZJy8dGVLY1rvv1agfz6Hvd1Lvzo8rMvABogm0/s1600/registro.png" height="320" width="269" /></a></div>
<h3>
Cargando el código en el ATTiny85</h3>
Volvemos a lo divertido. Usando el Arduino Uno como ISP, como ya he explicado en <a href="http://rsppi.blogspot.com.es/2013/09/sensores-inalambricos.html" target="_blank">este post</a>, cargamos este programa en el ATTiny85:<br />
<pre>#include <<span style="color: #cc6600;">RCSwitch</span>.h>
<span style="color: #cc6600;">RCSwitch</span> mySwitch = <span style="color: #cc6600;">RCSwitch</span>();
<span style="color: #cc6600;">int</span> vol = 0;
<span style="color: #cc6600;">int</span> volPin = 2;
<span style="color: #cc6600;">int</span> powerPin = 0;
<span style="color: #cc6600;">long</span> envio = 0;
<span style="color: #cc6600;">long</span> code = 114;
<span style="color: #cc6600;">long</span> contador = 0;
<span style="color: #cc6600;">int</span> vol2= 10;
<span style="color: #cc6600;">void</span> <span style="color: #cc6600;"><b>setup</b></span>() {
mySwitch.enableTransmit(1);
code = code * 10000000;
<span style="color: #cc6600;">pinMode</span>(powerPin, <span style="color: #006699;">OUTPUT</span>);
}
<span style="color: #cc6600;">void</span> <span style="color: #cc6600;"><b>loop</b></span>() {
<span style="color: #cc6600;">for</span> (<span style="color: #cc6600;">int</span> i=0; i <=9; i++){
contador = i * 10000;
vol = <span style="color: #cc6600;">analogRead</span>(volPin);
<span style="color: #cc6600;">if</span> (vol < 8){
<span style="color: #cc6600;">delay</span>(100);
<span style="color: #cc6600;">for</span> (<span style="color: #cc6600;">int</span> n=0; n <=10000; n++){
vol2 = <span style="color: #cc6600;">analogRead</span>(volPin);
<span style="color: #cc6600;">if</span> (vol2 < 9){
<span style="color: #cc6600;">digitalWrite</span>(powerPin, <span style="color: #006699;">HIGH</span>);
envio = code + contador + 1;
mySwitch.<span style="color: #cc6600;">send</span>(envio, 32);
<span style="color: #cc6600;">digitalWrite</span>(powerPin, <span style="color: #006699;">LOW</span>);
n = 9999;
}
}
<span style="color: #cc6600;">delay</span>(1000);
}
}
}
</pre>
¡¡OJO!! esta es la primera versión, no exenta de fallos. Por ejemplo le falta un calibración previa del ruido de la habitación, que ya tengo casi preparada. Los valores de <span style="color: #cc6600;">if</span> (vol < 8) y <span style="color: #cc6600;">if</span> (vol2 < 9) corresponden a los niveles que he registrado haciendo pruebas, con mi micrófono de chichinabo y la resistencia de 100KΩ, es un valor muy bajo, lo suyo seria recibir un valor entorno a 500.</div>
<h3>
Conclusiones finales</h3>
<div>
Este es el primer sensor, es un post largo y aburrido porque tenia que explicar paso a paso todo, desde la creación de la base de datos, modificar el código en C para que ejecute el script. Soy consciente de que este post es un muermo, los siguientes sensores serán post más cortitos y entretenidos, lo prometo.</div>
<pre>Y aquí el vídeo con el resultado (tanto curro para esto):</pre>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/Xm6G2STFvMM?feature=player_embedded' frameborder='0'></iframe></div>
<pre>
</pre>
Unknownnoreply@blogger.com33tag:blogger.com,1999:blog-1180468193148611581.post-11442082653784393662013-09-16T13:46:00.001+02:002013-10-25T08:11:48.589+02:00Sensores inalambricos<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcvPETQmDTEBfO4EdsxoMie5vGyz5FoV0YgXdu2GOf6HikrCil4MuXpUGVCJscRkoSZRbc0TtprdCD8YshjawpA8q-fcBG3D4mhffwMnMdoS1llAuAFhZAAA9GMRp6TJEByQAeSaNnG7Q/s1600/pi_attiny85.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcvPETQmDTEBfO4EdsxoMie5vGyz5FoV0YgXdu2GOf6HikrCil4MuXpUGVCJscRkoSZRbc0TtprdCD8YshjawpA8q-fcBG3D4mhffwMnMdoS1llAuAFhZAAA9GMRp6TJEByQAeSaNnG7Q/s1600/pi_attiny85.png" height="125" width="200" /></a>Hola gente, este es el primero de una serie de post que van a tratar sobre la comunicación inalámbrica. La idea es tener sensores de todo tipo por la casa, para activar la alarma, medir temperatura y humedad, apagar la luz dando dos palmadas...<br />
Para la comunicación inalámbrica, usaremos los módulos de 433 mhz de <a href="http://rsppi.blogspot.com.es/2013/08/comunicacion-por-rf-433mhz-desde.html" target="_blank">este post</a>, ya que van muy bien y son los mas baratos. El mejor microcontrolador para que active los eventos, ademas del mas barato y que menos consume, es el ATtiny85. Os voy a enseñar como programarlo.<br />
<a name='more'></a>Podríamos usar un Arduino en la parte del sensor, pero nos sobra capacidad y consume mas. El attiny85 puede ser programado con un programador con su código independiente, o bien usar el entorno de desarrollo de Arduino, que nos sienta un poco mejor. He condensado varios post sobre el tema y estas son mis instrucciones. Necesitas las librerias RF 433Mhz de <a href="http://rsppi.blogspot.com.es/2013/08/comunicacion-por-rf-433mhz-desde.html" target="_blank">este post</a>, y también las librerías de las nuevas ATtiny para Arduino, <a href="https://www.dropbox.com/s/039zq2bhy8cxt7i/RCswitch%20%28attiny85%29.zip" target="_blank">en este enlace.</a><br />
<h3>
Cargando el isp en Arduino Uno</h3>
Esta es la parte mas fácil, simplemente conectamos nuestro Arduino (yo usare Arduino Uno) al pc, no le conectamos absolutamente nada y cargamos el programador, el isp:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQlk1x2OUU0U5nc7n_CRmj0GqEO6ATa_5ZtvhnZf1ac2BEur95zfgXU23UBgNP31dQse2IoRHI9hZnOqAMuT8yXYoBuyMKRwkh6YhMV2FKZd2zt20WdQTC3U88n51vduMmId-9t4-LPjM/s1600/carga_isp.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQlk1x2OUU0U5nc7n_CRmj0GqEO6ATa_5ZtvhnZf1ac2BEur95zfgXU23UBgNP31dQse2IoRHI9hZnOqAMuT8yXYoBuyMKRwkh6YhMV2FKZd2zt20WdQTC3U88n51vduMmId-9t4-LPjM/s1600/carga_isp.png" height="320" width="227" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-riqKxWOZXvXK-HxObYTFamQTVIImnQwpU_CSosOLHs3T7cYBs8BAvNwsFlIDAlkG0H6G3nuwvdsWmymQG3uh8N1peayVm_826khb-PYxm0bXdlDAQHp2ZdIpm7NyTgDDU9c7PzOC0S0/s1600/carga_isp_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-riqKxWOZXvXK-HxObYTFamQTVIImnQwpU_CSosOLHs3T7cYBs8BAvNwsFlIDAlkG0H6G3nuwvdsWmymQG3uh8N1peayVm_826khb-PYxm0bXdlDAQHp2ZdIpm7NyTgDDU9c7PzOC0S0/s1600/carga_isp_2.png" height="309" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQ5jULmfh9PRNFrimSabpVjQf9ry8SmwGoiyg7DpN-Uzrfj0-lYHBjXpYxRe4GHXHolxZGdB5heVkwLPBhXX03MTqwx0LG45pWOYNc4a175Ao7RV0bAK9ocnO0qEHvdZIOqqeEHuOT0VY/s1600/carga_isp_3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQ5jULmfh9PRNFrimSabpVjQf9ry8SmwGoiyg7DpN-Uzrfj0-lYHBjXpYxRe4GHXHolxZGdB5heVkwLPBhXX03MTqwx0LG45pWOYNc4a175Ao7RV0bAK9ocnO0qEHvdZIOqqeEHuOT0VY/s1600/carga_isp_3.png" height="320" width="268" /></a></div>
<br />
<h3>
Conectar el attiny85 al Arduino</h3>
Este paso tampoco es difícil, pero es de vital importancia que no te saltes ningún paso (cable), yo me suelo olvidar de algún cable y ya me he cargado un attiny85. Este es el ATtiny85 con las conexiones:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEju7Vqb7tGgZfOkf5e6km5Jf1Jq8VMJMo51VDlmDrtRvDoy8F9PRx5Qp0jN0u5_hNsIpnhwylZoSmUIOmAKaoY-NONUUagDKCUBxNsAycNAAwv6-4rRYOti4HkQKwlctp-kAyzqGOUI9q0/s1600/arduino_isp_attiny85_bb.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEju7Vqb7tGgZfOkf5e6km5Jf1Jq8VMJMo51VDlmDrtRvDoy8F9PRx5Qp0jN0u5_hNsIpnhwylZoSmUIOmAKaoY-NONUUagDKCUBxNsAycNAAwv6-4rRYOti4HkQKwlctp-kAyzqGOUI9q0/s1600/arduino_isp_attiny85_bb.png" height="320" width="226" /></a></div>
Aquí os enseño que nos hace falta un condensador de unos 10 uF, que sólo es necesario si usamos un Arduino Uno, si usas otro Arduino no es necesario.<br />
<h3>
Cargando un programa de ejemplo</h3>
Para estar seguro de que funciona, vamos a cargar el programa de ejemplo blink en el attiny85. Primero nos fijamos en el patillaje del ATiny85:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://blog.protoneer.co.nz/wp-content/uploads/2013/05/attiny_44_84_Pinout.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://blog.protoneer.co.nz/wp-content/uploads/2013/05/attiny_44_84_Pinout.png" height="226" width="320" /></a></div>
<br />
Vamos a usar el pin 1 con numeración Arduino, que viene a ser el 6 en el ATtiny85 y el GND para conectar el led. Cargamos el programa:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgL96bog8o1rXjrmUne8YubRtbNCuN6gMEqAMM5-AqyMFstysM2kZYQ2RL39VoiIMB0RJnIY1iLuNw4bCrl1sbi3zYa3abAJ8JsT2JRoZTMHokopjbrkbY8rxCE9p2m1PtTHwSDYQkKXss/s1600/carga_blink-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgL96bog8o1rXjrmUne8YubRtbNCuN6gMEqAMM5-AqyMFstysM2kZYQ2RL39VoiIMB0RJnIY1iLuNw4bCrl1sbi3zYa3abAJ8JsT2JRoZTMHokopjbrkbY8rxCE9p2m1PtTHwSDYQkKXss/s1600/carga_blink-1.png" height="320" width="258" /></a></div>
En el ejemplo, usa el pin 13, simplemente cambia este número a 1, no te olvides de esto. Ahora configuramos el entorno de Arduino para usar el Arduino Uno como programador del ATiny85:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWw5aPLZ2cYfU_RF3xGsUniqO9cX0ztSpGxHpcPKHV7A2CanEZIsz2TSiORzqpvw0eaO0-WFNGYiXWsU5dF6rrJtvyw-lNFSIkFYvaa7jwY2I1FrvlY5e2YlmeiQB6D0NXBdfGGqqYbkg/s1600/carga_isp_4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWw5aPLZ2cYfU_RF3xGsUniqO9cX0ztSpGxHpcPKHV7A2CanEZIsz2TSiORzqpvw0eaO0-WFNGYiXWsU5dF6rrJtvyw-lNFSIkFYvaa7jwY2I1FrvlY5e2YlmeiQB6D0NXBdfGGqqYbkg/s1600/carga_isp_4.png" height="306" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxaKd1NikBE0GmHNyO2DFEP8uyVVpBxdza5q8Ch5YeWPWYCMQBpcKhnM7-T82xBgc55XHKLrdAJ0I3D8T3qlnGgce5w2-ehVsFQasKGoGcIubgMCUbGvCbdYjLnAEiJY8-zHg6wi9qiqw/s1600/carga_isp_5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxaKd1NikBE0GmHNyO2DFEP8uyVVpBxdza5q8Ch5YeWPWYCMQBpcKhnM7-T82xBgc55XHKLrdAJ0I3D8T3qlnGgce5w2-ehVsFQasKGoGcIubgMCUbGvCbdYjLnAEiJY8-zHg6wi9qiqw/s1600/carga_isp_5.png" height="320" width="254" /></a></div>
<br />
Y le damos sin miedo a cargar. Salen un par de advertencias, pero las ignoramos porque nos gusta vivir al límite. Ahora solo necesitamos alimentar el attiny85, podemos usar pilas:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVv5XDLzWkKpSRgdqk3jRCb-LpkqBxGOK9okRgwzFi0xxK1KaN7BuTWqfxTJtmpcwgPOZPC6WDb0DFFK6qiYMTsXpAr665kAP1mUBZujQ1BdJ-BG9g4g5-CNX_NaMndfnYL8oDIsN974w/s1600/blink_a_pilas.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVv5XDLzWkKpSRgdqk3jRCb-LpkqBxGOK9okRgwzFi0xxK1KaN7BuTWqfxTJtmpcwgPOZPC6WDb0DFFK6qiYMTsXpAr665kAP1mUBZujQ1BdJ-BG9g4g5-CNX_NaMndfnYL8oDIsN974w/s1600/blink_a_pilas.png" height="110" width="320" /></a></div>
o el propio Arduino:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBYtbGDykA1CrnYZwPJav6NQvYsfTk5QBnAkwBKXeTygBdn498aZF_8SeX77bD_upvOMzEPP2oTtSzhxfufpp2KJvjYNsqJN6mvL8PCH5dZdr2Lk50BbIjJJUwxc9DyD7l1Vy_-OqqAqg/s1600/blink_a_arduino.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBYtbGDykA1CrnYZwPJav6NQvYsfTk5QBnAkwBKXeTygBdn498aZF_8SeX77bD_upvOMzEPP2oTtSzhxfufpp2KJvjYNsqJN6mvL8PCH5dZdr2Lk50BbIjJJUwxc9DyD7l1Vy_-OqqAqg/s1600/blink_a_arduino.png" height="146" width="320" /></a></div>
Si has llegado hasta aquí, lo siguiente no te costara mucho ;)<br />
<h3>
Envío de una señal de ejemplo hasta el RaspberryPi</h3>
Como se trata de enviar señales inalámbricas, necesitamos que nuestros ATtiny85 tengan capacidad inalámbrica. Lo primero es cargar el programa en el ATtiny85:<br />
<pre>#include <<span style="color: #cc6600;">RCSwitch</span>.h>
<span style="color: #cc6600;">RCSwitch</span> mySwitch = <span style="color: #cc6600;">RCSwitch</span>();
<span style="color: #cc6600;">void</span> <span style="color: #cc6600;"><b>setup</b></span>() {
mySwitch.enableTransmit(1);
}
<span style="color: #cc6600;">void</span> <span style="color: #cc6600;"><b>loop</b></span>() {
mySwitch.<span style="color: #cc6600;">send</span>(123456, 32);
<span style="color: #cc6600;">delay</span>(1000);
}
</pre>
La librería que usamos para la transmisión inalámbrica, necesita que el attiny85 trabaje a 8Mhz, así que una vez conectado al Arduino, le damos a:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2ddzdu1TuiQAOqaeB1f9ZI4eou8awFT1-txUyDfN458FPGAd-oqIFXPdqH-2jtAC-maSFWpJKW6zNHmQRhbT334dRZM6B4bFzZOvl2yqXjmvDs3tK61itdDjgDSMaTV_sVIFsOdTrxgY/s1600/carga_test_rf-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2ddzdu1TuiQAOqaeB1f9ZI4eou8awFT1-txUyDfN458FPGAd-oqIFXPdqH-2jtAC-maSFWpJKW6zNHmQRhbT334dRZM6B4bFzZOvl2yqXjmvDs3tK61itdDjgDSMaTV_sVIFsOdTrxgY/s1600/carga_test_rf-1.png" height="320" width="267" /></a></div>
<br />
Ahora desconectamos el Arduino del ATtiny85 y conectamos el emisor inalámbrico:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoSJcaHDZcfeiIgHl_4gjHPcDJ7tjDQQ7mRaynLW5gxhNRdyGyWtH3rKKEDrzH4Fz44bprf0n5UZxcnrh4MlhtGgcyhZgC2zxXXPSryACjfv8pDShPLptGn_-bKId1UeA5WbYym3wewiw/s1600/carga_test_rf-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoSJcaHDZcfeiIgHl_4gjHPcDJ7tjDQQ7mRaynLW5gxhNRdyGyWtH3rKKEDrzH4Fz44bprf0n5UZxcnrh4MlhtGgcyhZgC2zxXXPSryACjfv8pDShPLptGn_-bKId1UeA5WbYym3wewiw/s1600/carga_test_rf-2.png" height="156" width="320" /></a></div>
En el Raspberry tenemos que tener cargado el programa de <a href="http://rsppi.blogspot.com.es/2013/08/comunicacion-por-rf-433mhz-desde.html" target="_blank">este post</a> y tener conectado el receptor. Probamos y tenemos que recibir la cadena "12345" cada segundo.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxf7RQYklQUGh0rhsFetbIa1M8N8i7oYkZYsNhKnmvY8BJkGwvRPBtbClMZ_edaQgoZtkE1nz7sL_yjv7xy8uspKCgcxItc_sQIejOxBHCvcQmxC0cRCP4ks8hma_xGlSHvyFohgqzyHY/s1600/aplauso.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxf7RQYklQUGh0rhsFetbIa1M8N8i7oYkZYsNhKnmvY8BJkGwvRPBtbClMZ_edaQgoZtkE1nz7sL_yjv7xy8uspKCgcxItc_sQIejOxBHCvcQmxC0cRCP4ks8hma_xGlSHvyFohgqzyHY/s1600/aplauso.gif" height="144" width="320" /></a></div>
<b> edición 25 de Octubre:</b><br />
No se si subí las librerías de Attiny para el IDE de Arduino, cosas de la edad ... a<a href="https://www.dropbox.com/s/koijiduj6aympe8/attiny45_85.zip" target="_blank">quí las tenéis.</a>Unknownnoreply@blogger.com49tag:blogger.com,1999:blog-1180468193148611581.post-67745211129302834812013-09-07T17:30:00.000+02:002013-09-17T13:09:25.210+02:00Medidor de consumo eléctrico EnviR (parte 2)<h2>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8Eu677VCDSF2Dzx3LXBqu3avsA3b-uZO66XVpJJ3i3WHGko1GjGhJ38j0r0BwYCh6ryFNkHiEcPtbcok1wj7Mzn62PKbKChR5GxUMbl8yHWHs9nRex9kUC7t9FpKGbyZ6LxW1b5jTihE/s1600/pi-envir.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="178" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8Eu677VCDSF2Dzx3LXBqu3avsA3b-uZO66XVpJJ3i3WHGko1GjGhJ38j0r0BwYCh6ryFNkHiEcPtbcok1wj7Mzn62PKbKChR5GxUMbl8yHWHs9nRex9kUC7t9FpKGbyZ6LxW1b5jTihE/s1600/pi-envir.png" width="200" /></a>... haciendo uso de nuestros conocimientos multidisciplina</h2>
<div>
Hola de nuevo, en el post anterior comentaba como conectarnos y sacar los datos de EnviR. En este post vamos a instalar un servidor Mysql donde registrar los datos, generar alarmas/eventos e integrarlo con la domótica.</div>
<div>
<a name='more'></a><h3>
Instalación</h3>
</div>
<div>
Antes de nada, instalamos:</div>
<pre class="brush: bash">apt-get update
apt-get install mysql-server apache2 phpmyadmin
</pre>
<div>
cuando instala Mysql nos preguntará varias cosas, si no sabemos de que habla, elegiremos las opciones por defecto. Nos pide la clave del servidor Mysql, usuario, cliente Mysql, permisos para las BBDD ... si eres un vago y estas haciendo pruebas, ponle la misma clave que al usuario root, te dará menos dolores de cabeza. Si quieres dejar esto en un sistema en producción, ni se te ocurra hacerlo.</div>
<div>
Ahora creamos la BBDD y la tabla donde guardar los registros. Como soy buena gente te dejo <a href="https://www.dropbox.com/s/63g6f3yfoe6ngoj/EnviR.sql" target="_blank">aquí el archivo sql</a>:</div>
<pre class="brush: bash">wget https://www.dropbox.com/s/63g6f3yfoe6ngoj/EnviR.sql -O /tmp/EnviR.sql
mysql -u root -p < /tmp/EnviR.sql
</pre>
<h3>
Procesamiento de datos</h3>
<div>
He creado un script que filtra, guarda y procesa los datos /usr/local/bin/recoge_datos_envir.sh :</div>
<pre class="brush: bash">#!/bin/bash
host=localhost
user=root
pass=PASS_MYSQL
db=EnviR
tbl=registros
sql="/usr/bin/mysql -h $host -u $user -p$pass -e "
gtalk=USUARIO_RECIBE_ALERTAS@gmail.com</pre>
<pre class="brush: bash">xml=/tmp/envir/salida.xml
##### TEMPERATURAS TERMOSTATO #####
temperaturaArranqueAire=31
temperaturaParadaAire=24
temperaturaArranqueCalefaccion=10
temperaturaParadaCalefaccion=20
###################################
##### CONSUMO ELECTRICO #####
alarmaConsumoMAX=3000
alarmaIncremento=1000
#############################
orden=$(cat $xml | tail -1 | grep msg | sed 's/</\ /g' | sed 's/>/\ /g' | sed 's/\///g' | sed 's/\ \ /\ /g' | cut -f10,13,16,19,26 -d\ )
if [ "$orden" != "" ];
then
fecha=$(echo $(echo $(date +%F) && echo $orden | cut -f1 -d\ ) | sed 's/\ /_/g');
temp=$(echo $orden | cut -f2 -d\ );
sensor=$(echo $orden | cut -f3 -d\ );
sensorID=$(echo $orden | cut -f4 -d\ );
watts=$(echo $orden | cut -f5 -d\ );
$sql 'insert into '$db'.'$tbl' (fecha,temperatura,sensor,sensorID,watts) VALUES ("'$fecha'","'$temp'","'$sensor'","'$sensorID'","'$watts'")';
##### CONDICIONALES DE TEMPERATURA #####
if (( $(echo "$temp < $temperaturaArranqueCalefaccion" | bc -l) ));
then
echo activar calefaccion;
echo "Evento a las: `date`: se enciende la calefaccion, la temperatura es de $temp" | centerim -s msg -p jab -t $gtalk;
fi
if (( $(echo "$temp > $temperaturaParadaCalefaccion" | bc -l) ));
then
echo parar calefaccion;
echo "Evento a las: `date`: se apaga la calefaccion, la temperatura es de $temp" | centerim -s msg -p jab -t $gtalk;
fi
if (( $(echo "$temp > $temperaturaArranqueAire" | bc -l) ));
then
echo activar aire acondicionado;
echo "Evento a las: `date`: se enciende el aire acondicionado, la temperatura es de $temp" | centerim -s msg -p jab -t $gtalk;
fi
if (( $(echo "$temp < $temperaturaParadaAire" | bc -l) ));
then
echo parar aire acondicionado;
echo "Evento a las: `date`: se apaga el aire acondicionado, la temperatura es de $temp" | centerim -s msg -p jab -t $gtalk;
fi
########################################
##### CONDICIONALES DE CONSUMO #####
if (( $(echo "$watts > $alarmaConsumoMAX" | bc -l) ));
then
if [ -f /tmp/watts_alarma.log ];
then
en_alarma=$(cat /tmp/watts_alarma.log);
if [ "$en_alarma" = "0" ];
then
echo se consume demasiado;
echo 1 > /tmp/watts_alarma.log;
echo "Evento a las: `date`: el consumo electrico es de $watts" | centerim -s msg -p jab -t $gtalk;
fi
else
echo 1 > /tmp/watts_alarma.log;
echo se consume demasiado;
echo "Evento a las: `date`: el consumo electrico es de $watts" | centerim -s msg -p jab -t $gtalk;
fi
else
if [ -f /tmp/watts_alarma.log ];
then
en_alarma=$(cat /tmp/watts_alarma.log);
if [ "$en_alarma" = "1" ];
then
echo consumo electrico reestablecido;
echo 0 > /tmp/watts_alarma.log;
echo "Evento a las: `date`: el consumo electrico se ha reestablecido a $watts" | centerim -s msg -p jab -t $gtalk;
fi
else
echo 0 > /tmp/watts_alarma.log;
fi
fi
if [ -f /tmp/watts_anterior.log ];
then
watts_anterior=$(cat /tmp/watts_anterior.log);
if (( $(echo "$watts - $watts_anterior > $alarmaIncremento" | bc -l) ));
then
echo se incrementa el consumo en mas de $alarmaIncremento hasta los: $watts;
echo "Evento a las: `date`: el consumo electrico se incrementa en mas de $alarmaIncremento hasta los: $watts" | centerim -s msg -p jab -t $gtalk;
fi
fi
echo $watts > /tmp/watts_anterior.log;
#####################################
fi
</pre>
<div>
Es fácil de entender, tendréis que hacer vuestros ajustes de acceso a Mysql y completarlo con vuestras necesidades. Yo lo veo fácil, pero si no entiendes algo pregúntame. Para configurar las alertas por Gtalk (Hangouts (Conversaciones)) pásate por <a href="http://rsppi.blogspot.com.es/2013/07/uso-de-hangouts-gtalk-para-el-envio-de.html" target="_blank">este post</a>.</div>
<div>
<br /></div>
<h3>
Puesta en marcha</h3>
<div>
Para que se ejecute al arrancar el Raspberry, añadimos esta línea al archivo /etc/rc.local :</div>
<pre class="brush: bash">screen -dmS EnviR /bin/bash /usr/local/bin/recoge_datos_envir.sh
</pre>
<div>
guardamos y reiniciamos con todo enchufado. Desde el momento en el que arranque estará guardando los datos y actuando en los diferentes eventos. Podemos ver los registros con nuestro cliente favorito de Mysql o desde http://ip_del_raspberry/phpmyadmin</div>
<div>
<br /></div>
<div>
El resto lo dejo en vuestras manos, esto es un "yo me lo guiso yo me lo como". Me consta que la gente de <a href="http://www.cliensol.es/" target="_blank">Cliensol</a> está aprovechando esto (y más cosas) para hacer un interfaz web la mar de currao, compatible con nuestros Androids, iphones, tablets y pcs, generando gráficas, consulta de históricos y demás. Si no tienes tiempo, o no quieres complicarte la vida, ponte en contacto con ellos ;)<br />
<br />
<h3>
ACTUALIZACIÓN!!!!</h3>
me he saltado una de las partes más importantes ¿cómo paso los datos del xml al script?<br />
Fácil, la línea de antes del /etc/rc.local la ELIMINAMOS, y mejor usamos incron. Puedes usar como ejemplo <a href="http://rsppi.blogspot.com.es/2012/07/apagar-la-luz-automaticamente-al-ver.html" target="_blank">este post</a>, en el que explico paso a paso como usar incron y capturar el evento que queremos. Despues ejecutamos incrontad -e y la orden se quedaría más o menos:
<pre class="brush: bash">
/tmp/envir/salida.xml IN_MODIFY /bin/bash /usr/local/bin/recoge_datos_envir.sh
</pre>
Asegúrate de que tu evento es IN_MODIFY, si no lo es, pon el que más se ajuste.
<br /></div>Unknownnoreply@blogger.com12tag:blogger.com,1999:blog-1180468193148611581.post-3366600751965321422013-09-06T06:30:00.000+02:002013-09-17T13:01:28.098+02:00Medidor de consumo eléctrico EnviR (parte 1)<h3>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8suUMyHvI3kZVR6vkUQ6BTs4tb9CgFz3SR_1naS6JMM83WiYzidQBqtE-aUtku7DO6la6XIg16yZsRchIFowf7CDgZVYfIAMaPoQxDEVR43vAlbi8A5N3bNoL-gsqXR5upUEaiY1pNlA/s1600/pi-envir.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="177" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8suUMyHvI3kZVR6vkUQ6BTs4tb9CgFz3SR_1naS6JMM83WiYzidQBqtE-aUtku7DO6la6XIg16yZsRchIFowf7CDgZVYfIAMaPoQxDEVR43vAlbi8A5N3bNoL-gsqXR5upUEaiY1pNlA/s1600/pi-envir.png" width="200" /></a>
Cortesía de mis nuevos amigos</h3>
Buenos días, hace tiempo que andaba mirando medidores de consumo eléctrico para mi casa. Cómo la factura de la luz sube cada mes, hay que tenerlo todo controlado. Había visto varios modelos y marcas hasta que, casualidades de la vida, recibo un correo de Tomás de la empresa <a href="http://www.cliensol.es/" target="_blank">Cliensol</a>, en el que me preguntaba si sabría extraer los datos de su medidor de consumo EnviR, aprovechando el puerto serie que trae, para tener los datos en el Raspberry.<br />
<br />
<a name='more'></a>Tomás, a parte de ser buen actor como demuestra el <a href="https://www.youtube.com/watch?v=SkkKUtuxiVs&feature=c4-overview&list=UU61us81wxv10Qr4taP737mQ" target="_blank">vídeo</a>, me envió el kit básico de EnviR, consistente en:<br />
1- Sensor + emisor inalámbrico<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaZ4-Cw2V7jaguGwcjJ2CPaze0-rzqfIo6RjOrq3CYgoJU-_QUJnxn0e-U96ZjkdayK040r-9q6qdRKse0dnU1kih3P50ALyh-OnhABk3FjparNTPCLBOtAA57PxfFpjUZgADX1xlOwRw/s1600/emisor-y-pinza-plus-current-cost.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaZ4-Cw2V7jaguGwcjJ2CPaze0-rzqfIo6RjOrq3CYgoJU-_QUJnxn0e-U96ZjkdayK040r-9q6qdRKse0dnU1kih3P50ALyh-OnhABk3FjparNTPCLBOtAA57PxfFpjUZgADX1xlOwRw/s1600/emisor-y-pinza-plus-current-cost.jpg" width="320" /></a></div>
2- Pantalla receptora, donde muestra el estado actual, acumulado, temperatura ...<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLR0klsgMje9bBc8OTV5btkMbfuvz60PEN9_Ch4RbSLNENHuAYJ4sVHnnggPnfbjtyQF9mDPvP1O3aVMo66zjx-L2v-Pe12P7nrAC-91kjwo66Zthnx8pN6k72RhPi2gczx6eRyjA_OFk/s1600/current_cost_envir_blanco_5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLR0klsgMje9bBc8OTV5btkMbfuvz60PEN9_Ch4RbSLNENHuAYJ4sVHnnggPnfbjtyQF9mDPvP1O3aVMo66zjx-L2v-Pe12P7nrAC-91kjwo66Zthnx8pN6k72RhPi2gczx6eRyjA_OFk/s1600/current_cost_envir_blanco_5.png" width="298" /></a></div>
Y ya está, no hace falta más. Siguiendo las instrucciones que proporcionan, conectamos el sensor al cuadro eléctrico y lo sincronizamos con EnviR (la pantalla).<br />
Le ajustamos la moneda a €, hora y el precio por kw/h que la compañía eléctrica nos sangra cada mes. Desde este momento ya tenemos en funcionamiento el kit completo, superfácil. En su web y canal de youtube hay muchos ejemplos y manuales para no perderte.<br />
<h3>
Conexión serie y descarga de datos al RaspberryPi</h3>
Vamos a lo que nos interesa. El EnviR tiene un puerto serie por detrás, camuflado como un RJ45. Tomás me envió además del kit, el cable usb-RJ45, no se si lo incluyen en el kit, lo compras a parte ...<br />
Como el EnviR tiene alimentación propia, <u>no es necesario conectarlo a un hub usb alimentado</u>. Así que enchufamos al Raspberry, ejecutamos lsusb y vemos:<br />
<pre class="brush: bash">Bus 001 Device 004: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
</pre>
Si buscamos un poco, el chip PL2303 es un conversor serie-usb. Requiere un módulo en concreto para el kernel que ... jejejeje ya viene en nuestros Raspberrys :) Instalamos:<br />
<pre class="brush: bash">apt-get update
apt-get install minicom
</pre>
y ahora, fijándonos en la documentación, nos conectamos al EnviR desde el Raspberry:<br />
<pre class="brush: bash">minicom -b 57600 -D /dev/ttyUSB0 -8
</pre>
y ahí lo tenemos, un precioso XML, que genera una línea cada ~6 segundos con los datos que queremos:<br />
<pre class="brush: bash"><msg><src>CC128-v0.12</src><dsb>65535</dsb><time>16:54:42</time><tmpr>28.5</tmpr><sensor>0</sensor><id>03490</id><type>1</type><ch1><watts>02820</watts></ch1></msg>
<msg><src>CC128-v0.12</src><dsb>65535</dsb><time>16:54:48</time><tmpr>28.5</tmpr><sensor>0</sensor><id>03490</id><type>1</type><ch1><watts>02819</watts></ch1></msg>
<msg><src>CC128-v0.12</src><dsb>65535</dsb><time>16:54:54</time><tmpr>28.4</tmpr><sensor>0</sensor><id>03490</id><type>1</type><ch1><watts>02833</watts></ch1></msg>
<msg><src>CC128-v0.12</src><dsb>65535</dsb><time>16:55:00</time><tmpr>28.4</tmpr><sensor>0</sensor><id>03490</id><type>1</type><ch1><watts>02830</watts></ch1></msg>
<msg><src>CC128-v0.12</src><dsb>65535</dsb><time>16:55:07</time><tmpr>28.4</tmpr><sensor>0</sensor><id>03490</id><type>1</type><ch1><watts>02821</watts></ch1></msg>
<msg><src>CC128-v0.12</src><dsb>65535</dsb><time>16:55:13</time><tmpr>28.4</tmpr><sensor>0</sensor><id>03490</id><type>1</type><ch1><watts>02858</watts></ch1></msg>
<msg><src>CC128-v0.12</src><dsb>65535</dsb><time>16:55:19</time><tmpr>28.4</tmpr><sensor>0</sensor><id>03490</id><type>1</type><ch1><watts>02813</watts></ch1></msg>
<msg><src>CC128-v0.12</src><dsb>65535</dsb><time>16:55:25</time><tmpr>28.4</tmpr><sensor>0</sensor><id>03490</id><type>1</type><ch1><watts>02811</watts></ch1></msg>
</pre>
Podemos dejarlo en segundo plano y generando el XML con:<br />
<pre class="brush: bash">SCREEN -dmS enviR minicom -b 57600 -D /dev/ttyUSB0 -8 -C /tmp/envir/salida.xml
</pre>
En el siguiente post veremos como explotar un poco esos datos e integrarlos con nuestra domótica, generar alertas y grabarlo todo en una BBDD Mysql.Unknownnoreply@blogger.com6tag:blogger.com,1999:blog-1180468193148611581.post-64897044402891624022013-08-23T19:31:00.003+02:002013-08-27T17:29:12.350+02:00Comunicacion por RF a 433Mhz desde Arduino hasta RaspberryPi<h2>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6m-zrn3MwNQNGMEP9W-7VgmIG_YLeeJqjDKxxXMFgGJAMVUF7c0RRqRTS9mhtKLqxZ5AuXAWW6QwBH4j8J5Ja2DjVnjU9JD3Lr0uTpSK1IKwWheLvTUlRmTVwm9kx7D_LNXlzgOU3kCg/s1600/pi-433.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6m-zrn3MwNQNGMEP9W-7VgmIG_YLeeJqjDKxxXMFgGJAMVUF7c0RRqRTS9mhtKLqxZ5AuXAWW6QwBH4j8J5Ja2DjVnjU9JD3Lr0uTpSK1IKwWheLvTUlRmTVwm9kx7D_LNXlzgOU3kCg/s1600/pi-433.png" height="198" width="200" /></a>
... esto ya es otro nivel ...</h2>
Muy buenos y prósperos días, amigos. Hace tanto tiempo que ya ni recuerdo, me compré un kit emisor-receptor de radiofrecuencia en la banda de 433Mhz (standard inalámbrico en banda libre en España), para unos proyectitos con Arduino. No conseguí mucho con ellos, hasta que hace un par de días conecté el receptor al RaspberryPi, te cuento como hacerlo.<br />
<br />
<a name='more'></a>Los módulos en cuestión son:<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhw2EmTVxP7BF8A4eg1kSs92Vxg4muMFckjSmvrUKRduJt1V5tGOwjeyKLjUDtV3s6y8nMKtTjxY_6NTiHZJEbLoL2LfFhMgyoGJZU5kdF1-T9eyr5zR0akCiEtqbBt69JHXlt7IURsMls/s1600/kit_433mhz.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhw2EmTVxP7BF8A4eg1kSs92Vxg4muMFckjSmvrUKRduJt1V5tGOwjeyKLjUDtV3s6y8nMKtTjxY_6NTiHZJEbLoL2LfFhMgyoGJZU5kdF1-T9eyr5zR0akCiEtqbBt69JHXlt7IURsMls/s1600/kit_433mhz.jpg" /></a></div>
<br />
que los tienes en cualquier tienda de electrónica y webs como dealextreme a precio de risa. El de la izquierda es el receptor y el de la derecha el emisor. Y a tu primera pregunta: NO, no son bidireccionales.<br />
Te recomiendo que antes de nada, pruebes que funcionan correctamente, para ello usa dos de tus Arduinos (¿no tienes más de uno?) y guíate por <a href="http://www.buildcircuit.com/how-to-use-rf-module-with-arduino/" target="_blank">este manual</a>, usan el de 315Mhz, pero las instrucciones son exactas para los de 433Mhz.<br />
<br />
<h3>
En el Arduino</h3>
Como hacer solo la parte de la comunicación no tiene mucho misterio (aunque me ha costado casi una semana), voy a conectarle un sensor analógico de temperatura LM35. La idea es transmitir esa temperatura desde el Arduino hasta el Raspberry. La conexión quedaría así:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxv5fqds3N8qBLnRLorP3rr1CZlDfdZv53afbtMmGqOnoKwK5TuqovCu9yWI1_nH7eCS7vbxQVT-ml_mAXdzHSHCmDzP3bDiflOG1Aaa8WH-wSUdmHQ-e1OA0cFXjg_PPgTCRCuPvpO68/s1600/esquema-emisor.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxv5fqds3N8qBLnRLorP3rr1CZlDfdZv53afbtMmGqOnoKwK5TuqovCu9yWI1_nH7eCS7vbxQVT-ml_mAXdzHSHCmDzP3bDiflOG1Aaa8WH-wSUdmHQ-e1OA0cFXjg_PPgTCRCuPvpO68/s1600/esquema-emisor.png" height="320" width="290" /></a></div>
fácil fácil, lleva más tiempo hacer el esquema. Necesitamos una librería nueva, la descargamos de <a href="https://www.dropbox.com/s/lj0x8cwnb2lc8n3/RCswitch.tar.gz" target="_blank">este enlace</a> y la descomprimimos en el directorio de librerias de nuestro Arduino. Creamos el siguiente código en el Arduino:<br />
<pre class="brush: bash">#include <rcswitch .h="">
RCSwitch mySwitch = RCSwitch();
long envio = 0;
// Declaracion de variables
float tempC;
int tempPin = 0; // Definimos la entrada en pin A0
void setup()
{
// Abre puerto serial y lo configura a 9600 bps
Serial.begin(9600);
mySwitch.enableTransmit(10);
}
void loop()
{
// Lee el valor desde el sensor
tempC = analogRead(tempPin);
mySwitch.send(tempC, 8);
// Espera cinco segundo para repetir el loop
delay(5000);
}
</rcswitch></pre>
Con este hardware y esta librería, podemos enviar número de hasta 32 bits. La cadena:<br />
<pre class="brush: bash">mySwitch.send(tempC, 8);
</pre>
indica que esta enviando un número de 8 bits, lo que viene a ser entre -128 y +127, teniendo en cuenta que el sensor de temperatura trabaja entre -55ºC y +150ºC, nos sobra. Cargamos el código y lo dejamos en marcha.<br />
<br />
<h3>
En el RaspberryPi</h3>
Tenemos que proveer de alimentación suficiente al receptor, además de leer de uno de los pins DATA. El esquema es el siguiente:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgF7blOTytfT_Ut2fJ_GSVjvdLYmcpEELxKXKRqAI4ZVnEOb9VaXk61wN6U6HCqowJHOM12zDck0IDpCst5-2kd9sKW_TOqobvuwLvXlDH0xdEhKCg0H5iXDDoYmQENvz8HbG4qYeF06lw/s1600/esquema-emisor.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgF7blOTytfT_Ut2fJ_GSVjvdLYmcpEELxKXKRqAI4ZVnEOb9VaXk61wN6U6HCqowJHOM12zDck0IDpCst5-2kd9sKW_TOqobvuwLvXlDH0xdEhKCg0H5iXDDoYmQENvz8HbG4qYeF06lw/s1600/esquema-emisor.png" height="320" width="299" /></a></div>
<br />
También es bastante simple. El receptor tiene 4 pines, pero en realidad los dos centrales están puenteados, así que puedes conectarlo donde más te guste. Antes de nada hay que tener compilado WiringPi, <a href="http://rsppi.blogspot.com.es/2012/07/alarma-laser-usando-gpio.html" target="_blank">pásate por este post</a>. Ahora tenemos que:<br />
<pre class="brush: bash">mkdir -p /usr/src/rasp433/
cd /usr/src/rasp433/
wget https://www.dropbox.com/s/faw6y1lzguhgxvx/rpi.zip
unzip rpi.zip
gcc rfreceive.cpp RCSwitch.cpp -o rfreceive -lwiringPi
gcc rftester.cpp RCSwitch.cpp -o rfreceive -lwiringPi
</pre>
Ahora mismo vamos a preocuparnos sólo de recibir, en los siguientes post afinaremos el código. Ejecutamos:<br />
<pre class="brush: bash">./rfreceive 0
Received: 60
Received: 60
Received: 60
Received: 61
</pre>
Eso significa que hace (60x500/1024)ºC o lo que es lo mismo, 29.3ºC en Sevilla 23 de Agosto a las 08:00 (vaya caló cabesa).<br />
<br />
<h3>
Problemas</h3>
¿problemas? Muchos, la información para hacer todo esto esta repartida en unos 100 post del foro de Raspberry, en 200 webs y en mucho dolor de cabeza. Agradezco eternamente la ayuda de @Rémi_Sarrailh por su ayuda, eres un crá.<br />
Bueno y ahora el problema físico de todo esto, la antena. Si te fijas bien, cada módulo tiene una antenita ridícula y un agujerito donde poner tu propia antena. Si no pones antena, la distancia entre emisor y receptor no puede ser mayor de ... 50 centímetros. Yo ahora mismo les he puesto a cada uno, un hilo de un cable de red muy rígido. Unos 20 centímetros cada una, con lo que consigo distancias de 10 metros. Tengo que mejorar aun mucho la cobertura, pero por ahora me vale para las pruebas.<br />
<br />
<h3>
y todo esto ¿para qué?</h3>
Buena pregunta, con esto conseguimos tener sensores <b>SUPERBARATOS</b> e <b>INALAMBRICOS</b> de todo tipo, en distintas partes de la casa. En los próximos días voy a estar haciendo pruebas de sustitución del Arduino por un attiny85 ... hagan sus apuestas.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDvyqdHtxyRRcGxxKfPu25cFK6KWgtZxmqbqwx2c3CqC8aVAxuXROlFIECVuNJbLNC6uypJ4SdOLBUu6N-CN1lBiFb5aYtUd8j3JUzWnsKp0nzwJHOXuH7aJj6kQcJqMnHSbS7Qp-7dKg/s1600/meme-asterisk-3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDvyqdHtxyRRcGxxKfPu25cFK6KWgtZxmqbqwx2c3CqC8aVAxuXROlFIECVuNJbLNC6uypJ4SdOLBUu6N-CN1lBiFb5aYtUd8j3JUzWnsKp0nzwJHOXuH7aJj6kQcJqMnHSbS7Qp-7dKg/s1600/meme-asterisk-3.jpg" height="246" width="320" /></a></div>
<br />
<div style="text-align: right;">
Post dedicado a Jorge Sandín, a ver si te animas de una vez!!</div>
Unknownnoreply@blogger.com30tag:blogger.com,1999:blog-1180468193148611581.post-60736608036695335902013-08-23T13:12:00.002+02:002013-08-23T14:33:21.623+02:00Consultorio: estabilidad del sistema<h3>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCmCMvs2cOa49orPMuq0topfTZJBoPVJbDsz1C-u4B1W4AWpyCxGa5tY6ORM4uBqQResXUFW6vwjVSL0ijMuU9ZJjsuQZmnTyX-1kmSeZZJ3C0ahuhhRj8rmHrJnOIsLMQqvu082lL_EQ/s1600/logo-super_raspi.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCmCMvs2cOa49orPMuq0topfTZJBoPVJbDsz1C-u4B1W4AWpyCxGa5tY6ORM4uBqQResXUFW6vwjVSL0ijMuU9ZJjsuQZmnTyX-1kmSeZZJ3C0ahuhhRj8rmHrJnOIsLMQqvu082lL_EQ/s1600/logo-super_raspi.png" height="135" width="200" /></a>... cuéntame tus penas ...</h3>
Buenos días,<br />
nuestro amigo Gabriel nos pregunta:<br />
<br />
<blockquote class="tr_bq">
<i>Hola,</i><br />
<i>fantástico blog, llevo un tiempo haciéndome unas cuantas preguntas, y me gustaría saber si tu les puedes dar solución.</i><br />
<i>1.¿Cuántas horas seguidas puede estar raspberry pi encendida sin joderse? ¿Cual es tu experiencia?</i><br />
<i>2. ¿Crees que es mejor ir reiniciando una vez al día por ejemplo antes de tenerla todo el día encendida y conectada a la corriente?</i></blockquote>
<br />
Mi respuesta, nuevamente basada en mi experiencia personal:<br />
<br />
<blockquote class="tr_bq">
<i>24 horas, 7 días a la semana, 52 semanas al año ;)</i><br />
<i>Mi Raspberry está en marcha todo el día compartiendo/descargando torrents (muchos), gestionando la domótica, muchos scripts en marcha buscando pelis, series, generando eventos. Es además centralita ... y alguna cosa más.</i></blockquote>
Aprovecho además para recordaros que si tenéis el Raspberry conectado a una buena fuente de alimentación, o a un USB del ruter o nas que quede libre, el consumo en € es ridículo, en torno a los 5€/año<br />
<br />Unknownnoreply@blogger.com10tag:blogger.com,1999:blog-1180468193148611581.post-86229824913537678892013-08-16T10:56:00.000+02:002013-08-16T10:57:34.213+02:00Consultorio: XBMC, SD, conexión remota ...<br />
<h2>
... cuéntame tus penas ...<div class="separator" style="clear: both; text-align: center;">
</div>
</h2>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5Mh_gmCa58cBZY8hrcVAc65WxV-Za8Iyt8foT0G9rtCZ5qTZFOsGS5HkTDc1Yrr-JhzPn8fn8JgTK6FsqEKsqPrjsjCXQdgYuIhFdnhSQGYfPTgvCrsqMlHGfbvpvzHNXkXK4jmCw4vs/s1600/logo-super_raspi.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5Mh_gmCa58cBZY8hrcVAc65WxV-Za8Iyt8foT0G9rtCZ5qTZFOsGS5HkTDc1Yrr-JhzPn8fn8JgTK6FsqEKsqPrjsjCXQdgYuIhFdnhSQGYfPTgvCrsqMlHGfbvpvzHNXkXK4jmCw4vs/s1600/logo-super_raspi.png" height="135" width="200" /></a>Buenos días, a la derecha del blog, tenéis los enlaces a las redes sociales y a un formulario de contacto, para preguntar cosas, agradecer, donar miles de millones y esas cosas. Hoy nuestro amigo Julio nos pregunta:<br />
<blockquote class="tr_bq">
<i>1- tengo una RaspBerry con Raspbmc y mi pregunta es si posible ver el contenido desde fuera de mi red, por ejemplo en casa de mis padres.</i></blockquote>
<blockquote class="tr_bq">
<i>2- Me compre una SD de 32gb clase 10. Es más rápida que un pen USB o mejor dejo la SD sólo para el arranque?</i></blockquote>
<blockquote class="tr_bq">
<i>3- Sabes como "editar" la bbdd del XBMC? Algunos títulos los pone en inglés, hay manera de corregirlo desde el ordenador a mano?</i></blockquote>
A lo que he respondido ...<br />
<br />
<a name='more'></a>1- Me temo que XBMC no permite eso, básicamente porque no está preparado para eso. Lo que si puedes es iniciar sesión remota al escritorio de linux (<a href="http://blog.jorgeivanmeza.com/2010/09/acceder-al-escritorio-remoto-de-gnulinux-ubuntu-10-04-utilizando-xephyr/" target="_blank">instrucciones</a>) pero ya te digo que te va a ir lento. Puedes combinarlo con <a href="http://rsppi.blogspot.com.es/2013/03/acceso-al-escritorio-traves-de-webproxy.html" target="_blank">Guacamole</a>, para hacerlo todo vía web.<br />
<br />
Hay otros mediacenters, a mi gusto mejores pero menos conocidos, como MythTV, que si te permiten eso. En tu casa tienes el servidor de MythTV o Backend, y en otro equipo dentro o fuera de red tienes el cliente MythTV o Frontend. Esta conexión entre el Backend y el Frontend es por un puerto, que puedes natear en el ruter.<br />
Acabo de ver esto http://www.mythtv.org/wiki/Rasberry_Pi pero bueno ...<br />
<br />
2- Ni se te ocurra desaprovechar una sd de 32g c10 sólo para el arranque. Móntale todo el sistema y el almacenamiento "gordo" de películas o lo que sea, lo pones en un disco externo por usb o red.<br />
En mi caso uso una SD de 8GB clase 4 con Minidlna, domótica, torrents ... y va sobrada.<br />
<br />
3- Antes que tocar la bbdd del xbmc, te recomiendo probar con un scraper español, teóricamente te pondrá los títulos y resúmenes en español (addons - video). Si lo tocas a mano, cada vez que reescanee contenido, te machacará los cambios.<br />
<br />
Durante la redacción de este post, Julio volvió a preguntar:<br />
<blockquote class="tr_bq">
<i>4- me puedes recomendar un "scraper" español y como ponerlo en el XBMC?</i></blockquote>
4- Tienes varios, los dos más usados son:<br />
<a href="http://xbmcspain.com/foro/filmaffinity-t208.html" target="_blank">Filmaffinity</a><br />
<a href="http://xbmcspain.com/foro/topic-t572.html" target="_blank">CineEOL</a><br />
Se instalan como cualquier otro addon. Bajas el zip y lo instalas desde el menu ADDONS del XBMC.<br />
<br />
Insisto que estas son mis opiniones, basadas en mis experiencias.<br />
<br />
<br />
<br />
Unknownnoreply@blogger.com6tag:blogger.com,1999:blog-1180468193148611581.post-85267239719908221952013-08-14T20:46:00.002+02:002013-08-14T21:00:00.362+02:00Videocámara de seguridad motorizada<h2>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1Q1IaLit9DzeQ-B3zHFUKikIMniPnRwcJuC58s1NIDZdB6uJhm2oq11Lag47-f0pF-pJLbhUkarZO_tjtnY0_7lSnVhwZtN-4kRLyyLMy6SRA3pEOSkVHdMdRj4uUFNA0OO737-_pQ1g/s1600/pi-turret-motion.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1Q1IaLit9DzeQ-B3zHFUKikIMniPnRwcJuC58s1NIDZdB6uJhm2oq11Lag47-f0pF-pJLbhUkarZO_tjtnY0_7lSnVhwZtN-4kRLyyLMy6SRA3pEOSkVHdMdRj4uUFNA0OO737-_pQ1g/s1600/pi-turret-motion.png" height="200" width="178" /></a>
... aglutinando superpoderes</h2>
Hola de nuevo!. Como ya adelantaba en el post anterior, voy a explicar como instalar Motion para que además de hacer de cámara de seguridad, la mueva persiguiendo al evento de alarma. Previamente necesitamos:<br />
- Raspicam<br />
- Streaming desde la Raspicam<br />
- Mutt<br />
- Pi-blaster<br />
- 2 Servos<br />
- Brazo pan-tilt (puede ser suprimido con un poco de talento).<br />
<br />
<a name='more'></a>Lo primero aclarar, que esto es más una idea, que un proyecto completo. Funcionar funciona, pero cierto es que puede mejorarse. Lo ideal sería usar OpenCV, pero resulta que no tengo ni idea, lo he intentado pero no he conseguido nada aceptable. Si buscáis en youtube veréis gente que lo ha conseguido, pero sigo sus tutoriales y no funcionan.<br />
Empecemos, antes de nada insisto:<br />
- <a href="http://www.raspberrypi.org/archives/tag/camera-board" target="_blank">Raspicam</a> funcionando (o una cámara con mjpeg encoding compatible).<br />
- <a href="http://rsppi.blogspot.com.es/2013/08/streaming-de-video-desde-raspberrypi.html" target="_blank">Mjpg-stgreamer</a> en funcionamiento.<br />
- <a href="http://rsppi.blogspot.com.es/2013/08/control-pwm-por-software-parte-2.html" target="_blank">2 Servos y pi-blaster</a>.<br />
- <a href="http://rsppi.blogspot.com.es/2013/01/envio-de-emails-desde-consola-y-con.html" target="_blank">Mutt</a> para el envío de las alertas por mail.<br />
- Tener al gatete controlado.<br />
<h3>
Arranque de la captura y el streaming</h3>
Antes de instalar, vamos a dejar la camera board en marcha:<br />
<pre class="brush: bash">sesion=$(date +%s)
mkdir /tmp/$sesion/
screen -dmS raspistil raspistill -w 640 -h 480 -q 10 -o /tmp/$sesion/pic.jpg -tl 100 -t 9999999 -th 0:0:0
screen -dmS streamer /usr/src/mjpg-streamer/mjpg-streamer/mjpg_streamer -i "/usr/src/mjpg-streamer/mjpg-streamer/input_file.so -f /tmp/$sesion/" -o "/usr/src/mjpg-streamer/mjpg-streamer/output_http.so -w /usr/src/mjpg-streamer/mjpg-streamer/www/"
</pre>
<h3>
Instalación de motion</h3>
Motion es el programa que nos permite generar alarmas y configurar las cámaras que tendrá nuestro sistema de seguridad. Para instalarlo no puede ser más fácil:<br />
<pre class="brush: bash">apt-get update
apt-get install motion
</pre>
Configuraciones de Motion hay millones, os cuento la que me ha funcionado. Le hacemos una copia de seguridad al archivo /etc/motion/motion.conf y lo dejamos así:<br />
<pre class="brush: bash">daemon off
process_id_file /var/run/motion/motion.pid
setup_mode off
v4l2_palette 8
input 8
norm 0
frequency 0
rotate 0
width 640
height 480
framerate 10
minimum_frame_time 0
netcam_url value http://127.0.0.1:8080/?action=stream
netcam_tolerant_check off
auto_brightness off
brightness 0
contrast 0
saturation 0
hue 0
roundrobin_frames 1
roundrobin_skip 1
switchfilter off
threshold 1500
threshold_tune off
noise_level 32
noise_tune on
despeckle EedDl
smart_mask_speed 0
lightswitch 0
minimum_motion_frames 1
pre_capture 0
post_capture 0
gap 1
max_mpeg_time 0
output_all off
output_normal on
output_motion off
quality 90
ppm off
ffmpeg_cap_new off
ffmpeg_cap_motion off
ffmpeg_timelapse 0
ffmpeg_timelapse_mode daily
ffmpeg_bps 500000
ffmpeg_variable_bitrate 0
ffmpeg_deinterlace off
snapshot_interval 0
locate off
text_right %Y-%m-%d\n%T-%q
text_changes off
text_event %Y%m%d%H%M%S
text_double off
target_dir /tmp/motion
snapshot_filename %v-%Y%m%d%H%M%S-snapshot
jpeg_filename %v-%Y%m%d%H%M%S-%q
movie_filename %v-%Y%m%d%H%M%S
timelapse_filename %Y%m%d-timelapse
webcam_port 0
webcam_quality 50
webcam_motion off
webcam_maxrate 1
webcam_localhost on
webcam_limit 0
control_port 0
control_localhost on
control_html_output on
track_type 0
track_auto off
track_motorx 0
track_motory 0
track_maxx 0
track_maxy 0
track_iomojo_id 0
track_step_angle_x 10
track_step_angle_y 10
track_move_wait 10
track_speed 255
track_stepsize 40
quiet on
on_event_end /bin/bash /usr/local/bin/torreta.sh centro
on_picture_save /bin/bash /usr/local/bin/camara.sh aviso %f
on_motion_detected /bin/bash /usr/local/bin/camara.sh mover %i %J %K %L
sql_log_image on
sql_log_snapshot on
sql_log_mpeg off
sql_log_timelapse off
sql_query insert into security(camera, filename, frame, file_type, time_stamp, event_time_stamp) values('%t', '%f', '%q', '%n', '%Y-%m-%d %T', '%C')
</pre>
Son casi todas las opciones por defecto, con unos pocos cambios. Fíjate bien, no te dejes ninguno. Presta especial atención a los scripts de los eventos, ya que son estos los que nos enviarán el email y moverán la cámara.<br />
<h3>
Control de servos</h3>
Como te habrás imaginado, Motion tiene sus propias configuraciones para mover las cámaras de seguridad, pero claro, sólo para modelos compatibles, no para modelos "yo me lo guiso, yo me lo como". En la configuración de Motion, usamos el script /usr/local/bin/torreta.sh es este:<br />
<pre class="brush: bash">#!/bin/bash
# programado por Juanmol para http://rsppi.blogpost.com
servo_horizontal=1
servo_pan=1
servo_vertical=0
servo_tilt=0
estado_pan=/tmp/estado_pan.log
estado_tilt=/tmp/estado_tilt.log
min=0.045
max=0.25
med=0$(echo 'scale=3;('$min'+'$max')/2'|bc)
salto=0.01
dev=/dev/pi-blaster
if [ -e /tmp/estado_pan.log ];
then
pan=$(cat $estado_pan);
tilt=$(cat $estado_tilt);
case $1 in
izquierda)
if (( $(echo "$pan < 0.257" | bc -l) ));
then
pan=0$(echo 'scale=3;'$pan'+'$salto''|bc);
echo $pan > $estado_pan;
fi
;;
derecha)
if (( $(echo "$pan > 0.047" | bc -l) ));
then
pan=0$(echo 'scale=3;'$pan'-'$salto''|bc);
echo $pan > $estado_pan;
fi
;;
arriba)
if (( $(echo "$tilt > 0.067" | bc -l) ));
then
tilt=0$(echo 'scale=3;'$tilt'-'$salto''|bc);
echo $tilt > $estado_tilt;
fi
;;
abajo)
if (( $(echo "$tilt < 0.217" | bc -l) ));
then
tilt=0$(echo 'scale=3;'$tilt'+'$salto''|bc);
echo $tilt > $estado_tilt;
fi
;;
centro)
pan=$med
tilt=$med
echo $tilt > $estado_tilt
echo $pan > $estado_pan
;;
esac
else
echo $med > $estado_tilt;
echo $med > $estado_pan;
fi
#mover
pan=$(cat $estado_pan)
tilt=$(cat $estado_tilt)
echo $servo_pan=$pan > $dev
echo $servo_tilt=$tilt > $dev
</pre>
Podemos usarlo así:<br />
<pre class="brush: bash">./torreta.sh arriba
./torreta.sh derecha
./torreta.sh izquierda
./torreta.sh abajo
./torreta.sh centro
</pre>
Insisto que estas configuraciones son para mis servos, que son perrísimos, tendrás que comprobar cuales son los máximos y mínimos de los tuyos (son 30 segundos, no te asustes).<br />
<h3>
Control de alarmas</h3>
Motion es un poco tosco a la hora de generar los eventos, no permite hacer ajustes muy finos, pero si que devuelve mucha información. En la configuración de Motion llamamos al script /usr/local/bin/camara.sh que es este:<br />
<pre class="brush: bash">#!/bin/bash
# programado por Juanmol para http://rsppi.blogpost.com
echo se recibe $@ >> /tmp/prueba.log
area=$(echo $2*$3 | bc)
areamax=200000
ancho=640
alto=480
moversh=/usr/local/bin/torreta.sh
destinomail=EMAIL_DESTINO@gmail.com
case $1 in
mover)
if [ "$area" -lt "$areamax" ];
then
if [ "$4" -lt "$(echo $ancho/2 | bc)" ];
then
$moversh izquierda &
else
$moversh derecha &
fi
if [ "$5" -lt "$(echo $alto/2 | bc)" ];
then
$moversh arriba &
else
$moversh abajo &
fi
fi
;;
aviso)
if [ "$area" -lt "$areamax" ];
then
echo "$(date)" | mutt -s "Alarma detectada" $destinomail -a $2
fi
;;
esac
</pre>
¡¡OJO!! esos valores son para trabajar con la camera board con resolución 640x480, si quieres usar 1080p tendrás que reajustar un poco.<br />
La idea del script es descartar aquellos eventos en los que la cantidad de píxeles que han provocado la alarma sea muy grande. Esto tiene sentido cuando tenemos la cámara en interior y hay cambios en la iluminación. Además ten en cuenta que cuando la cámara se mueve, la imagen que captura es 100% distinta, por lo que tampoco nos interesa que nos genere una alarma por eso.<br />
<h3>
Resultado</h3>
Por si no te queda claro para que es todo esto, te pongo un vídeo (lo siento de nuevo por la calidad):<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/6lIomJSbsAE?feature=player_embedded' frameborder='0'></iframe></div>
<br />
Tendrás mucho mejor resultado si cámara está en el techo o al menos a altura humana. Y por supuesto a cierta distancia de la posible alarma.<br />
Finalmente puedes hacer un script que lo ejecute todo /usr/local/bin/seguridad.sh<br />
<pre class="brush: bash">#!/bin/bash
# programado por Juanmol para http://rsppi.blogspot.com
sesion=$(date +%s)
mkdir /tmp/$sesion/
screen -dmS raspistil raspistill -w 640 -h 480 -q 10 -o /tmp/$sesion/pic.jpg -tl 100 -t 9999999 -th 0:0:0
screen -dmS streamer /usr/src/mjpg-streamer/mjpg-streamer/mjpg_streamer -i "/usr/src/mjpg-streamer/mjpg-streamer/input_file.so -f /tmp/$sesion/" -o "/usr/src/mjpg-streamer/mjpg-streamer/output_http.so -w /usr/src/mjpg-streamer/mjpg-streamer/www/"
screen -dmS motion motion
</pre>
<h3>
Bonus: ¡¡cuidado con el gatete!!</h3>
Cuando los servos se mueven, hacen ruido ... un poco. Cabe la posibilidad de que a tu gato le llame la atención el ruido ...<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGkTZOv8G9ZfEUE0HHLpQbYpnR33dSA33sKHFsSC4KWEOfXp8IkWZH7-lvAnPRgzGjbhZYlAD6_XGmngyyB0VsbSms9i9dmRN-bZeEG78I5D-468dIlBNFwkf0TwexF2zMux9uII2j9MM/s1600/gatete2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGkTZOv8G9ZfEUE0HHLpQbYpnR33dSA33sKHFsSC4KWEOfXp8IkWZH7-lvAnPRgzGjbhZYlAD6_XGmngyyB0VsbSms9i9dmRN-bZeEG78I5D-468dIlBNFwkf0TwexF2zMux9uII2j9MM/s1600/gatete2.png" height="242" width="320" /></a></div>
... puede que el gatete sea un poco curioso ...<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtbwB_eM7Ne3FPeOK6K3p17cdOIyX6_eoO9dctUGoZSC_VaJBvZNnhDALMRd3mcrCSYu-jopmhZwPsyNxVhONvXUlAkWvikeX2Tms4hJ6PeV9cQzLFoqom6HRZ3qj0kNdzbdQxe9VGpnU/s1600/gatete3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtbwB_eM7Ne3FPeOK6K3p17cdOIyX6_eoO9dctUGoZSC_VaJBvZNnhDALMRd3mcrCSYu-jopmhZwPsyNxVhONvXUlAkWvikeX2Tms4hJ6PeV9cQzLFoqom6HRZ3qj0kNdzbdQxe9VGpnU/s1600/gatete3.png" height="242" width="320" /></a></div>
... puede que se aburra ...<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9VcevzoBWfWzr2OllvTUObtbwQ7caxDhvEPKm6MaJj6NxQDnrOxyImiNi4k10y0l8l9cPYMA3KfgWEdvABwt_0XtIrORUfMzCPa_w_aJ4vLyur_qDprwS9fqLqriVc3mnIBvRJ3ku7Uo/s1600/gatete5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9VcevzoBWfWzr2OllvTUObtbwQ7caxDhvEPKm6MaJj6NxQDnrOxyImiNi4k10y0l8l9cPYMA3KfgWEdvABwt_0XtIrORUfMzCPa_w_aJ4vLyur_qDprwS9fqLqriVc3mnIBvRJ3ku7Uo/s1600/gatete5.png" height="239" width="320" /></a></div>
... puede incluso que sea un gato ninja! ...<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghB_nUDRVrQJB4utzbZOwHQ1QMazeVKzwhzYuufglZqXrji-fi7eeuD7JFGBRhGeoDph1PXgCBIfYsn5m_G71rUJzCRsfewhlC_BWB4lFvY_Z5n9tLWm4FohnGfk9JcVd9E-5hect2fpE/s1600/gatete6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghB_nUDRVrQJB4utzbZOwHQ1QMazeVKzwhzYuufglZqXrji-fi7eeuD7JFGBRhGeoDph1PXgCBIfYsn5m_G71rUJzCRsfewhlC_BWB4lFvY_Z5n9tLWm4FohnGfk9JcVd9E-5hect2fpE/s1600/gatete6.png" height="234" width="320" /></a></div>
... el mio además de curioso y ninja ... no le gusta la cámara ...<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9qpZQaQGkwbqa3Q1VK9aSk-jkFdkTjvNAFCUo4Kb3SpUwFZtoQOGZhTuYSD5bQizoPFD50rrMRy7D_fhX_9-K4zts8ex1FFJOZeg-x8DZy3_zKfsgbk37PxanQhf_4NF6EU_lwnKUQkk/s1600/gatete7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9qpZQaQGkwbqa3Q1VK9aSk-jkFdkTjvNAFCUo4Kb3SpUwFZtoQOGZhTuYSD5bQizoPFD50rrMRy7D_fhX_9-K4zts8ex1FFJOZeg-x8DZy3_zKfsgbk37PxanQhf_4NF6EU_lwnKUQkk/s1600/gatete7.png" height="239" width="320" /></a></div>
... y no paró hasta que la tiró al suelo ...<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiw7ClY_sr_IHt6Cp5oO4HyE5QLqs8-J7YEmH1OLabIzFrK4DhpShsTlyZiZTUmJyKNrlIPq6GRuFv-ikAHhO22vL5hAxaTh4kiJf0L0sgx0_gTonefpHFQJ7OtrWqzmgQHZ3D5cldHiX8/s1600/gatete9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiw7ClY_sr_IHt6Cp5oO4HyE5QLqs8-J7YEmH1OLabIzFrK4DhpShsTlyZiZTUmJyKNrlIPq6GRuFv-ikAHhO22vL5hAxaTh4kiJf0L0sgx0_gTonefpHFQJ7OtrWqzmgQHZ3D5cldHiX8/s1600/gatete9.png" height="239" width="320" /></a></div>
<br />Unknownnoreply@blogger.com27tag:blogger.com,1999:blog-1180468193148611581.post-56330554334210071462013-08-13T19:39:00.001+02:002013-08-13T19:42:58.973+02:00Control PWM por software (parte 2)<h2>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgoetirixMrt90fGDBMMiE_6HwYzvXp-Z4aIPEPU18wRXozKf0BJDnflNZdeC0OQlIhzqJFgYVW20mC7BQiyto5q_tyG6VH7I6zvwNDIqrFuDcIwdF6tSRgbaL7GHP63021kdbT21ONmc/s1600/pi-servo.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgoetirixMrt90fGDBMMiE_6HwYzvXp-Z4aIPEPU18wRXozKf0BJDnflNZdeC0OQlIhzqJFgYVW20mC7BQiyto5q_tyG6VH7I6zvwNDIqrFuDcIwdF6tSRgbaL7GHP63021kdbT21ONmc/s1600/pi-servo.png" height="200" width="154" /></a>
para controlar 2 servo-motores</h2>
Hola de nuevo!. Llevo unos días probando <a href="https://github.com/sarfata/pi-blaster/" target="_blank">pi-blaster</a>, se trata de otro modulador de PWM por software, para nuestros Raspberrys. Ya había probado <a href="http://rsppi.blogspot.com.es/2013/01/control-pwm-por-software.html" target="_blank">servoblaster</a>, que va de maravilla, pero este va igual de bien y consume mucho menos recursos.<br />
<br />
<a name='more'></a>Pi-blaster permite controlar el PWM de 8 GPIOs, para nuestro ejemplo vamos a limitarlos a 2 GPIOs, para poder usar el resto de GPIOs para otros menesteres. La instalación es facilísima, primero descargamos:<br />
<pre class="brush: bash">cd /usr/src
git clone https://github.com/sarfata/pi-blaster.git
cd pi-blaster
</pre>
si lo dejamos tal cual, tendremos los 8 GPIOs listos para modular PWM. Así que modificamos pi-blaster.c para dejarlo en 2 GPIOs. Esta es la parte del código original:<br />
<pre class="brush: bash">static uint8_t pin2gpio[] = {
4, // P1-7
17, // P1-11
18, // P1-12
21, // P1-13
22, // P1-15
23, // P1-16
24, // P1-18
25, // P1-22
};
</pre>
y esta es como lo dejamos para que tenga sólo 2:<br />
<pre class="brush: bash">static uint8_t pin2gpio[] = {
17, // P1-11
18, // P1-12
};
</pre>
El GPIO 17 responderá al código 0 y el GPIO 18 responderá al código 1. Después de hacer unas pruebas, veo que la modulación mínima a la que responden estos servos de juguete es 0.045 y como máximo 0.25, con una precisión la mar de aceptable 0.00001. Compilamos con:<br />
<pre class="brush: bash">
make
make install</pre>
Para usarlo:<br />
<pre class="brush: bash">echo "0=0.045" > /dev/pi-blaster
echo "1=0.25" > /dev/pi-blaster
</pre>
con eso estamos moviendo los servos a esas posiciones. Podemos hacer un bonito script /usr/local/bin/servo.sh:<br />
<pre class="brush: bash">#!/bin/bash
# prueba de servos
while ((1));
do
for n in $(seq 0.045 0.00001 0.25); do echo "$1=$n" > /dev/pi-blaster ; done
for n in $(seq 0.25 -0.00001 0.045); do echo "$1=$n" > /dev/pi-blaster ; done
done
</pre>
y lo usamos:<br />
<pre class="brush: bash">./servo.sh 0 &
./servo.sh 1 &
</pre>
facilísimo. Nos permitimos el lujo de montar unos brazos pan-tilt, la instalación es bastante provisional, no me acuséis de ser un cutre (al menos no por esto):<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWnDAh64xWZbjLP3CwnHwgX13tUb2H-8DujSVdWseCB_Sgi4lgrmT-QP8KWM71lm24eds-tmBn1GCFV05HYNewPl02HUwa_x3Ia9nasOxyLrmPoi8iXEinEQMB4Ft22p0VbIVcD_b05A8/s1600/2013-08-13+17.39.56.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWnDAh64xWZbjLP3CwnHwgX13tUb2H-8DujSVdWseCB_Sgi4lgrmT-QP8KWM71lm24eds-tmBn1GCFV05HYNewPl02HUwa_x3Ia9nasOxyLrmPoi8iXEinEQMB4Ft22p0VbIVcD_b05A8/s1600/2013-08-13+17.39.56.jpg" height="240" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDKz0kN4jPY9ab7qVA5p15QskHLYkjJq05Djazs6C9PI29asmiCl02QtntFDoggxJV4ptGrajrp9emoQEDWENVn1yJQGCs2_nLEYM5E6F0_Trp7PHutQo86-QhWL97S8ByxsJrboYJ-cw/s1600/2013-08-13+17.40.04.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDKz0kN4jPY9ab7qVA5p15QskHLYkjJq05Djazs6C9PI29asmiCl02QtntFDoggxJV4ptGrajrp9emoQEDWENVn1yJQGCs2_nLEYM5E6F0_Trp7PHutQo86-QhWL97S8ByxsJrboYJ-cw/s1600/2013-08-13+17.40.04.jpg" height="240" width="320" /></a></div>
<br />
Hay miles de vídeos en youtube con esto mismo, mis servos son demasiado baratos/malos y requieren más alimentación eléctrica que la que el Raspberry es capaz de proveer, este es mi esquema eléctrico:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPHe4He2tSVCZQhNrzRYzPFn6cVLyVIerA7yyGcS9y-vrmAegnpj0RaY39oZumS49jG4BjIRCdDoQ5aUdCY6D0G9E1oQqu_tWVPzAuy-GP1INjCeZ5Abp9lrKcXsBcT-UgsHmhPYCpvoo/s1600/2servos_bb.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPHe4He2tSVCZQhNrzRYzPFn6cVLyVIerA7yyGcS9y-vrmAegnpj0RaY39oZumS49jG4BjIRCdDoQ5aUdCY6D0G9E1oQqu_tWVPzAuy-GP1INjCeZ5Abp9lrKcXsBcT-UgsHmhPYCpvoo/s1600/2servos_bb.png" height="216" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8UucxvPCzXjAqQBf23O7hTIlFQt5cyPIVGPkEo7mFUNyLH4qvWjVtteuBCwnoNFel73fUqfwmSLENecAKmeC4HEfrNUA4ADq9YWOu7agWzcFCQHeEIFA51G0VN68bFjY4D1KqCmfaQt0/s1600/2servos_esquemadia.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8UucxvPCzXjAqQBf23O7hTIlFQt5cyPIVGPkEo7mFUNyLH4qvWjVtteuBCwnoNFel73fUqfwmSLENecAKmeC4HEfrNUA4ADq9YWOu7agWzcFCQHeEIFA51G0VN68bFjY4D1KqCmfaQt0/s1600/2servos_esquemadia.png" height="302" width="320" /></a></div>
<br />
Y un vídeo de ejemplo (lo siento por la calidad del vídeo, prometo mejorarla):<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/v4NDnvdVKyw?feature=player_embedded' frameborder='0'></iframe></div>
En el siguiente post, configuraré motion para que haga de cámara de seguridad con seguimiento, casi ná!.Unknownnoreply@blogger.com16tag:blogger.com,1999:blog-1180468193148611581.post-27115857851900475362013-08-08T12:35:00.000+02:002013-08-08T12:35:12.743+02:00Streaming de video desde RaspberryPi (parte 4)<h2>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLVsH8of3He8bnFKGMIXf66GHEyyK-OQfZkMJQEmOAA2yIOhud8AxUHuKsw9TpgjwHPs4rnHosu5V1QxaAF-eEehBIzqV0Ubw0LmqmaiYTo1svKEbw5GhHnbOazv0WzLnPm-H3bDBsiL4/s1600/pi-cam.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLVsH8of3He8bnFKGMIXf66GHEyyK-OQfZkMJQEmOAA2yIOhud8AxUHuKsw9TpgjwHPs4rnHosu5V1QxaAF-eEehBIzqV0Ubw0LmqmaiYTo1svKEbw5GhHnbOazv0WzLnPm-H3bDBsiL4/s1600/pi-cam.png" height="200" width="170" /></a>
Con la Raspicam (Raspberry Pi Camera Board)</h2>
Bueno, despues de 583 intentos más, retomo el tema del videostreaming, en este caso con la raspicam, la cámara "oficial" de Raspberry Pi, con muy buena pinta, no muy cara ... pero que en mi caso es un poco desilusionante (por ahora).<br />
<br />
<a name='more'></a>No voy a entrar a especificar como instalar y probar la raspicam, porque para eso tenemos la <a href="http://www.raspberrypi.org/archives/tag/camera-board" target="_blank">web oficial</a>, con todo explicado muy clarito.<br />
Una vez que hemos comprobado que efectivamente funciona, te darás cuenta que <b>no te crea un dispositivo de video linux</b>, del tipo /dev/videoX, como si haría cualquier webcam usb. Se supone que como está en beta (seguramente nunca pasará de ahí) "si quieres que haga algo, prográmalo tú mismo"<br />
¿Y esto qué quiere decir? Pues que en realidad la raspicam es un dispositivo externo de vídeo por lo que la vamos a pasar canutas para poder trastearla.<br />
Después de pelearme con el cacharro y ver 200 ejemplos en youtube, google, foros, grupos ... he visto que la mejor forma de usarla para hacer streaming, es capturando fotos, por lo que la característica de "30 fps a 1080p", mejor la vamos olvidando.<br />
Bueno, necesitamos mjpg-streamer, que he instalado de nuevo siguiendo <a href="http://rsppi.blogspot.com.es/2013/01/streaming-de-video-desde-raspberrypi.html" target="_blank">mis propias instrucciones</a>.<br />
<h3>
Capturando fotogramas</h3>
Vamos a tener una tasa de refresco de 2 FPS (más o menos) con hasta 1080p de calidad. Para ello ejecutamos:<br />
<pre class="brush: bash">mkdir /tmp/stream/
raspistill -w 640 -h 480 -q 10 -o /tmp/stream/pic.jpg -tl 100 -t 9999999 -th 0:0:0
</pre>
Esto captura a la calidad que le indiquemos (640x480 para las pruebas) y lo guarda continuamente en un único archivo de imagen /tmp/stream/pic.jpg. La calidad esta a un 10% (parámetro -q), cuanto más la aumentes, más ancho de banda necesitarás.<br />
<br />
Captura a 640x480:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguSdWsxq8_aLBXR4RtydPxHWfh911xF4XMOCveN-PQv51zeUvwpwkP3ZwhXOH2J94GksAuF6ewkvg4DAZU99Yz0ZPOtaAQ25BYghKNadMm3iRKedqa4WGONi26RnFXEB7FgpI0NV-AiwM/s1600/640x480.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguSdWsxq8_aLBXR4RtydPxHWfh911xF4XMOCveN-PQv51zeUvwpwkP3ZwhXOH2J94GksAuF6ewkvg4DAZU99Yz0ZPOtaAQ25BYghKNadMm3iRKedqa4WGONi26RnFXEB7FgpI0NV-AiwM/s1600/640x480.jpg" height="150" width="200" /></a></div>
Captura a 1920x1080:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4k0aW211wowTG0Ml6rch_hz2dw5fX4pZhfmyh2paUaykVIEr3PtM_trjzXgeWvEGKoAG_4Wuw2c1wZJ6EqGANvSxKfj0SCIcUCnbO3JvbgV_XZDqDJXmbOK12nQXNk94M6N9UPqdTsvo/s1600/1920x1080.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4k0aW211wowTG0Ml6rch_hz2dw5fX4pZhfmyh2paUaykVIEr3PtM_trjzXgeWvEGKoAG_4Wuw2c1wZJ6EqGANvSxKfj0SCIcUCnbO3JvbgV_XZDqDJXmbOK12nQXNk94M6N9UPqdTsvo/s1600/1920x1080.jpg" height="180" width="320" /></a></div>
<br />
<h3>
Configurando el streaming</h3>
Como ya he comentado, necesitamos tener instalado el mjpeg-streamer. Para lanzarlo correctamente, ejecutaremos:<br />
<pre class="brush: bash">cd /usr/src/mjpg-streamer/mjpg-streamer/
/mjpg_streamer -i "/usr/src/mjpg-streamer/mjpg-streamer/input_file.so -f /tmp/stream/" -o "/usr/src/mjpg-streamer/mjpg-streamer/output_http.so -w /usr/src/mjpg-streamer/mjpg-streamer/www/"
</pre>
Creo que no necesita más explicaciones. Ahora desde un navegador (que puede ser el del Android) vamos a http://ip_del_raspberry:8080 y ahí veremos una web con varios ejemplos, vamos al menú de la izquierda y seleccionamos stream, que es el más compatible. Puedes directamente ir a http://ip_del_raspberry:8080/stream_simple.html que de hecho es la url que tendrás que configurar en ZoneMinder o cualquier otro.<br />
<h3>
Resultados</h3>
En la parte de calidad, es perfecto, 1080p, ahí no hay quejas. La tasa de refresco es algo baja, unos 2 FPS, pero aún así es mayor que las cámaras de seguridad convencionales.<br />
La mejor parte es sin duda la carga de micro, que no llega ni al 2%:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqHmosZlHgcls0N5tBsv1UW0L1uK8Tw4WpUie0sJl8jZL9i2jdzOWsvgj50xl3TAntt4nj3P42SnoEfbJYEI7De_KO10shhZJDjw7b-eMpcmj7b1Ke4STT0XW0Nwx78ZEw0INkAjawJno/s1600/top_raspicam_mjpg-streamer.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqHmosZlHgcls0N5tBsv1UW0L1uK8Tw4WpUie0sJl8jZL9i2jdzOWsvgj50xl3TAntt4nj3P42SnoEfbJYEI7De_KO10shhZJDjw7b-eMpcmj7b1Ke4STT0XW0Nwx78ZEw0INkAjawJno/s1600/top_raspicam_mjpg-streamer.png" height="128" width="320" /></a></div>
Lo siguiente es combinar la raspicam con dos servos para hacer una torreta de vigilancia e integrarla con OpenCV para detectar movimientos, gestos, caras y personas. Y posiblemente le ponga un arma para matar zombies.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-XGYVmEEWCzkX71WaeuE0REl3mDFR8f9SPvCU261iqddvvS8VqJ3v0IgEh4x7ZaiaApJH5RQGdW9IMvx51CkudD89ULlbSeyNi86Xh2KbJmP4dQSGL1EdxBkCIeeK7w4y_4a0C5potwI/s1600/itssomething-cam.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-XGYVmEEWCzkX71WaeuE0REl3mDFR8f9SPvCU261iqddvvS8VqJ3v0IgEh4x7ZaiaApJH5RQGdW9IMvx51CkudD89ULlbSeyNi86Xh2KbJmP4dQSGL1EdxBkCIeeK7w4y_4a0C5potwI/s1600/itssomething-cam.png" height="289" width="320" /></a></div>
Unknownnoreply@blogger.com13tag:blogger.com,1999:blog-1180468193148611581.post-85536516605728426692013-07-26T07:52:00.000+02:002013-07-29T17:41:42.272+02:00Control de relé mecánico<h2>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjfSmvl07hosipPsxdPyT98EeeoYw3WSd0vHhZiUT2cU_5sJegEx6KL4nFbFqs8rTwH1pZUkEROiVXpGduLwtnlosbauHnu0PENtRslnlk4_hHl9opmLYUfzUmUlnALu9w_BI9EazkKh4/s1600/pi_rele.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjfSmvl07hosipPsxdPyT98EeeoYw3WSd0vHhZiUT2cU_5sJegEx6KL4nFbFqs8rTwH1pZUkEROiVXpGduLwtnlosbauHnu0PENtRslnlk4_hHl9opmLYUfzUmUlnALu9w_BI9EazkKh4/s1600/pi_rele.png" height="200" width="155" /></a>
... apagando y encendiendo de forma automática</h2>
Hace un tiempo Xesco me comentó que tenía un problema con su ruter ADSL, se le queda "pillao" y la única solución es reiniciarlo. Cuando no hay nadie en casa es un fastidio perder todo un día de descargas y demás frikerias. Poco después, el Borre me comentó que tendríamos que poner un arduino controlando la alimentación de los primarios, para solucionar posibles caídas de la línea. La solución es la misma en los dos casos: un relé y RaspberryPi.<br />
<br />
<a name='more'></a>Un relé es un interruptor accionado por una corriente de baja tensión. En nuestro caso usaremos poco menos de 5V para alimentar el relé, que cerrará/abrirá un circuito de 220V. Este es nuestro relé:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEia86YFfoB_eS9v55wndC1lKwBCkwJxmF1qK13BBEYmrjqe1I9kH5nCXgaRyhM50RbgwIXB3WKXu3RbEIO5bza0XChxfkyNK7PodyqnC6Q9KZOParZ3vdG7KT3RmlsXygyHRk0FBb-uNZM/s1600/rele.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEia86YFfoB_eS9v55wndC1lKwBCkwJxmF1qK13BBEYmrjqe1I9kH5nCXgaRyhM50RbgwIXB3WKXu3RbEIO5bza0XChxfkyNK7PodyqnC6Q9KZOParZ3vdG7KT3RmlsXygyHRk0FBb-uNZM/s1600/rele.jpg" height="200" width="200" /></a></div>
Cuesta 4€ en Amazon y trae dos módulos, podemos controlar 2 circuitos independientes de 220V. Por favor<b> FÍJATE MUY BIEN EN LOS LIMITES ELÉCTRICOS DEL RELÉ</b>, no querrás quemar tu RaspberryPi ... o tu casa.<br />
<h3>
Por partes:</h3>
Esta parte es la que se encarga de conmutar el circuito de alta tensión, recuerda dos circuitos:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsiFw2uH_c3EK_QekSnsxZoEJ5iZ0HwlZgUNAwVc25nLuRAKNEY8L1eIBmh7fvFh6QUyPOI5f2yxTHktJrFEPjoplayyaSPA18nmZ8Tdl4Yt4vXqfDuQLj11yc7ZYUdneXDuwsYYW0wBI/s1600/rele-1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsiFw2uH_c3EK_QekSnsxZoEJ5iZ0HwlZgUNAwVc25nLuRAKNEY8L1eIBmh7fvFh6QUyPOI5f2yxTHktJrFEPjoplayyaSPA18nmZ8Tdl4Yt4vXqfDuQLj11yc7ZYUdneXDuwsYYW0wBI/s1600/rele-1.jpg" height="320" width="320" /></a></div>
Vamos a fijarnos en el etiquetado como K1. Las líneas indican, estando en estado de reposo, si el circuito esta abierto o cerrado. Así que:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf1HsPz5fsPj6Ubs2K8pyL6RNV4kLBGlkeZnhigo8BZmMAm4s4a7NGRqNPqUtPDnd2c7DEW6R_58qR_Tt2yu5inkKigw8zsarh1O1rEhjC7KJkodJ5xZ4IXuFt_SFG2W9rXzR0SiawLDQ/s1600/rele-2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf1HsPz5fsPj6Ubs2K8pyL6RNV4kLBGlkeZnhigo8BZmMAm4s4a7NGRqNPqUtPDnd2c7DEW6R_58qR_Tt2yu5inkKigw8zsarh1O1rEhjC7KJkodJ5xZ4IXuFt_SFG2W9rXzR0SiawLDQ/s1600/rele-2.jpg" height="320" width="320" /></a></div>
Si cerramos el circuito entre 1 y 2, el circuito estará normalmente abierto. Si cerramos entre 2 y 3 el circuito estará normalmente cerrado. Si cerramos entre 1 y 3 ... no hacemos ná.<br />
La otra parte que nos interesa del relé es esta:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu9lwA5t0P3aQqB9qy3m1ioMbW0srZcxJY00JT1O7VLC_OJ256ZyCREyMK6UDEtmbjQA4_cZ81RNl5da86fdK_u2vPopNx0dPwoIYvoxiVNq9rpF2j-N7HVNK0DHBlq0FbI_NJ1VBfffA/s1600/rele-3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu9lwA5t0P3aQqB9qy3m1ioMbW0srZcxJY00JT1O7VLC_OJ256ZyCREyMK6UDEtmbjQA4_cZ81RNl5da86fdK_u2vPopNx0dPwoIYvoxiVNq9rpF2j-N7HVNK0DHBlq0FbI_NJ1VBfffA/s1600/rele-3.jpg" height="320" width="320" /></a></div>
En GND conectamos la tierra (0V) en Vcc tenemos que conectar 5V y para actuar en K1, conectaremos IN1 a un GPIO. Como tenemos pocos recursos, alimentaremos el relé con menos voltios, los que nos de el RaspberryPi.<br />
<h3>
El circuito</h3>
Nuestro circuito queda de la siguiente forma:<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhakk3ZlGoQgg6BEqwsb0ueDAwUXaVnHC0gVjcbUOMQhAKD81QLZMm69p93RVgiC5a93RkjpSLPuX5J0PlMqScrFLrBGMGZOtl4KCyjZQk4wphoIKCBDacmSqibnfIkGl_KA-g5cufXbb8/s1600/esquema_rele_v2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhakk3ZlGoQgg6BEqwsb0ueDAwUXaVnHC0gVjcbUOMQhAKD81QLZMm69p93RVgiC5a93RkjpSLPuX5J0PlMqScrFLrBGMGZOtl4KCyjZQk4wphoIKCBDacmSqibnfIkGl_KA-g5cufXbb8/s1600/esquema_rele_v2.png" height="373" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Más simple no puede ser, tenemos el circuito de 220V normalmente cerrado y lo conmutaremos con el GPIO 18 (gracias por la observacion @lopz)<br />
<h3>
Pruebas</h3>
Para la demostración, he cambiado el enchufe hembra, por un casquillo con su bombilla correspondiente, es exactamente lo mismo y se ve mucho más claro. Para el que no le quede claro, normalmente cerrado significa esto:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKXrs1c3V-6QC7orWdFcd3TeFg3-3Nn38qrBnNFfFDSHpSLLRdftxYoRAjTAzxLPvPFUTQFEfZZX95V6GiSev-LqoQfbLnl6TZ6S_m-7mZ9ytdA1WHr4MNpHinKeOx30gu6c86u5lL0K4/s1600/IMG-20130725-WA0001.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKXrs1c3V-6QC7orWdFcd3TeFg3-3Nn38qrBnNFfFDSHpSLLRdftxYoRAjTAzxLPvPFUTQFEfZZX95V6GiSev-LqoQfbLnl6TZ6S_m-7mZ9ytdA1WHr4MNpHinKeOx30gu6c86u5lL0K4/s1600/IMG-20130725-WA0001.jpg" height="240" width="320" /></a></div>
Como veis, el circuito esta cerra sin necesidad de actuar sobre el relé. Terminamos de conectarlo todo.<br />
En el RaspberryPi instalaremos <a href="http://rsppi.blogspot.com.es/2012/07/alarma-laser-usando-gpio.html" target="_blank">wiringpi </a>y no hay que instalar nada más. En el Raspberry ejecutamos:<br />
<pre class="brush: bash">gpio -g mode 18 out
</pre>
<br />
y ahora para apagar la luz ejecutamos:<br />
<pre class="brush: bash">gpio -g write 18 0
</pre>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2noMjvL0gLx8io7-POBdb-5b4ny25QNlilEWIVtw9SepHNf33-mWZZM3PUeWMwFxZAZiI3aBMjYJLJQjFzlekchh8frG3Jya2IPpUX0GgdhsxmBg6IEvrGRjWvR6sHY6oYwTYtYyKSwQ/s1600/IMG-20130725-WA0003.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2noMjvL0gLx8io7-POBdb-5b4ny25QNlilEWIVtw9SepHNf33-mWZZM3PUeWMwFxZAZiI3aBMjYJLJQjFzlekchh8frG3Jya2IPpUX0GgdhsxmBg6IEvrGRjWvR6sHY6oYwTYtYyKSwQ/s1600/IMG-20130725-WA0003.jpg" height="240" width="320" /></a></div>
y para encenderla:<br />
<pre class="brush: bash">gpio -g write 18 1
</pre>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-lFyWfFWDyhCTNpXB7zUuZgM2vLYgrIjVyBc91xnq3K4uT4cRnD-URx67ZkL5Z27klcXS296dsPyirlUnkufweNLoa1Xov3UzdQPz1JXYwh1j2FY3xnTqZh8g8FbQmXxFeRkqCz8xrzI/s1600/IMG-20130725-WA0007.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-lFyWfFWDyhCTNpXB7zUuZgM2vLYgrIjVyBc91xnq3K4uT4cRnD-URx67ZkL5Z27klcXS296dsPyirlUnkufweNLoa1Xov3UzdQPz1JXYwh1j2FY3xnTqZh8g8FbQmXxFeRkqCz8xrzI/s1600/IMG-20130725-WA0007.jpg" height="240" width="320" /></a></div>
y para apagar la luz ejecutamos:<br />
<pre class="brush: bash">gpio -g write 18 0
</pre>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2noMjvL0gLx8io7-POBdb-5b4ny25QNlilEWIVtw9SepHNf33-mWZZM3PUeWMwFxZAZiI3aBMjYJLJQjFzlekchh8frG3Jya2IPpUX0GgdhsxmBg6IEvrGRjWvR6sHY6oYwTYtYyKSwQ/s1600/IMG-20130725-WA0003.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2noMjvL0gLx8io7-POBdb-5b4ny25QNlilEWIVtw9SepHNf33-mWZZM3PUeWMwFxZAZiI3aBMjYJLJQjFzlekchh8frG3Jya2IPpUX0GgdhsxmBg6IEvrGRjWvR6sHY6oYwTYtYyKSwQ/s1600/IMG-20130725-WA0003.jpg" height="240" width="320" /></a></div>
y para encenderla:<br />
<pre class="brush: bash">gpio -g write 18 1
</pre>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-lFyWfFWDyhCTNpXB7zUuZgM2vLYgrIjVyBc91xnq3K4uT4cRnD-URx67ZkL5Z27klcXS296dsPyirlUnkufweNLoa1Xov3UzdQPz1JXYwh1j2FY3xnTqZh8g8FbQmXxFeRkqCz8xrzI/s1600/IMG-20130725-WA0007.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-lFyWfFWDyhCTNpXB7zUuZgM2vLYgrIjVyBc91xnq3K4uT4cRnD-URx67ZkL5Z27klcXS296dsPyirlUnkufweNLoa1Xov3UzdQPz1JXYwh1j2FY3xnTqZh8g8FbQmXxFeRkqCz8xrzI/s1600/IMG-20130725-WA0007.jpg" height="240" width="320" /></a></div>
apagar la luz ejecutamos:<br />
<pre class="brush: bash">gpio -g write 18 0
</pre>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2noMjvL0gLx8io7-POBdb-5b4ny25QNlilEWIVtw9SepHNf33-mWZZM3PUeWMwFxZAZiI3aBMjYJLJQjFzlekchh8frG3Jya2IPpUX0GgdhsxmBg6IEvrGRjWvR6sHY6oYwTYtYyKSwQ/s1600/IMG-20130725-WA0003.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2noMjvL0gLx8io7-POBdb-5b4ny25QNlilEWIVtw9SepHNf33-mWZZM3PUeWMwFxZAZiI3aBMjYJLJQjFzlekchh8frG3Jya2IPpUX0GgdhsxmBg6IEvrGRjWvR6sHY6oYwTYtYyKSwQ/s1600/IMG-20130725-WA0003.jpg" height="240" width="320" /></a></div>
y para encenderla:<br />
<pre class="brush: bash">gpio -g write 18 1
</pre>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-lFyWfFWDyhCTNpXB7zUuZgM2vLYgrIjVyBc91xnq3K4uT4cRnD-URx67ZkL5Z27klcXS296dsPyirlUnkufweNLoa1Xov3UzdQPz1JXYwh1j2FY3xnTqZh8g8FbQmXxFeRkqCz8xrzI/s1600/IMG-20130725-WA0007.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-lFyWfFWDyhCTNpXB7zUuZgM2vLYgrIjVyBc91xnq3K4uT4cRnD-URx67ZkL5Z27klcXS296dsPyirlUnkufweNLoa1Xov3UzdQPz1JXYwh1j2FY3xnTqZh8g8FbQmXxFeRkqCz8xrzI/s1600/IMG-20130725-WA0007.jpg" height="240" width="320" /></a></div>
apagar la luz ejecutamos:<br />
<pre class="brush: bash">gpio -g write 18 0
</pre>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2noMjvL0gLx8io7-POBdb-5b4ny25QNlilEWIVtw9SepHNf33-mWZZM3PUeWMwFxZAZiI3aBMjYJLJQjFzlekchh8frG3Jya2IPpUX0GgdhsxmBg6IEvrGRjWvR6sHY6oYwTYtYyKSwQ/s1600/IMG-20130725-WA0003.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2noMjvL0gLx8io7-POBdb-5b4ny25QNlilEWIVtw9SepHNf33-mWZZM3PUeWMwFxZAZiI3aBMjYJLJQjFzlekchh8frG3Jya2IPpUX0GgdhsxmBg6IEvrGRjWvR6sHY6oYwTYtYyKSwQ/s1600/IMG-20130725-WA0003.jpg" height="240" width="320" /></a></div>
y para encenderla:<br />
<pre class="brush: bash">gpio -g write 18 1
</pre>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-lFyWfFWDyhCTNpXB7zUuZgM2vLYgrIjVyBc91xnq3K4uT4cRnD-URx67ZkL5Z27klcXS296dsPyirlUnkufweNLoa1Xov3UzdQPz1JXYwh1j2FY3xnTqZh8g8FbQmXxFeRkqCz8xrzI/s1600/IMG-20130725-WA0007.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-lFyWfFWDyhCTNpXB7zUuZgM2vLYgrIjVyBc91xnq3K4uT4cRnD-URx67ZkL5Z27klcXS296dsPyirlUnkufweNLoa1Xov3UzdQPz1JXYwh1j2FY3xnTqZh8g8FbQmXxFeRkqCz8xrzI/s1600/IMG-20130725-WA0007.jpg" height="240" width="320" /></a></div>
<br />
apagar la luz ejecutamos:<br />
<pre class="brush: bash">gpio -g write 18 0
</pre>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2noMjvL0gLx8io7-POBdb-5b4ny25QNlilEWIVtw9SepHNf33-mWZZM3PUeWMwFxZAZiI3aBMjYJLJQjFzlekchh8frG3Jya2IPpUX0GgdhsxmBg6IEvrGRjWvR6sHY6oYwTYtYyKSwQ/s1600/IMG-20130725-WA0003.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2noMjvL0gLx8io7-POBdb-5b4ny25QNlilEWIVtw9SepHNf33-mWZZM3PUeWMwFxZAZiI3aBMjYJLJQjFzlekchh8frG3Jya2IPpUX0GgdhsxmBg6IEvrGRjWvR6sHY6oYwTYtYyKSwQ/s1600/IMG-20130725-WA0003.jpg" height="240" width="320" /></a></div>
y para encenderla:<br />
<pre class="brush: bash">gpio -g write 18 1
</pre>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-lFyWfFWDyhCTNpXB7zUuZgM2vLYgrIjVyBc91xnq3K4uT4cRnD-URx67ZkL5Z27klcXS296dsPyirlUnkufweNLoa1Xov3UzdQPz1JXYwh1j2FY3xnTqZh8g8FbQmXxFeRkqCz8xrzI/s1600/IMG-20130725-WA0007.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-lFyWfFWDyhCTNpXB7zUuZgM2vLYgrIjVyBc91xnq3K4uT4cRnD-URx67ZkL5Z27klcXS296dsPyirlUnkufweNLoa1Xov3UzdQPz1JXYwh1j2FY3xnTqZh8g8FbQmXxFeRkqCz8xrzI/s1600/IMG-20130725-WA0007.jpg" height="240" width="320" /></a></div>
apagar la luz ejecutamos:<br />
<pre class="brush: bash">gpio -g write 18 0
</pre>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2noMjvL0gLx8io7-POBdb-5b4ny25QNlilEWIVtw9SepHNf33-mWZZM3PUeWMwFxZAZiI3aBMjYJLJQjFzlekchh8frG3Jya2IPpUX0GgdhsxmBg6IEvrGRjWvR6sHY6oYwTYtYyKSwQ/s1600/IMG-20130725-WA0003.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2noMjvL0gLx8io7-POBdb-5b4ny25QNlilEWIVtw9SepHNf33-mWZZM3PUeWMwFxZAZiI3aBMjYJLJQjFzlekchh8frG3Jya2IPpUX0GgdhsxmBg6IEvrGRjWvR6sHY6oYwTYtYyKSwQ/s1600/IMG-20130725-WA0003.jpg" height="240" width="320" /></a></div>
y para encenderla:<br />
<pre class="brush: bash">gpio -g write 18 1
</pre>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-lFyWfFWDyhCTNpXB7zUuZgM2vLYgrIjVyBc91xnq3K4uT4cRnD-URx67ZkL5Z27klcXS296dsPyirlUnkufweNLoa1Xov3UzdQPz1JXYwh1j2FY3xnTqZh8g8FbQmXxFeRkqCz8xrzI/s1600/IMG-20130725-WA0007.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-lFyWfFWDyhCTNpXB7zUuZgM2vLYgrIjVyBc91xnq3K4uT4cRnD-URx67ZkL5Z27klcXS296dsPyirlUnkufweNLoa1Xov3UzdQPz1JXYwh1j2FY3xnTqZh8g8FbQmXxFeRkqCz8xrzI/s1600/IMG-20130725-WA0007.jpg" height="240" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEga7veuEosQVXecaVz6DND8MQFJ8ELkB-s-dbzOa2UVwke6Tis3PDGyX3SlMJlMrc7Ja7DkdX8naKBpyzbaC6rXi9jSN1PbSsfKxavdvG_gCMQVTuQdNyeqlmFlfcSVRUaWnl542MumifE/s1600/tumblr_m46g6gKn311qeii60o1_400.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEga7veuEosQVXecaVz6DND8MQFJ8ELkB-s-dbzOa2UVwke6Tis3PDGyX3SlMJlMrc7Ja7DkdX8naKBpyzbaC6rXi9jSN1PbSsfKxavdvG_gCMQVTuQdNyeqlmFlfcSVRUaWnl542MumifE/s1600/tumblr_m46g6gKn311qeii60o1_400.gif" /></a></div>
<br />Unknownnoreply@blogger.com60tag:blogger.com,1999:blog-1180468193148611581.post-48264161597833006952013-07-25T07:35:00.000+02:002013-07-29T08:42:54.172+02:00Uso de Hangouts (GTalk) para el envío de notificaciones<h2>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh56niDg-s6XJ9s8Mb8sDb4t7B2uB2V8WGh0pT-cjKTyxtj5px0dMMXX0j10Hj2HnvuqD5K1EpGYxt_ODFFXZYEyZoFpxVGT9KCoZBCR_cIiAg9DM3QHCa-ZOK_EplTkKmj9FYqyBqS7a8/s1600/pi_centerim_hangout.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh56niDg-s6XJ9s8Mb8sDb4t7B2uB2V8WGh0pT-cjKTyxtj5px0dMMXX0j10Hj2HnvuqD5K1EpGYxt_ODFFXZYEyZoFpxVGT9KCoZBCR_cIiAg9DM3QHCa-ZOK_EplTkKmj9FYqyBqS7a8/s1600/pi_centerim_hangout.png" height="200" width="183" /></a>
... y para mucho más</h2>
Hace un tiempo publiqué un post (<a href="http://rsppi.blogspot.com.es/2012/08/uso-de-gtalk-desde-shell-para-el-envio.html" target="_blank">este</a>) sobre el uso de GTalk desde la consola, para el envío de notificaciones. Era un poco tosco, pero funcionaba. Al poco, ratoncio me comentaba que se podía hacer eso mismo pero usando un par de funciones del centerim. Desde entonces lo estoy usando de esa forma, pero no había podido poner unas instrucciones decentes, aquí están.<br />
<br />
<a name='more'></a>Para no perder el norte, nuestro objetivo es poder enviar notificaciones vía Hangouts y usar este además para enviar ordenes de todo tipo a nuestro RaspberryPi.<br />
Empezamos instalando:<br />
<pre class="brush: bash">apt-get update
apt-get install centerim</pre>
<br />
y ya no hay que instalar más. Antes de seguir, ejecuta al menos una vez centerim con el usuario que va a ejecutarlo automáticamente, para que genere la estructura de archivos necesaria. Tenemos que registrar una cuenta de Gmail en el centerim, así que usaremos una que no tengamos en uso o incluso (it's free!!) crearemos una nueva ¡¡NO USES TU CUENTA PRINCIPAL DE GMAIL!! más que nada porque puedes volverte loco enviándote mensajes a ti mismo ... y además es un poco triste. Para registrar en centerim tu cuenta de Gmail, editamos el archivo /root/.centerim/config y añadimos al final:<br />
<pre class="brush: bash">jab_nick CUENTA.PARA:RASPBERRY@gmail.com
jab_pass clavesuperseguradelamuerte
jab_server talk.google.com:5223
jab_osinfo 1
jab_prio 4
jab_ssl 1</pre>
<br />
Si lo vas a ejecutar con un usuario que no sea root, el archivo config está en el home de dicho usuario. Ahora ejecutamos una vez centerim para que ver todo funciona, he incluso comprobaremos que podemos mandar y recibir mensajes.<br />
Ahora vamos a configurar las respuestas automáticas, para ello editamos el archivo /root/.centerim/external :<br />
<pre class="brush: bash">%action contestador automagico
event msg
proto all
status all
options stdin stdout
%exec
msg=`cat`
/bin/bash /usr/local/bin/contestador.sh $msg</pre>
<br />
Eso configura centerim para que al recibir cualquier mensaje, ejecute el script contestador.sh pasándole como parámetro el contenido del mensaje. El script /usr/local/bin/contestador.sh lo creamos según nuestras necesidades, un ejemplo puede ser:<br />
<pre class="brush: bash">#!/bin/bash
#programado por Juanmol para http://rsppi.blogspot.com
case $1 in
espacio)
echo "El sistema tiene libre `df -h | grep rootfs | awk '{ print $4,$5 }'`"
;;
domo)
echo "Ejecutando $@"
/bin/bash /usr/local/bin/x10.sh $2 $3
;;
laser)
if [ "$2" = "on" ];
then
echo "Encendiendo el \"LASER\"";
/bin/bash /usr/local/bin/laserdedestruccionmasiva.sh on ;
else
echo "Desconectando el \"LASER\"";
/bin/bash /usr/local/bin/laserdedestruccionmasiva.sh off ;
fi
;;
*)
echo "$1 no lo entiendo, los comandos que entiendo son: espacio, domo, laser"
;;
esac</pre>
<br />
Que yo creo que no necesita explicación. Entre otras cosas lo vamos a usar para <b>mandarle órdenes a nuestro sistema domótico</b>, por Hangouts (GTalk). Si buscas un poco, solo hay una empresa instaladora de domótica que ofrece esto mismo, con su propio sistema cerrado y cobrándote una considerable suma de dinero.<br />
Añadimos esta línea al archivo /etc/rc.local y la ejecutamos tal cual, para que arranque centerim y lo deje en segundo plano:<br />
<pre class="brush: bash">screen -dmS centerim /usr/bin/centerim</pre>
<br />
Con esto hemos conseguido que nuestro Raspberry nos hable cuando le preguntamos, si queremos que nos diga cosas sin tener que preguntarle primero, cuando se genera un evento en Asterisk, cuando termina de descargar un torrent, cuando ... lo que sea, simplemente tenemos que ejecutar:<br />
<pre class="brush: bash">echo "Evento a las: `date`: $contenido" | centerim -s msg -p jab -t CUENTA.DE.DESTINO@gmail.com</pre>
<br />
Es mucho más fácil y útil. Ya me diréis para que lo vais a usar ;)Unknownnoreply@blogger.com90tag:blogger.com,1999:blog-1180468193148611581.post-40776766099142067932013-06-24T20:52:00.001+02:002013-06-24T21:06:14.783+02:00Control de ancho banda "low-cost"<h2>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1jg7oYbbuiRYnSZW6YrqfK4ptMbIf_FPGyg0IQSA_pV4I6ZDCtP2SOszxPTfxEWZJg3byaZH1otOU6cWuoo-Z7qmR3kZA0c_lGi40DwBUHFXygKh6Clx0OQgCdeGA4ap88bsHEu1kG14/s1600/pi_cerdo.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1jg7oYbbuiRYnSZW6YrqfK4ptMbIf_FPGyg0IQSA_pV4I6ZDCtP2SOszxPTfxEWZJg3byaZH1otOU6cWuoo-Z7qmR3kZA0c_lGi40DwBUHFXygKh6Clx0OQgCdeGA4ap88bsHEu1kG14/s1600/pi_cerdo.png" height="200" width="171" /></a>
más low-cost que otra cosa ...</h2>
Buenas tardes, para unos inventitos que estoy preparando, necesito dar prioridad a ciertas cosas en relación al ancho de banda con internet. Soluciones para el control de ancho de banda, QoS, packet filter y demás, hay cientos, pero casi ninguna encaja en mi infraestructura de red doméstica. Así que he preparando un par de configuraciones con las que conseguir el mismo efecto, sin necesitar más hardware.<br />
<br />
<a name='more'></a>Os recuerdo mi infraestructura de red:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilcnRoJlqu5Fu_Rj9Fntd4oOkkN3OyyiutmLW9X0HJDQRd8zutmkWJW2wb71wdg6JxN98oVKLwV3ujuJW_Xyfzgj18xZsd6qrXHXby2i0Tx30BD9iP9O4ArPCP0Ti6ZuPPaD2veq2oDUM/s1600/mired.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilcnRoJlqu5Fu_Rj9Fntd4oOkkN3OyyiutmLW9X0HJDQRd8zutmkWJW2wb71wdg6JxN98oVKLwV3ujuJW_Xyfzgj18xZsd6qrXHXby2i0Tx30BD9iP9O4ArPCP0Ti6ZuPPaD2veq2oDUM/s1600/mired.png" height="320" width="302" /></a></div>
es de lo más simple que puede haber. Uno de los problemas lo tengo en que es el RaspberryPi el que tiene todos los servicios: transmission, vozip, demonios, notificaciones ... Por lo que hacer una priorización (con el ruter de Jazztel) de trafico, esta complicado.<br />
El mayor (casi el único en mi caso) absorvedor de ancho de banda es el Transmission, así que vamos a asegurarnos de algunas configuraciones, en el archivo setings.json:<br />
<pre class="brush: bash"> "alt-speed-down": 50,
"alt-speed-enabled": false,
"alt-speed-up": 10,
</pre>
<br />
Como vemos, establecemos la velocidad alternativa a esos valores. Con esa velocidad no tendremos problemas en usar un proveedor de vozip o publicar nuestro servicio en la nube. Así que lo siguiente es ...<br />
<h3>
Demonio para monitorizar ordenes de velocidad alternativa</h3>
Si ejecutamos en nuestro RaspberryPi:<br />
<pre class="brush: bash">transmission-remote -as
</pre>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi87eC5ByaM4kWPBJQYXRN9FSTdaffSiwGlRgCIxl5hBIn0bDLG1UDrEm45Z50xHlvgTDGll2dgHFQuRVZeoQPwhyn7Jt81q543lbkV_M_hAwfSHJCsUlr9qzOpeDnicTCjIKFPI68y52k/s1600/transmission_lento.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi87eC5ByaM4kWPBJQYXRN9FSTdaffSiwGlRgCIxl5hBIn0bDLG1UDrEm45Z50xHlvgTDGll2dgHFQuRVZeoQPwhyn7Jt81q543lbkV_M_hAwfSHJCsUlr9qzOpeDnicTCjIKFPI68y52k/s1600/transmission_lento.png" height="193" width="320" /></a></div>
<br />
veremos que el transmission entra en el modo de velocidad alternativa. Para recuperar la velocidad normal, ejecutamos:<br />
<pre class="brush: bash">transmission-remote -AS
</pre>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdL-nzd-s_OZ9ebv4A2stbKM7Xfm_xRBs6BGwfHu-lSEQ6d16i-fv0intGpeTpZR9B47m4bea3Ex3cduvcveC9yNiCs0v2l-EldPgKMJhY5tR9Uechvxt8i9TlKPwXTYftJVFnuwslnq0/s1600/transmission_normal.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdL-nzd-s_OZ9ebv4A2stbKM7Xfm_xRBs6BGwfHu-lSEQ6d16i-fv0intGpeTpZR9B47m4bea3Ex3cduvcveC9yNiCs0v2l-EldPgKMJhY5tR9Uechvxt8i9TlKPwXTYftJVFnuwslnq0/s1600/transmission_normal.png" height="196" width="320" /></a></div>
Vaaaaaaale, podemos programar el siguiente demonio /usr/local/bin/velocidad_transmission.sh :<br />
<a href="http://pastebin.com/vw0qMk46" target="_blank">(enlace en pastebin)</a><br />
Al final del archivo /etc/rc.local añadimos:<br />
<pre class="brush: bash">screen -dmS velocidadtransmission /bin/bash /usr/local/bin/velocidad_transmission.sh
</pre>
<br />
con eso conseguimos que se quede a la escucha cada vez que se inicia el Raspberry, ahora ejecutamos esa línea tal cual para dejarlo en segundo plano.<br />
<h3>
Priorizando la vozip sobre los torrents</h3>
Ahora en nuestro Asterisk, podemos añadir al /etc/asterisk/extensions.conf las líneas (tendrás que adaptarlo a tu código):<br />
<pre class="brush: bash">[salientes]
exten => _[69]XXXXXXXX,1,NoOp(llamada al ${EXTEN} con BSO)
same => n,Dial(${gtw}/${EXTEN},,tT)
same => n,Macro(velocidad,fin)
same => n,Goto(nulo,s,1)
exten => h,1,Macro(velocidad,fin)
same => n,Goto(nulo,s,1)
[entrantes]
exten => s,1,NoOp(Ha llamado ${CALLERID(num)})
same => n,Macro(velocidad,inicio)
same => n,Dial(SIP/1002,${TIMEOUT},${opc})
same => n,Goto(nulo,s,1)
exten => h,1,Macro(velocidad,fin)
same => n,Goto(nulo,s,1)
[macro-velocidad]
exten => s,1,NoOp(macro velocidad, tipo de funcion: ${ARG1})
; arg1 puede ser inicio o fin
same => n,Goto(${ARG1},1)
; si es inicio, bajamos la velocidad
exten => inicio,1,NoOp(es una llamada nueva, bajamos la velocidad del Transmission)
same => n,System(wget http://localhost:8998/transmission/lento/ -O /dev/null)
same => n,MacroExit()
; si es fin, subimos la velocidad
exten => fin,1,NoOp(subimos la velocidad)
same => n,System(wget http://localhost:8998/transmission/rapido/ -O /dev/null)
same => n,MacroExit()
</pre>
<br />
con las que ejecutamos el modo lento o rápido a nuestro transmission ¿a que mola? Pero si estas siguiendo esto paso a paso, te habrás preguntado "¿y para que necesitas un demonio? Podrías cambiar la velocidad desde el dialplan" pues lo he programado así para ...<br />
<h3>
Priorizar un juego/app de Android sobre los torrents</h3>
jejeje para ello usaremos AutomateIt PRO (busca en el Play). Vamos configurando:<br />
1- Añadimos una nueva regla<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLIhVkGqRxi51lf8Oo1R-3MTShYxPYh16y8OPQq2fj781afZKvtovrv52HZ_d4aePaqTbA1fc1mWiTXl18Fy5XfOShmCbrUY3dqyTS8Uhe1lzm1Hqlx7szgnq6Q7LtyQDBkvDQeJ6nvEg/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLIhVkGqRxi51lf8Oo1R-3MTShYxPYh16y8OPQq2fj781afZKvtovrv52HZ_d4aePaqTbA1fc1mWiTXl18Fy5XfOShmCbrUY3dqyTS8Uhe1lzm1Hqlx7szgnq6Q7LtyQDBkvDQeJ6nvEg/s1600/1.png" height="200" width="125" /></a></div>
2- Elegimos un disparador AND:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_FWa5orUrQEfPZ4cBYU5NFhjik9BSyBdPNz3IidEkXCE4BPNWE7BKmjuerTInNKu-vgPxZqmrBEESPppJSeiv8J1gp5KT3-RFvyDRnacxEjOzWRZKA2PFGYjf7k8MVzIhQYlgMkwt5lo/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_FWa5orUrQEfPZ4cBYU5NFhjik9BSyBdPNz3IidEkXCE4BPNWE7BKmjuerTInNKu-vgPxZqmrBEESPppJSeiv8J1gp5KT3-RFvyDRnacxEjOzWRZKA2PFGYjf7k8MVzIhQYlgMkwt5lo/s1600/2.png" height="200" width="125" /></a></div>
3- Ahora pulsamos en el + :<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3Nc69-juNX0Pwo3W5n4Il4gU2QW36Hhz_y91nr4PN8WsnKN4ZL7KOCWoOXFtHu6Obb7mP8ESIyGUa6OdNbduD1f73w2W86TpTd5HfNezFTf6fjGdpGSU4KLAUUPCGHRIAJbtQNB1w9ug/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3Nc69-juNX0Pwo3W5n4Il4gU2QW36Hhz_y91nr4PN8WsnKN4ZL7KOCWoOXFtHu6Obb7mP8ESIyGUa6OdNbduD1f73w2W86TpTd5HfNezFTf6fjGdpGSU4KLAUUPCGHRIAJbtQNB1w9ug/s1600/3.png" height="36" width="320" /></a></div>
4- Ahora un disparador OR:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHisw3vXBpM2kaB5eEe1Jm-yo5cGxyYd4BIHAHbEMaHcIufSMDZcla1wMA7F0n60SWxctWjmcmkw1Va35bst-oHD37kXrrA1SXeTKsdyzUDAKsMdgu0y9pd6lolxCuYUciO9iEI3H2uVw/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHisw3vXBpM2kaB5eEe1Jm-yo5cGxyYd4BIHAHbEMaHcIufSMDZcla1wMA7F0n60SWxctWjmcmkw1Va35bst-oHD37kXrrA1SXeTKsdyzUDAKsMdgu0y9pd6lolxCuYUciO9iEI3H2uVw/s1600/4.png" height="200" width="125" /></a></div>
5- Ahora marcamos los componentes compuestos del OR:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEik4q9NgjAdhwQlthyphenhyphenHQrNkIvIhhI2aKQGc_kPpnF5pp6wZIe56gBdyTMI7iAiJSfU3jdmUSz1R91C7erf88-VYMdV70quqftX3bbpIdQmv_TJMelcmIsMqj-dXriwLtB3B94dfjRTOeGw/s1600/5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEik4q9NgjAdhwQlthyphenhyphenHQrNkIvIhhI2aKQGc_kPpnF5pp6wZIe56gBdyTMI7iAiJSfU3jdmUSz1R91C7erf88-VYMdV70quqftX3bbpIdQmv_TJMelcmIsMqj-dXriwLtB3B94dfjRTOeGw/s1600/5.png" height="200" width="125" /></a></div>
6- Ahora seleccionamos "Disparador: estado de una aplicación":<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOih4HMVqwk0YUKd2DhtE0RssgHBuaRfFVHcuppteI6mnVWhKQBmcKKvofn3_PzLNjO0wcXBpdh6fJBYloyCDAT7tAYBpRr9ix-Z478XxpLBIgEA3sVC3YTMH4IS6Zj0E7IyI5vUlnQ4U/s1600/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOih4HMVqwk0YUKd2DhtE0RssgHBuaRfFVHcuppteI6mnVWhKQBmcKKvofn3_PzLNjO0wcXBpdh6fJBYloyCDAT7tAYBpRr9ix-Z478XxpLBIgEA3sVC3YTMH4IS6Zj0E7IyI5vUlnQ4U/s1600/6.png" height="200" width="125" /></a></div>
7- En esta pantalla, nos aseguramos de tener el checkbox marcado y seleccionamos una applicacion:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWZh9prbpOHUy7u50w1jDjEZ7n-a4SkUH6DzFL42BJNyF50aPZQSSw9-ECseeni8YG-EyV4OI2APkCNurVR58H42JVohFMUgN7WeKXTwV0kT5U_bUKnxKcNsqviqJ3445FrIGuLss68nU/s1600/7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWZh9prbpOHUy7u50w1jDjEZ7n-a4SkUH6DzFL42BJNyF50aPZQSSw9-ECseeni8YG-EyV4OI2APkCNurVR58H42JVohFMUgN7WeKXTwV0kT5U_bUKnxKcNsqviqJ3445FrIGuLss68nU/s1600/7.png" height="200" width="125" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuM8kgFQJ5UE_PB9lay2H5xO9duO_urrdAyzWDMiDyP6vlOjew5vwLbKKD4EJt22FvdezYQFeIfoZLZszlhz3lSi5C4XAH7159Z7-shq8ckdjrkNA6yim_0ZJJ2xQB3zKIRXKzrcDNvd0/s1600/8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuM8kgFQJ5UE_PB9lay2H5xO9duO_urrdAyzWDMiDyP6vlOjew5vwLbKKD4EJt22FvdezYQFeIfoZLZszlhz3lSi5C4XAH7159Z7-shq8ckdjrkNA6yim_0ZJJ2xQB3zKIRXKzrcDNvd0/s1600/8.png" height="200" width="125" /></a></div>
8- Yo he elegido el Facebook, por ejemplo. Mucho ojo!, ahora seleccionamos una nueva aplicación:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3CpTkWZGbVTZj68ygESvebs-_q2oN1KYKhshtqTpvt9g7Pqx2tG5ZMIoGo9j9pDXH9XIRNRup5S6iCtIhrmw7KiOVS19aVmwAh1bFUC7KF4PjuG3pgG6mOOBgGo97aNJDUPX7wCU9ED0/s1600/9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3CpTkWZGbVTZj68ygESvebs-_q2oN1KYKhshtqTpvt9g7Pqx2tG5ZMIoGo9j9pDXH9XIRNRup5S6iCtIhrmw7KiOVS19aVmwAh1bFUC7KF4PjuG3pgG6mOOBgGo97aNJDUPX7wCU9ED0/s1600/9.png" height="200" width="125" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqBPY8hleVmK-T05zgjbox8Ulj5jS6omznOeD75_T6WtcAbGECVGACUzXt4QDMiG876G92m4s5BLS3axuis1WbzUQ6KeRs7svXLv2rwsRn80jTYJtwrdTQxEKRdm5nsEsA6e_3udRuQOU/s1600/10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqBPY8hleVmK-T05zgjbox8Ulj5jS6omznOeD75_T6WtcAbGECVGACUzXt4QDMiG876G92m4s5BLS3axuis1WbzUQ6KeRs7svXLv2rwsRn80jTYJtwrdTQxEKRdm5nsEsA6e_3udRuQOU/s1600/10.png" height="200" width="125" /></a></div>
9- Yo he elegido Ingress. Puedes repetir el paso 8 tantas veces como aplicaciones quieras priorizar. Cuando termines pulsa en:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEha9YoDG7U8a0I69Y0njmBxa7iCvNWP8OG3lCn0tUYlYft0d8jbNqrEgdokfS80VC8OR9RLmWMRWMBbuXYjYu-mUw52n7rHs6g6DvkCZE73S3hdGxTVy7p7GsFhPQFVKq9eBl_HEm_6Oys/s1600/11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEha9YoDG7U8a0I69Y0njmBxa7iCvNWP8OG3lCn0tUYlYft0d8jbNqrEgdokfS80VC8OR9RLmWMRWMBbuXYjYu-mUw52n7rHs6g6DvkCZE73S3hdGxTVy7p7GsFhPQFVKq9eBl_HEm_6Oys/s1600/11.png" height="200" width="125" /></a></div>
10- Con eso volvemos al disparador AND del principio, para seleccionar el disparador de estado de red:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBemYM7M49VuTG6FsV21KyF9JOOK4EQYalw_UMQfhtHQbKh9MMOu2ESgh-WVACyG2OWApbG4O2Xo8uSU-gxvCMnndWhKzhzJ21TRvlJTt3HF7win5RmNqPlGsjwH0PyS60lNDzNXRlpis/s1600/12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBemYM7M49VuTG6FsV21KyF9JOOK4EQYalw_UMQfhtHQbKh9MMOu2ESgh-WVACyG2OWApbG4O2Xo8uSU-gxvCMnndWhKzhzJ21TRvlJTt3HF7win5RmNqPlGsjwH0PyS60lNDzNXRlpis/s1600/12.png" height="200" width="125" /></a></div>
11- Elegimos el wifi de casa, porque no queremos que actúe si abrimos esas apps y estamos en el curro (por ejemplo):<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjD_hEz85Qtm68BgBpp_Y4YWVuO0vmNNtyBO8YF2f5NGTtxReNYmjdvaRoTZrU89zKAxlME93v7MDbXPxF-zJH4-glD84dp1nDPUVpyptCZvxXr2WlUjV8yw_4F-slC128BkzhN8g10de0/s1600/13.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjD_hEz85Qtm68BgBpp_Y4YWVuO0vmNNtyBO8YF2f5NGTtxReNYmjdvaRoTZrU89zKAxlME93v7MDbXPxF-zJH4-glD84dp1nDPUVpyptCZvxXr2WlUjV8yw_4F-slC128BkzhN8g10de0/s1600/13.png" height="200" width="125" /></a></div>
12- Con eso hemos terminado con los disparadores, ahora toca la acción:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHeEGWQZWvRyL5PHbLIuqhK45Etz9uYH2hCdAjPbWLNEjAaGJtbJDHzBkdZY_jFlL38cgtUiR5uXa4mTXqYkir1vgnmtuZSrn3ztypnqn_LrddpaQdoYJ92Hkb483fIN5p6YZvH79wBek/s1600/14.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHeEGWQZWvRyL5PHbLIuqhK45Etz9uYH2hCdAjPbWLNEjAaGJtbJDHzBkdZY_jFlL38cgtUiR5uXa4mTXqYkir1vgnmtuZSrn3ztypnqn_LrddpaQdoYJ92Hkb483fIN5p6YZvH79wBek/s1600/14.png" height="200" width="125" /></a></div>
13- Y ponemos los datos del demonio (ojo con el checkbox):<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoDGUHelHFYeXnF57tpMxdcZsRcf7dMgvw_xQAU_b9Kn-oF6swawLeDNyi7jatTr8RscsIn2In_TilOwSUJ23zOmBFRA3fI8Z5ZjH1N6vC7YLsKFk5Yu7Io66ohdLp7g-ibImIWOs39gY/s1600/15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoDGUHelHFYeXnF57tpMxdcZsRcf7dMgvw_xQAU_b9Kn-oF6swawLeDNyi7jatTr8RscsIn2In_TilOwSUJ23zOmBFRA3fI8Z5ZjH1N6vC7YLsKFk5Yu7Io66ohdLp7g-ibImIWOs39gY/s1600/15.png" height="200" width="125" /></a></div>
14- Ponemos nombre y marcamos las opciones correspondientes:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgc57sk_wXTnIqWzN0BOU_fFz5k3ki_N215UPx1o6dwidpmuZjxvUCTPHld5Dius3tZD12Hw_TrveXYPyPHHKIsW-Fpc5KAZtdKxxyLMEiddjjm6tPx4GTnGHhyphenhyphen4on_8YmpG1WdFrzswyI/s1600/16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgc57sk_wXTnIqWzN0BOU_fFz5k3ki_N215UPx1o6dwidpmuZjxvUCTPHld5Dius3tZD12Hw_TrveXYPyPHHKIsW-Fpc5KAZtdKxxyLMEiddjjm6tPx4GTnGHhyphenhyphen4on_8YmpG1WdFrzswyI/s1600/16.png" height="200" width="125" /></a></div>
15- Tiene que tener esta pinta más o menos:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjmUklO2XbhPb9SMguWyenGrVAMn_HgOW15Q97N-aiax68ERNXkCARNHj04DJfd7niwIwL96T2vRuuRHrgznxBkWqjFGqC4HBlmo_H4uK77aBjE-eN3gOLdH_hKT-dfNu5aHr81msEEKQ/s1600/17.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjmUklO2XbhPb9SMguWyenGrVAMn_HgOW15Q97N-aiax68ERNXkCARNHj04DJfd7niwIwL96T2vRuuRHrgznxBkWqjFGqC4HBlmo_H4uK77aBjE-eN3gOLdH_hKT-dfNu5aHr81msEEKQ/s1600/17.png" height="200" width="125" /></a></div>
¿Y para que sirve todo esto? Pues para algo tan simple como que cuando se abra el Facebook o el Ingress, estando conectado al wifi de casa, hace un GET al demonio del transmission y lo pone en LENTO.<br />
Ahora sólo te queda hacer exactamente lo mismo, pero desmarcando el checkbox del paso 7 ... eso ya lo dejo en tus manos.<br />
<h3>
Resumiendo</h3>
Con esto hemos conseguido hacer que cuando haya una llamada en nuestro Asterisk, ya sea entrante o saliente, el transmission se pone en estado LENTO. Cuando la llamada termina, recupera el estado de RÁPIDO.<br />
Hemos configurado además el AutomateIt para que haga lo mismo cuando se ejecutan aplicaciones en el Android que requieran de más ancho de banda, o que simplemente no queremos que vayan muy lentas.<br />
Y con esto y un bizcocho, tenemos un priorizador de ancho de banda (low-cost).Unknownnoreply@blogger.com16tag:blogger.com,1999:blog-1180468193148611581.post-2104311448640146942013-06-20T19:15:00.001+02:002013-06-20T19:15:29.121+02:00Llamadas y SMS usando un dongle USB en RaspberryPi<h2>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpX0h76UBFlBRCv_vFKnFobBr0WUu4FOyX-G7hacXlPRtSgfKQun4muRxVTF-tSEgO2wQQ1sxh2Dp8RZGmxaIHjlH0IjOu-xvXumTEDgSG-VO1frVe0jycC9V9OVPaPNEBZ7Exi8kk6-w/s1600/pi_chan_dongle.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpX0h76UBFlBRCv_vFKnFobBr0WUu4FOyX-G7hacXlPRtSgfKQun4muRxVTF-tSEgO2wQQ1sxh2Dp8RZGmxaIHjlH0IjOu-xvXumTEDgSG-VO1frVe0jycC9V9OVPaPNEBZ7Exi8kk6-w/s1600/pi_chan_dongle.png" height="131" width="200" /></a>
... dándole más canales a nuestro RaspberryPi.</h2>
Buenas tardes, para un plan malévolo que estoy preparando, necesito que mi RaspberryPi tenga capacidad GSM de comunicación, lo que viene a ser enviar/recibir llamadas y enviar/recibir SMS (de los que se pagan). Y puestos a pedir, si consigo hacerlo reutilizando algún cacharrito de algún proyecto anterior, pues mejor que mejor. Así que me he puesto a buscar ...<br />
<br />
<a name='more'></a>y me he encontrado con el chan_dongle (<a href="https://github.com/jstasiak/asterisk-chan-dongle" target="_blank">web</a>) que nos da GSM en los modems 3G de Huawei, que resulta que ya tenia uno desde hace un siglo:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3H2EotBKv_6tpR_8cbsJMbu8Vxf88xCpFxxH9yrCITzDXDFYwHuzOdSLJWRzmsRBI-3R-uwKj_OBkcPmIPx1QE8spZ4Vnxidv0TgiJ9FspgDPcVvn09zZhzA-hVS-F2vyAgUM-y38K9A/s1600/k3520.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3H2EotBKv_6tpR_8cbsJMbu8Vxf88xCpFxxH9yrCITzDXDFYwHuzOdSLJWRzmsRBI-3R-uwKj_OBkcPmIPx1QE8spZ4Vnxidv0TgiJ9FspgDPcVvn09zZhzA-hVS-F2vyAgUM-y38K9A/s1600/k3520.png" height="173" width="200" /></a></div>
Ese modelo es el Huawei k3520, que es compatible 100% con el chan_dongle, <a href="http://wiki.e1550.mobi/doku.php?id=requirements" target="_blank">aquí tienes más modelos</a>. La ventajas de estos dispositivos es que son muy baratos (~30€), comparados con lo que cuesta un GSM-SIP( que viene a ser una barbaridá). Como además son USB, podemos poner varios cientos de ellos conectados a nuestro RaspberryPi, en mi caso he conectado sólo uno y<b> he necesitado un HUB USB alimentado</b>.<br />
Los pasos que he seguido son:<br />
<br />
<ol>
<li>Tener Asterisk en correcto funcionamiento, en mi caso es la versión 11, <a href="http://rsppi.blogspot.com.es/2012/05/asterisk-en-el-raspberrypi.html" target="_blank">aquí</a> tienes unas muy buenas instrucciones de como instalar Asterisk.</li>
<li>Parar Asterisk:<br /><pre class="brush: bash">/etc/init.d/asterisk stop
</pre>
</li>
<li>Descargar y compilar:<br /><pre class="brush: bash">apt-get install usbutils
cd /usr/src/
wget http://www.draisberghof.de/usb_modeswitch/usb-modeswitch-1.2.5.tar.bz2
wget http://www.draisberghof.de/usb_modeswitch/usb-modeswitch-data-20121109.tar.bz2
tar -jxvf usb-modeswitch-1.2.5.tar.bz2
tar -jxvf usb-modeswitch-data-20121109.tar.bz2
cd usb-modeswitch-1.2.5
make all
make install
cd ../usb-modeswitch-data-20121109
make install
cd ..
</pre>
</li>
<li>Activar modo modem (OJO aquí):<br /><pre class="brush: bash">lsusb | grep Huawei
#Bus 001 Device 010: ID 12d1:1001 Huawei Technologies Co., Ltd. E169/E620/E800 HSDPA Modem
usb_modeswitch -v 0x12d1 -p 0x1001 -H -s 5 -M 55534243000000000000000000000011060000000000000000000000000000
</pre>
</li>
<li>Instalar chan_dongle (para Asterisk 11, insisto):<br /><pre class="brush: bash">cd /usr/src/asterisk/asterisk-11.1.2/
wget https://github.com/jstasiak/asterisk-chan-dongle/archive/asterisk11.zip
unzip asterisk11.zip
cd asterisk-chan-dongle-asterisk11/
aclocal
autoconf
automake -a
./configure
make all
make install
</pre>
</li>
<li>/etc/asterisk/dongle.conf:<br /><pre class="brush: bash">[general]
interval=15
[defaults]
context=dongle-incoming
group=0
rxgain=0
txgain=0
autodeletesms=yes
resetdongle=yes
u2diag=-1
usecallingpres=yes
callingpres=allowed_passed_screen
disablesms=no
language=es
smsaspdu=yes
mindtmfgap=45
mindtmfduration=80
mindtmfinterval=200
callwaiting=auto
disable=no
initstate=start
exten=entrante
dtmf=relax
[dongle0]
audio=/dev/ttyUSB1
data=/dev/ttyUSB2</pre>
</li>
<li>/etc/asterisk/extensions.conf<br /><pre class="brush: bash">[dongle-incoming]
exten => sms,1,Set(sms=${SMS})
same => n,NoOp(el mensaje del ${CALLERID(num)}: ${SMS})
same => n,Goto(nulo,s,1)
exten => entrante,1,NoOp(llamada entrante por el Dongle USB)
same => n,Answer()
same => n,Dial(SIP/1002&SIP/Juanmol,${TIMEOUT},${opc})
same => n,Goto(nulo,s,1)
</pre>
</li>
</ol>
<div>
Y ya está, sorprendentemente fácil. Arrancamos Asterisk y en la consola probamos:<br />
<pre class="brush: bash">raspberrypi*CLI> dongle show devices
ID Group State RSSI Mode Submode Provider Name Model Firmware IMEI IMSI Number
dongle0 0 Free 9 5 4 vodafone ES K3520 11.314.21.31.00 353436333212201 214062201179907 Unknown
</pre>
</div>
<div>
Evidentemente no tengo Vodafone, tengo Pepephone y el dongle esta liberado. Llamamos con:</div>
<div>
<pre class="brush: bash">raspberrypi*CLI> originate dongle/dongle0/666555444 application musiconhold
</pre>
</div>
<div>
y aquí vemos como se recibe un sms:</div>
<div>
<pre class="brush: bash">raspberrypi*CLI>
[dongle0] Got SMS from +34666777888: 'Hola, esto es un sms con tíldés y eñes'
-- Executing [sms@dongle-incoming:1] Set("Local/sms@dongle-incoming-00000000;1", "sms=Hola, esto es un sms con tíldés y eñes") in new stack
-- Executing [sms@dongle-incoming:2] NoOp("Local/sms@dongle-incoming-00000000;1", "el mensaje del +34666777888: Hola, esto es un sms con tíldés y eñes") in new stack
-- Executing [sms@dongle-incoming:3] Goto("Local/sms@dongle-incoming-00000000;1", "nulo,s,1") in new stack
-- Goto (nulo,s,1)
-- Executing [s@nulo:1] Hangup("Local/sms@dongle-incoming-00000000;1", "") in new stack
== Spawn extension (nulo, s, 1) exited non-zero on 'Local/sms@dongle-incoming-00000000;1'
-- Executing [h@nulo:1] Hangup("Local/sms@dongle-incoming-00000000;1", "") in new stack
== Spawn extension (nulo, h, 1) exited non-zero on 'Local/sms@dongle-incoming-00000000;1'
raspberrypi*CLI>
</pre>
</div>
<div>
Genial, perfecto, superfácil y barato. Os recomiendo leer la documentación, vienen más configuraciones y ejemplos.</div>
Unknownnoreply@blogger.com10tag:blogger.com,1999:blog-1180468193148611581.post-79782364805254386942013-05-29T20:01:00.000+02:002013-05-30T11:33:01.589+02:00Control domótico con Android<h2>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2ZOMnuYXor2saQvSX43-9Q4MbGwJkHK9M4j2nErgCyjW_eqT07Vc_Pds8i72x44AuKjalbm2YcjoZ-hS7FaZGqPtQ786z9kHzQyLr1LCh6MGKlCudVAjz_8bRdBqlbBDx2qpejuh9A4w/s1600/pi_android_x10.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2ZOMnuYXor2saQvSX43-9Q4MbGwJkHK9M4j2nErgCyjW_eqT07Vc_Pds8i72x44AuKjalbm2YcjoZ-hS7FaZGqPtQ786z9kHzQyLr1LCh6MGKlCudVAjz_8bRdBqlbBDx2qpejuh9A4w/s1600/pi_android_x10.png" height="188" width="200" /></a>
... otra forma más de domoticar!</h2>
Buenas tardes, como estaba dejando un poco de lado el tema de la domótica, hoy os propongo una forma muy sencilla de hacer un interfaz para controlarla. Para ello usaremos nuestros queridos androids, porque no creo que uséis "otras" cosas ;)<br />
Vamos a desarrollar el interfaz con <a href="http://appinventor.mit.edu/" target="_blank">AppInventor</a>, actualmente gestionado por el MIT.<br />
<br />
<a name='more'></a>Vamos a suponer que ya te funciona el Mochad, de <a href="http://rsppi.blogspot.com.es/2012/06/domotica-en-raspberrypi-parte-1.html" target="_blank">este post</a>, y que te funciona el script de ese mismo post (al final).<br />
En el RaspberryPi, vamos a crear un demonio que se quede escuchando en un socket (puerto), este es código de /usr/local/bin/escucha_x10.sh :<br />
<pre class="brush: bash">#!/bin/bash
# Programado por Juanmol para http://rsppi.blogspot.com
RESP=/tmp/webresp
puerto=8989
x10=/usr/local/bin/x10.sh
[ -p $RESP ] || mkfifo $RESP
while true ; do
( cat $RESP ) | nc -l -p $puerto | (
REQ=`while read L && [ " " "<" "$L" ] ; do echo "$L" ; done`
if [ "$(echo $REQ | head -1 | cut -f2 -d\/)" == "x10" ];
then
modulo=$(echo $REQ | head -1 | cut -f3 -d\/);
orden=$(echo $REQ | head -1 | cut -f4 -d\/);
$x10 $modulo $orden 2> /dev/null;
fi
cat >$RESP <<EOF
HTTP/1.0 200 OK
Cache-Control: private
Content-Type: text/plain
Server: bash/2.0
Connection: Close
Content-Length: 0
EOF
)
done
</pre>
es muy sencillo y ya hemos usado algo parecido en otras ocasiones, ahora metemos esta línea en el /etc/rc.local para que se ejecute al arranque:<br />
<pre class="brush: bash">screen -dmS x10 /bin/bash /usr/local/bin/escucha_x10.sh
</pre>
y ejecutamos ahora mismo esa línea.<br />
<pre class="brush: bash">screen -dmS x10 /bin/bash /usr/local/bin/escucha_x10.sh
</pre>
Ahora vamos a crear el interfaz, como ya he dicho, con el <a href="http://appinventor.mit.edu/" target="_blank">AppInventor</a>. Lo primero será dibujar la interfaz:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSjv7hUuNOC_QqHo3z4p7yjEKiF7VyBJqTzKTTPPZOsfwgwJIVMoHLeNV1KAdHDqckk65c04RNnMX2HLHHstJp_g6-YQ0VzHB1WEkN_f_9RQcrvxoWXRU0dha_LI8NAF-zEflJ7mmbh5A/s1600/x10_appinventor_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSjv7hUuNOC_QqHo3z4p7yjEKiF7VyBJqTzKTTPPZOsfwgwJIVMoHLeNV1KAdHDqckk65c04RNnMX2HLHHstJp_g6-YQ0VzHB1WEkN_f_9RQcrvxoWXRU0dha_LI8NAF-zEflJ7mmbh5A/s1600/x10_appinventor_1.png" height="320" width="205" /></a></div>
La URL de ConsultaWeb es http://192.168.1.2:8989/x10/ lo que viene a ser la ip del Rasp, puerto 8989 que es donde esta escuchando el script anterior y x10 para localizar la orden. Lo siguiente es muy fácil, nuestro script tiene que recibir la URL:<br />
http://192.168.1.2:8989/x10/a4/on/<br />
para que encienda (on) la luz del salón (a4), así que los botones quedan definidos tal que así:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgz-0O1KHGdlPlIsOSd5wps3Ss6vWfNqENJDY0BzjhNst-E99j_v0CtMP8IYonYXqzQTZYyacs1jOpt81Ju4Te79RXipOMpHZlqud2vUic0QwS37H5OaQBb41pFfXKx_BvMVDT4FhLj19A/s1600/x10_appinventor_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgz-0O1KHGdlPlIsOSd5wps3Ss6vWfNqENJDY0BzjhNst-E99j_v0CtMP8IYonYXqzQTZYyacs1jOpt81Ju4Te79RXipOMpHZlqud2vUic0QwS37H5OaQBb41pFfXKx_BvMVDT4FhLj19A/s1600/x10_appinventor_2.png" height="187" width="320" /></a></div>
¿y de verdad la gente paga miles de euros por esto? Pero si no me ha llevado ni una hora o_O ¿quieres un vídeo de demostración?<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/Ak7H6-I-xA8?feature=player_embedded' frameborder='0'></iframe></div>Unknownnoreply@blogger.com21tag:blogger.com,1999:blog-1180468193148611581.post-69796787614815205692013-05-21T07:51:00.002+02:002013-05-21T07:51:40.229+02:00Prueba de control Android-QRC<h2>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3oJLf5iH3x2UdY5nmx328SBcREwTuXBvXqJmGMNF5qr1SW_snOtlGkCCDEZ7-S76_Fob6C7wy9uzg4VKX351uJ0vzOnCV94ctZYZaEmziQME4C2RH7n-mm0DOkDlW4Uky60KHGgQlI2Y/s1600/super_raspi_copter.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3oJLf5iH3x2UdY5nmx328SBcREwTuXBvXqJmGMNF5qr1SW_snOtlGkCCDEZ7-S76_Fob6C7wy9uzg4VKX351uJ0vzOnCV94ctZYZaEmziQME4C2RH7n-mm0DOkDlW4Uky60KHGgQlI2Y/s1600/super_raspi_copter.png" height="95" width="200" /></a>... con algunos cambios</h2>
Buenas tardes, como ya había comentado en otros post, la idea era usar JQuery para hacer un interfaz gráfico de control. Hay un problema con eso: no tengo ni idea de JQuery, ni tiempo para aprender. De lo que si tengo conocimientos es del AppInventor.<br />
Así que me he puesto manos a la obra y en una tarde he reescrito por completo el programa de vuelo, el de control y el vuelo autónomo. Este es el resultado de la primera prueba...<br />
<br />
<br />
<a name='more'></a><br /><br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/EbkoINT6gCM?feature=player_embedded' frameborder='0'></iframe></div>
cuando consiga que tenga un primer vuelo decente, pondré todos los materiales y códigos para que os animéis.Unknownnoreply@blogger.com8