Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

21/02/2011 #1

Avatar de Ajna

Semaforo inteligente ¿Control de flujo?
Hola que tal chavos y no tan chavos pues ya ven aqui dando lata a ver si alguien me puede ayudar con ideas que puedan dar a mi solucion y la cosa dice mas o menos asi:

Trato de hacer el control de flujo de botellas en una banda dichas bandas tienen un contador que cuenta las botellas que pasan por ella y en base a que banda lleva mas botellas debe darles mas o menos tiempo por ejemplo si pasan 100 botellas en cada banda debe darles 1 minuto a cada una pero si en una banda pasan 150 y en la otra pasan 50 pues a la primera hay que darle un minuto y medio y a la otra 30 segundo esa debe ser la relacion, inicialemte pense que con una simple regla de tres funcionaria pero no es asi porque siempre se va ir subiendo el tiempo porque como en el ejemplo se ve si cuento botellas en 1.5 minutos pues va a ser mayor que en 30 segundo y entonces tendria que darle mas tiempo y siempre va ir subiendo.


Como soluciono esto


--------> Banda A
-------------> Banda de salida
--------> Banda B

Como darle preferencia a la banda que lleva mas botellas, necesito encontrar una relacion o formula para poder programarla en el micro de nuevo el ejemplo

Si botellas en A son 100 y botellas en B son 50 darle un minuto y medio a la banda A y 30 a B
Si botellas en B son 100 y botellas en A son 50 darle un minuto y medio a la banda B y 30 a A

Aver si me explique bien sale escucho todas las opiniones nada mas me dan tiempo para analisar cada respuesta sale gracias
21/02/2011 #2

Avatar de DSP

Que tal BENITO2312, creo que te equivocaste en tu ejemplo, porque primero hablabas de 150 en A y 50 en B y despues hablaste de 100 y 50 respectivamente.

Creo entender de que se trata.
No se con que dispositivo controlaras esto, o que tanta programabilidad tengas, pero considero que lo que debes hacer es medir botellas/segundo (cuenta las botellas de cada banda y divídelo entre los segundos que estuvo activa) el dato resultante indicará la tendencia (por decirlo asi). Despues con la "tendencia" puedes calcular la relacion entre una y otra banda.

Tend_A=nBotellasA/tiempoA;

Tend_B=nBotellasB/tiempoB;

Y después calculas los nuevos tiempos asi:

tA=(Tend_A/(Tend_A+Tend_B))*120seg
tB=120seg-tA

upps aver si me explique!!
24/02/2011 #3

Avatar de Ajna

DSP dijo: Ver Mensaje
Que tal BENITO2312, creo que te equivocaste en tu ejemplo, porque primero hablabas de 150 en A y 50 en B y despues hablaste de 100 y 50 respectivamente.

Creo entender de que se trata.
No se con que dispositivo controlaras esto, o que tanta programabilidad tengas, pero considero que lo que debes hacer es medir botellas/segundo (cuenta las botellas de cada banda y divídelo entre los segundos que estuvo activa) el dato resultante indicará la tendencia (por decirlo asi). Despues con la "tendencia" puedes calcular la relacion entre una y otra banda.

Tend_A=nBotellasA/tiempoA;

Tend_B=nBotellasB/tiempoB;

Y después calculas los nuevos tiempos asi:

tA=(Tend_A/(Tend_A+Tend_B))*120seg
tB=120seg-tA

upps aver si me explique!!
Ok antes que nada gracias por responderme, veamos como ejemplo inicial cada tiempo va a ser de 60 segundos para cada banda y en banda A pasan 100 y en banda B pasan 50

Tend_A = 100 / 60s = 1.666
Tend_B = 50 / 60s = 0.8333

Y despues calculamos los nuevos tiempos

tA = (1.666/(1.666+0.8333))*120s = 80s
tB = 120s - tA = 40s

Hasta aqui todo bien.

Luego aqui viene otra duda, el siguiente conteo de botellas lo hago en cuanto tiempo?, es decir para el caso Tend_A lo hago en 80segundos o en 60segundos porque si lo hago en 80s pues siempre va a seguir creciendo y creciendo Tend_A. Aver si lo hago en 80segundo y suponiendo que ahora pasan 50 botellas en A y 100 en la banda B entonces daria:
Tend_A = 50 / 80s = 0.625
Tend_B = 100 / 40s = 2.5

tA = (0.625/(0.625+2.5))*120s = 24s
tB = 120 - tA = 96s

Esto ya no es correcto porque entonces ahora tB deberia ser 80s y tA deberia ser 40s porque ahora en A pasan 50 y en B pasan 100 o no la verdad ya no se como hacerle he estado intentado varias soluciones programandolas en c y metiendo varios casos pero siempre me salen error como este donde la suma de los dos tiempos ya no es 120s ves ojala puedas hecharme la mano hasta ahora ningun profesor me ha podido ayudar a dar con la solucion sale gracias y ojala puedas seguirme apoyando
24/02/2011 #4

Avatar de DSP

Que tal BENITO2312, mira, lei tus calculos y crei que eso es lo que querias. La suma de tiempos siempre será 120s y este algoritmo siempre dará prioridad a la banda que mas botellas por segundo entrega. No soy matematico pero considero que este algoritmo se anticipa de cierta manera a lo que se puede esperar en cada banda. De esta manera intuyo que obtendrás mejores resultados que basandose unicamente en el numero de botellas ignorando el tiempo anterior de cada banda.

Con otras palabras:

En el algoritmo que te propuse:


El tiempo de cada banda depende del numero de botellas por segundo anteriores en cada banda

y al parecer requieres que

El tiempo de cada banda depende del numero de botellas anteriores en cada banda (ignorando el tiempo anterior en las mismas)

No se porque razon prefieres algo así pero de ser así, dame tiempo, aver que se me ocurre

saludos
25/02/2011 #5

Avatar de Ajna

DSP dijo: Ver Mensaje
Que tal BENITO2312, mira, lei tus calculos y crei que eso es lo que querias. La suma de tiempos siempre será 120s y este algoritmo siempre dará prioridad a la banda que mas botellas por segundo entrega. No soy matematico pero considero que este algoritmo se anticipa de cierta manera a lo que se puede esperar en cada banda. De esta manera intuyo que obtendrás mejores resultados que basandose unicamente en el numero de botellas ignorando el tiempo anterior de cada banda.

Con otras palabras:

En el algoritmo que te propuse:


El tiempo de cada banda depende del numero de botellas por segundo anteriores en cada banda

y al parecer requieres que

El tiempo de cada banda depende del numero de botellas anteriores en cada banda (ignorando el tiempo anterior en las mismas)

No se porque razon prefieres algo así pero de ser así, dame tiempo, aver que se me ocurre

saludos
Hola gracias de nuevo pues ya le di varias repasadas pero no me sale mira ahorita ya es tarde pero mañana temprano voy a dibujar en papel lo que pretendo hacer y le saco una foto y la subo igual con dibujos nos entendemos mejor verdad sale de todos modos muchas gracias por estar al pendiente
25/02/2011 #6

Avatar de Ajna

Hola de nuevo ya subi la imagen de lo que pretendo hacer y las condiciones serian las siguientes:
NBA = Numero de botellas en A
NBB = Numero de botellas en B
Si NBA = NBB entonces cada banda dejara pasar botellas durante 60 segundos
Si NBA > NBB entonces la banda A tendra mas tiempo para que pasen las botellas
Si NBA < NBB entonces la banda B tendra mas tiempo para que pasen las botellas

Ahora la suma de ambos tiempos tiene que ser maximo de 120 segundos

El problema esta a la hora de hacer los ajustes de tiempo en base al numero de botellas fluyen en cada banda. Mi solucion hasta ahora era hacer una regla de tres asi:

NBA = 100 en 60s
NBB = 100 en 60s

Si despues del conteo resulta que ahora en A pasan 150 y en B solo pasan 50 entonces

NBA = 150 en 60s
NBB = 50 en Xs

Xs = (50*60s)/150 = 20s

y el tiempo para NBA sera 120s - Xs = 100

Hasta aqui todo bien el problema es que si ahora cuento las botellas en NBA durante los 100S pues seguira creciendo el tiempo para NBA y NBB sera mas y mas chico, como resuelvo esto, es como controlar el trafico de botellas si hay mas botellas les doy mas tiempo para desahogar la banda, ojala alguien pueda hecharme la mana, ya le busque desde probabilidad hasta formulas que no habia escuchado antes como la de erlang y no le doy al clavo, de antemano gracias y ojala alguien me pueda ayudar. Por cierto me gustaria saber que paso con el usuario que dijo que hiba a comprar mil microcontroladores Atmel y que nos hibamos a repartir gastos para que saliera mas barato jejej yo todavia sigo interezado sobre todo por el atmega32
Imágenes Adjuntas
Tipo de Archivo: jpg 25022011052.jpg (43,4 KB (Kilobytes), 15 visitas)
25/02/2011 #7

Avatar de DSP

Creo que no me has entendido bien, o yo no entiendo exactamente lo que tu quieres.

Te pongo un ejemplo:

Supongamos que vendes helados ...

Ayer fuiste 5 horas a una colonia x y vendiste 10 helados...
Hoy fuiste 1 hora a una colonia y y vendiste 8 helados...

¿A donde te conviene ir mañana?


Saludos!!!
25/02/2011 #8

Avatar de Ajna

DSP dijo: Ver Mensaje
Creo que no me has entendido bien, o yo no entiendo exactamente lo que tu quieres.

Te pongo un ejemplo:

Supongamos que vendes helados ...

Ayer fuiste 5 horas a una colonia x y vendiste 10 helados...
Hoy fuiste 1 hora a una colonia y y vendiste 8 helados...

¿A donde te conviene ir mañana?


Saludos!!!

A ningun lado vendi muy poquitos jajaj no cierto no te enojes, pues claramente iria a Y, chale ya me bloque ya no se que prosigue voy a pensar hasta que me reviente la cabeza
26/02/2011 #9

Avatar de Ajna

Hola otra ves yo mira hice el programa en c para poder ejecutarlo lo hice con las formulas que me pasas, checalo y veras que inicialmente sale bien pero prueba a poner valores iguales de botellas en las bandas y se supone que en algun momento los tiempo tiene que volver a ser 60 segundos para cada uno pero eso nunca ocurre te dejo el programa

Hola otra ves yo oye para darle solucion fije como constante un tiempo y fue el tiempo minimo en el que pasaran botellas en cada banda, esto porque si sigues haciendo las operaciones hay momentos en los que le asigna 0.001 segundos a una banda y a la otra casi todo y pues en 0.001 segundos no pasaria ninguna botella entonces fije el valor minimo en 20 segundos entonces las formulas quedan asi:
NBA = Numero de botellas en A
NBB = Numero de botellas en B

TendA = NBA/20
TendB = NBB/20

tA = (TendA / (TendA+TendB))*120
tB = 120 - tA

A si si da en caso de que NBA o NBB sea menor que 20 botellas en los 20 segundos pues asigno 60 segundos a cada banda "Nota nunca pasan menos de 50 botellas en 20 segundos". Nada mas dime de donde sacaste esa relacion para tA osea como fue que la desarrollaste o como se llama la ecuacion o porque te salio hee

Tambien puse limites superiores es decir por si exageradamente llegaran a pasar 1 millon de botellas en A y 20 en B pues limito el tiempo maximo a la banda A en 100 segundos y a B en 20 jejej force todo pero al menos funciona haber ahora como le explico al profe
Archivos Adjuntos
Tipo de Archivo: zip NONAME00.zip (34,2 KB (Kilobytes), 19 visitas)
28/02/2011 #10

Avatar de DSP

... osea que ya quedo??

cheque el programa, es cierto si pones valores iguales nunca te dará otravez los 60s. Pero será así porque una banda trae mas botellas que la otra, porque a pesar de que a una le das mas tiempo, las botellas entregadas son la misma cantidad.

tA = (TendA / (TendA+TendB))*120 solo es una relacion

Es como hacer una regla de tres:

Segundos Tendencia
120 --> TendA + TendB
? --> TendA

Saludos!!
28/02/2011 #11

Avatar de Ajna

Hola gracias DSP es cierto es una relacion simple jeje nomas que no me di cuenta y si ya le di solucion gracias por tu ayuda y la no cierto nomas tu ayuda jaja fuiste el unico sale que estes bien gracias
28/02/2011 #12

Avatar de DSP

ok, no hay de que.
que bueno que quedó
saludos
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.