Microcontroladores PIC en Linux.
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.

Busca-sol, pequeño robot que busca un sitio soleado para recargar sus baterías.

3 participantes

Ir abajo

para - Busca-sol, pequeño robot que busca un sitio soleado para recargar sus baterías. Empty Busca-sol, pequeño robot que busca un sitio soleado para recargar sus baterías.

Mensaje por arcachofo Jue 27 Nov 2008 - 3:45

para - Busca-sol, pequeño robot que busca un sitio soleado para recargar sus baterías. Buscasolsupal9.th

para - Busca-sol, pequeño robot que busca un sitio soleado para recargar sus baterías. Buscasolcarati2.th

para - Busca-sol, pequeño robot que busca un sitio soleado para recargar sus baterías. Buscasolwq9.th

Como vés se trata de 6 pequeñas células solares (sacadas de lamparitas de jardín) de unos 4x4 cm y unos 2 V cada una, unidas para formar una especie de caparazón que va a servir como placa solar para cargar las baterías y además van a dar soporte a todos los demás elementos:

-Dos motores sacados de un reproductor de CD sin reductoras ni nada... directamente al suelo, solo tiene unos cilindros de goma de los que se encuentran en los reproductores de casette. Los motores van unidos al caparazón con dos trozos de foam, así tienen cierta amortiguación a las irregularidades del suelo


-La cajita de las baterías, sacada de otro aparato viejo... con 4 baterías recargables ni-mh AAA de 1.2 V para un total de 5v. En la mista tapa de las baterías vá la rueda loca, también de un aparato de casette.


-La "cabeza" hecha con un trozo de cartoncillo del gris de 1.5mm lleva tres Led IR , el del centro de 15º y los laterales de 60º, algo más arriba y en medio va el receptor IR de 38 KHz. los dos poteciometros que se ven por debajo regulan la potencia de los Led, uno para el central y el otro para los dos laterales.


-Los bumpers hechos de foam van sobre unos alambres que le dan la forma curva, los alambres soldados con estaño a dos muelles, dentro de los muelles un alambre grueso que hace contacto con los muelles cuando choca con algo; como ves som bumpers caseros.


-Circuito: si te fijas verás que hay dos placas de cicuito, en la que se ve encima hay un 16F628A que se encarga de seguir la luz, pararse cuando hay sol, gestionar la carga de la bateria y decidir que hacer según el nivel actual de carga de baterias, osea gestiona el comportamiento general que siempre va encaminado a conseguir recargar las baterías. (tambien pienso ponerle algunos sonidos muy básicos).

En la placa de abajo hay un 16F627A que gestiona todo lo que tenga que ver con la "navegación", osea detectar y esquivar obstáculos con IR, bumpers, detectar motores bloqueados, etc; los dos CI que se ven a los lados son dos 74HC240 haciendo de controladores de motor.


Todavía faltan varias muchas cosas por terminar y como ves los componentes son en su mayoría reciclados, el circuito también está por terminar y puede sufrir cambios, de hecho la parte de gestión de carga de las baterías todavía está muy verde y la detección de motores bloqueados no he conseguido que funcione.

Si prescindes de la gestión de carga de baterías y de bloqueo de motores se puede hacer con un solo 16F627A, o mejor hacerlo con otro PIC mayor... de hecho estoy pensando en hacer otra versión con un 16F876A que ademá tiene entradas A/D que simplifican algunas cosas.

Aquí un video probando el sistema de esquivar obstáculos:
https://www.youtube.com/watch?v=F9UFc5Jl7XI

Probando a medir distancias: 
https://www.youtube.com/watch?v=vzrilWRC45Q

Buscando la luz:
https://www.youtube.com/watch?v=1i4-24rqx7g
arcachofo
arcachofo
Participante Activo
Participante Activo

Mensajes : 91
Fecha de inscripción : 26/11/2008

Volver arriba Ir abajo

para - Busca-sol, pequeño robot que busca un sitio soleado para recargar sus baterías. Empty Felicitaciones

Mensaje por Risanti Jue 11 Dic 2008 - 0:43

Esta muy interesante el proyecto.. puedes agregar el esquema electronico o el codigo fuente.. del pic..

Felicitaciones,..
Risanti
Risanti
Risanti
Asiduo del Foro
Asiduo del Foro

Mensajes : 172
Fecha de inscripción : 07/12/2008
Edad : 39
Localización : La Serena Chile

https://www.facebook.com/risanti.electronica

Volver arriba Ir abajo

para - Busca-sol, pequeño robot que busca un sitio soleado para recargar sus baterías. Empty Re: Busca-sol, pequeño robot que busca un sitio soleado para recargar sus baterías.

Mensaje por arcachofo Jue 11 Dic 2008 - 21:20

Gracias por los ánimos... Smile

Este proyecto lo tengo en plena remodelación... al final opté por usar ADC en vez de comparadores, se pueden hacer muchas más cosas; entonces ya tengo el nuevo circuito empezado con un pic16f876a que va a controlar la búsqueda de luz, carga de baterías y alguna cosa más, todavía estoy haciendo pruebas y pensando posibles configuraciones,...

Le dejé un conector para poder enchufar un lcd y poder ver algunas valores cuando quiera.

Ahora las células solares en vez de ir todas en serie van en tres grupos de dos y la carga de baterías se va a hacer por pulsos (step-up)... todavía no he hecho pruebas... espero no tener problemas con los picos de tensión si le coloco un buen condensador.

Tengo que idearme la manera de que cuando llegue al sitio más iluminado de una habitación y no encuentre sol, encuentre la salida y busque otro sitio iluminado, ya tengo una rutina básica para que encuentre una salida en un radio de unos 2 o 3m con infrarrojos, pero es más complicado de lo que parece en un principio.

La parte de navegación, osea detectar y esquivar obstáculos, moverse más lento cuando hay cosas cerca y avanzar por el punto medio de dos obstáculos o la zona más despejada usa infrarrojos y bumpers y ya está hecho, aunque todavía no hay nada defitivo y me falta poner bumper trasero y otro delante en el centro. las rutinas de esto son más sencillas de lo que imaginaba al princio y las puse por aquí en otro mensaje, aunque creo que era todo completo... tengo que mirarlo...
arcachofo
arcachofo
Participante Activo
Participante Activo

Mensajes : 91
Fecha de inscripción : 26/11/2008

Volver arriba Ir abajo

para - Busca-sol, pequeño robot que busca un sitio soleado para recargar sus baterías. Empty Re: Busca-sol, pequeño robot que busca un sitio soleado para recargar sus baterías.

Mensaje por arcachofo Mar 23 Dic 2008 - 0:01

Esta es la rutina en basic de "navegación"... lo que hace es medir las distancias por infrarrojos (rutina en asm) a los dos lados, según la diferencia de distancias estre los dos lados gira más rápido hacia el sitio más despejado y según la distancia del objeto más cercano se mueve más rápido o más lento, cuando hay muchas cosas muy cerca se mueve muy despacio y si no hay nada se mueve al 100%.

Esta es la rutina que tenía grabado el pic en el video anterior, lo que hace en realidad es frenar más o menos la señal que le manda el otro pic que está encargado de buscar la luz y tomar decisiones de a donde ir y todo eso; en la prueba del video simplemente iba hacia adelante sin ningún objetivo, era solo para probar como se movía entre los obstáculos.
Código:



Sub    main ()

dim di as char            'distancia izda
dim dd as char            'distancia dcha
'dim cer as bit            'objeto muy cerca
dim med as char            'medida
dim pul as byte            'nº de pulsos
dim det as char            'contador detecta objeto

   
trisa = %00010011
trisb = %11000000
   
porta = %00000000
portb = %00000101

cmcon = %00000111        'desactivar comparadores
   
rafaga_derecha:
portb.3 = 1            'motor izda frena
call delay_ms (2)
portb.3 = 0
dd = 0
for med=9 to 1 step -1

pul = 30
det = 0
asm
{
    movf    _med,W
pulsod:
    bsf _porta,6            ;enciende led dcha
    addwf    _pcl,F
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    btfss    _porta,4        ;lee A,4
    incf    _det,F
    bcf _porta,6            ;apaga led dcha
    addwf    _pcl,F
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop   
    decfsz    _pul,F
    goto    pulsod
}
if det > 10 then
    dd= med
    goto saled
end if

next med

saled:
di = dd * 3
dd = dd + 12
dd = dd *3
portb.3 = 1            'motor izda frena
portb.1 = 1            'motor dcha frena
call delay_ms (di)
portb.1 = 0
call delay_ms (dd)
portb.3 = 0

if med = 9 then
    goto rafaga_derecha
end if

rafaga_izquierda:
di = 0
portb.3 = 1            'motor izda frena
call delay_ms (2)
portb.3 = 0

for med=9 to 1 step -1
pul = 30
det = 0
asm
{
    movf    _med,W
pulsoi:
    bsf    _porta,7            ;enciende led izda
    addwf    _pcl,F
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    btfss    _porta,4            ;lee A,4
    incf    _det,F
    BCF    _porta,7            ;apaga led izda
    addwf    _pcl,F
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop   
    decfsz    _pul,F
    goto    pulsoi
}
if det > 10 then
    di = med
    goto salei
end if

next med

salei:
dd = di * 3 + 3
di = di + 10
di = di * 3
portb.1 = 1            'motor dcha frena
portb.3 = 1            'motor izda frena
call delay_ms (dd)
portb.3 = 0
call delay_ms (di)
portb.1 = 0

if med = 9 then
    goto rafaga_izquierda
end if

goto rafaga_derecha



End Sub

 
# '-------------------------- INTERRUPCIONES ------------------------------ 
# '----------------------------------------------------------------------------------------

# Sub interrupt () 
#     
#    if intcon.RBIF = 1 then        'chequea flag interrupciones puerto B 
#        goto bumper 
#        end if 
#    goto salir 
#     
# bumper: 
#    if atr > 5 then            'si está atrapado trata de escapar 
#        atras 
#        call delay_ms (50) 
#        girad 
#        call delay_ms (50) 
#        atr = 0 
#    end if 
#     
#    if portb.6 = 0 then        'si bumper derecho pulsado 
#        girai            'gira izquierda 
#        atr = atr + 1 
#    elseif portb.7 = 0 then        'si bumper izquierdo pulsado 
#        girad            'gira derecha 
#        atr = atr + 1 
#    else goto salir     
#     
#    end if 
#     
#    goto bumper 
#     
# salir: 
#    call delay_ms (30) 
#    para 
#    intcon.RBIF = 0        'borrar flag puerto B 

# End Sub     



Última edición por arcachofo el Miér 24 Dic 2008 - 12:38, editado 1 vez
arcachofo
arcachofo
Participante Activo
Participante Activo

Mensajes : 91
Fecha de inscripción : 26/11/2008

Volver arriba Ir abajo

para - Busca-sol, pequeño robot que busca un sitio soleado para recargar sus baterías. Empty Re: Busca-sol, pequeño robot que busca un sitio soleado para recargar sus baterías.

Mensaje por Geo Mar 23 Dic 2008 - 0:25

¿Podrías comentar un poco más sobre la medición de distancia? ¿Emites y mides el tiempo de recepción o cómo lo estás haciendo?

Gracias Smile.

Geo
Participante Activo
Participante Activo

Mensajes : 92
Fecha de inscripción : 16/12/2008
Localización : México

http://hsblog.mexchip.com

Volver arriba Ir abajo

para - Busca-sol, pequeño robot que busca un sitio soleado para recargar sus baterías. Empty Re: Busca-sol, pequeño robot que busca un sitio soleado para recargar sus baterías.

Mensaje por arcachofo Mar 23 Dic 2008 - 0:48

Se trata de aprobechar las características de los receptores tsop de 38 Khz ( o cualquier otra frecuencia), ya que son muy sensibles a esa frecuencia, pero van perdiendo sensiblidad a medida que te alejas de esa frecuencia, entonces la rutina en asm es un conjunto de nops que suponen unos 13uS + 13uS, un pulso correspondiente a unos 38 Khz (a 4Mhz de reloj), entonces el " addwf _pcl,F" hace saltar F lineas al Program Counter....

Esto está dentro de un bucle creo recordar de F = 9 a 0, entonces empieza saltando 9 nops, dando un pulso muy alejado de 38 Khz, por tanto muy poca sensiblidad, osea muy poco alcance (unos 15 cm), a medida que F va disminuyendo se vá acercando más a los 38 Khz y vá aumentando el alcance...

Dentro del pulso se comprueba si el receptor tsop recibe algo, si no recibe nada sigue con el siguiente F, si recibe algo sale del bucle, entonces la distancia del objeto es inversamente proporcional a F, si F = 9 está muy cerca y si F = 1 está al límite del alcance (unos 2m), si F = 0 no hay nada dentro del alcance.

EDITO: F es la variable "med". "_med" en asm.

y he añadido la parte de interrupciones que controlaba los bumpers.
arcachofo
arcachofo
Participante Activo
Participante Activo

Mensajes : 91
Fecha de inscripción : 26/11/2008

Volver arriba Ir abajo

para - Busca-sol, pequeño robot que busca un sitio soleado para recargar sus baterías. Empty Re: Busca-sol, pequeño robot que busca un sitio soleado para recargar sus baterías.

Mensaje por arcachofo Jue 22 Ene 2009 - 1:04

Al final me he animado a hacer un esquema en Kikad, basicamente es lo que tengo hecho por ahora:

Un pic16f876a al que tengo conectados tres grupos de dos células solares, con 4V cada grupo, uno orientado a la derecha, otro a la izquierda y el último hacia atrás, la diferencia de orientación es un pequeño ángulo, pero suficiente para que haya diferencias según de donde venga la luz.
Cada uno de estos tres grupos está conectado a una entrada ADC del pic y a una bomba de carga, la "parte baja" del condensador de carga (C1) está conectada a una salida del puerto C, que es el que maneja los pulsos que cargan la batería. He representado solo una de las entradas con su bomba de carga para no liar la cosa.
Las otras dos entrada ADC irán conectadas al nivel de tensión de la batería y posiblemente a un fototransistor IR que mida el nivel de IR en el ambiente, para hacer correciones en las mediciones de distancia. Pero esto está por hacer.
Este pic lee los niveles de luz y determina en que dirección está la zona má iluminada, y maneja dos 74hc240 (que hacen de bufer a los motores) con las 4 salidas bajas del puerto B (RB0-RB3) a través de resistencias.
Los pines RC6 y RC7 posiblemente los use para conectar con el PC vía puerto serie.


Luego está un pic16f628a que se encarga de esquivar obstáculos, para eso tiene unos bumpers conectados al puerto B (RB6-RB7) que ván por interrupciones, por ahora solo hay dos, pero creo que le pondré otros dos.

Por otro lado tiene tres diodos LED IR: dos de 60º, uno a cada lado y uno de 15º al frente; y un receptor IR Tsop 1738.
Los dos leds laterales con un alcance de unos 50 cm los usa para esquivar obstáculos estimando la distancia y reaccionando más bruscamente cuanto más cerca esté el obstáculo. Hay un potenciómetro para regular el alcance.

Este pic también controla los motores por RB0-RB3, pero a diferencia del pic16f876a no tiene resistencias, con lo que las salidas de este pic anulan cualquier señal que venga del 876a. Este pic actúa por pulsos, que frenan y corrigen la trayectoria según los obstáculos que detecte, mientras no está emitiendo ningún pulso RB0-RB3 están configurados como entradas, así que no afectan las "órdenes" del 876a.

El led central con un alcance de unos 2 m está conectado a este pic, pero creo que irá conectado al pic16f876a, ya que este led es usado para buscar una salida o al menos una posible salida de la habitación o espacio donde se encuentre el robocito en caso de no encontrar sol en ese sitio.

La idea en un futuro es que haga un giro de 360º mientra hace medidas de distancia, de manera que quizás pueda hacer una especie de "mapa" del sitio a partir de las medias hechas, y a partir de aquí podría hacer muchas cosa... reconocer espacios, orientarse... en general tener una representación básica del mundo que le rodea; pero esto todavía no son más que imaginaciones y hay varios problemas básicos que resolver, el primero es que con los motorcitos que tiene no tengo control exacto del giro y cada vez gira un poco más o un poco menos... quizás con servos u otro sistema se pueda hacer... pero esto para la siguiente versión del bicho.


Luego están los dos 74hc240 que hacen de bufers para los motores, 4 inversores en paralelo para cada linea dan suficiente corriente para alimentar los motores.
Desde las salidas de estos hay unas conexiones a traves de diodos hacia las entradas de los comparadores del pic16f628a (RA0, RA1), esto sirve para detectar motores bloqueados, aprovechando que los bufers tienen una fuerte caida de tensión a altos consumos de corriente del motor y que los motores tienen fuertes subidas de consumo de corriente si son bloqueados mientras tienen tensión, pues conectando los niveles de tensión de las salidas de los bufers a los comparadores, y configurados estos con Vref interna a unos 3,5V (todavía por ajustar), si la tensión de la salida de los bufers baja de 3,5V salta la interrupción por comparadores y el robocito intenta salir del bloqueo, si no lo consigue al menos desconecta los motores y quizás emita una señal acústica o algo, pero sobre todo evitar que se queme algo o que se descargue la batería.

Ahora estoy liado sobre todo con el tema de las bombas de carga, pero con el poco sol que hay ultimamente lo tengo dificil para hacer pruebas...

Como siempre cualquier sugerencia es bienvenia.
arcachofo
arcachofo
Participante Activo
Participante Activo

Mensajes : 91
Fecha de inscripción : 26/11/2008

Volver arriba Ir abajo

para - Busca-sol, pequeño robot que busca un sitio soleado para recargar sus baterías. Empty Re: Busca-sol, pequeño robot que busca un sitio soleado para recargar sus baterías.

Mensaje por Geo Dom 23 Oct 2011 - 5:28

Qué tal, ¿cómo has avanzado con este proyecto? Disculpen revivir el tema, pero en estos días estoy buscando opciones para realizar estimación de distancia, quería saber qué intervalos de distancia conseguiste estimar/medir con el sistema que utilizas en este robot.

Geo
Participante Activo
Participante Activo

Mensajes : 92
Fecha de inscripción : 16/12/2008
Localización : México

http://hsblog.mexchip.com

Volver arriba Ir abajo

para - Busca-sol, pequeño robot que busca un sitio soleado para recargar sus baterías. Empty Re: Busca-sol, pequeño robot que busca un sitio soleado para recargar sus baterías.

Mensaje por arcachofo Lun 24 Oct 2011 - 1:01

La mayor distancia que pude medir fueron unos 3m, pero se podría aumentar con mas leds IR (más potencia).

El principal problema es que la sensiblidad varía con el nivel de IR en el ambiente, había pensado en usar un fototransistor IR que midiera este nivel y así se podrían hacer correcciones, nunca lo llegué a hacer, pero la idea era controlar la potencia de emisión de manera que fuera proporcional al nivel IR ambiente y así compensar la variación.

La diferencia era bastante, con muy poco IR ambiente (de noche y luces apagadas) el rango eran 30 Cm - 3 m, con mucho IR ambiente (luz incandescente de 40 w) 10 Cm - 1m.

También noté que el alcance variaba según la duración y combinación de las ráfagas de pulsos, usando un mando a distancia como emisor llegué a conseguir unos 5m de alcance con un led similar, así que se vé que al tsop "le gustan" ese tipo de ráfagas.

Al final la rutina que me dió mejor resultado es esta (en GcBasic, reloj 20 MHz, se ejecuta cada 16 mS):
Código:
    For medida = 1 to 12
        For pulso = 1 to 20 - medida 'más pulsos para las primeras medidas
            set led_IR on
            wait medida us
            if tsop off then detect += 1
            set led_IR off
            wait medida us
        Next

        if detect > 3 then          'ha habido deteccion de objeto
            distancia = medida
            return
        End if
    Next

Otro tema es que las medidas no son lineales, para hacer un sistema de medición de distancia más o menos exacto habría que pulir bastantes detalles, pero para estimar distancias, en plan "está muy cerca" o "esta todavía a cierta distancia" etc. es un sistema sencillo, barato y facil de implementar.

Hay otros temas como tipo y color de materiales que hacen variar las medidas.
También ángulo del haz IR hace variar el alcance.n
arcachofo
arcachofo
Participante Activo
Participante Activo

Mensajes : 91
Fecha de inscripción : 26/11/2008

Volver arriba Ir abajo

para - Busca-sol, pequeño robot que busca un sitio soleado para recargar sus baterías. Empty Re: Busca-sol, pequeño robot que busca un sitio soleado para recargar sus baterías.

Mensaje por Geo Dom 6 Nov 2011 - 6:15

Gracias por la respuesta y por los detalles de tu explicación Smile.

Geo
Participante Activo
Participante Activo

Mensajes : 92
Fecha de inscripción : 16/12/2008
Localización : México

http://hsblog.mexchip.com

Volver arriba Ir abajo

para - Busca-sol, pequeño robot que busca un sitio soleado para recargar sus baterías. Empty Re: Busca-sol, pequeño robot que busca un sitio soleado para recargar sus baterías.

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.