LusoRobótica - Robótica em Português
Sobre o LusoRobótica - antigo => Sugestões e Questões => Tópico iniciado por: Dilan Granjo em 01 de Dezembro de 2010, 20:56
-
Boa Noite, eu preciso de ajuda num projecto para Automação e comando, o trabalho é a criação de um programa de um elevador com 3 andares com o seguinte funcionamento...(para PIC LINGUAGEM C)
Funcionamento
PONTO 1- O Elevador é activado através do switch colocado em ON situado no comando a distância, quando isto acontece será activado um LED de cor Verde para indicar a activação do comando a distância e para demonstrar que estamos prontos para operar com o elevador.
PONTO 2 – Temos dois tipos de sensor:
- O Interno – Esta colocado dentro da cabine do elevador para ser detectado pelos sensores externos.
- O Externo – Neste elevador existem 3 (R/C; 1ºAndar; 2º Andar), eles vão detectar a presença do sensor interno e enviaram uma mensagem para o autómato a localizar a cabine.
PONTO 3 – O Rés-do-chão, 1º Andar, 2º Andar tem 3 botões respectivamente, sendo que teremos que pressionar um deles para que a cabine se movimente.
PONTO 4 – A cabine está ligado a um motor de 24V que desloca a cabine (depois de pressionados os botões) para o andar desejado.
PONTO 5 – Existe um Botão de Emergência para o caso de existência de algum problema com o elevador, este Botão ira parar todo o circuito impedindo que o elevador continue a sua marcha. Ele estará sinalizado com um LED vermelho que ira piscar em modo intermitente
-
Procuras alguém que te faça o programa?
Qual a experiência que tens de programação em PIC ?
-
Então, precisas de uma ponte H para controlar o motor, para controlo muito grosseiro podes só ligar e desligar o motor e mudar o sentido de rotação, mas para um controlo mais preciso e suave deves usar pwm.
O botão de emergência o melhor é usar um pino que suporte interrupção, e quando esse pino é activado na interrupção metes o led a piscar e páras o motor.
O pseudo código muito grosseiro deve ser algo assim:
//função que trata da interrupção
Parar motor imediatamente!
Piscar led
//Função main
Enqanto(botão não pressionado){
Ver se foi pressionado o botão do comando, se sim parar o ciclo infinito;
}
Ler os botões da cabine;
Ler o sensor para ver em que andar nos encontramos;
Se andar selecionado é superior ao actual, andar para cima;
Se andar selecionado é inferior ao actual, andar para baixo;
Enquanto(andar destino diferente de andar lido pelo sensor){
Ler o sensor do andar;
Quando valor do sensor igual a andar desejado, parar motor;
}
Acho que será algo assim.
Tens aqui código para um elevador de 5 andares, com pouco trabalho alteras para 3:
http://tams-www.informatik.uni-hamburg.de/applets/hades/webdemos/95-dpi/pic16f84-elevator5/elevator.html (http://tams-www.informatik.uni-hamburg.de/applets/hades/webdemos/95-dpi/pic16f84-elevator5/elevator.html)
PS.: Sou o Tiago.
-
Procuras alguém que te faça o programa?
Qual a experiência que tens de programação em PIC ?
Nenhuma e sim precisava de alguém que me fizesse o programa :S
-
Então, precisas de uma ponte H para controlar o motor, para controlo muito grosseiro podes só ligar e desligar o motor e mudar o sentido de rotação, mas para um controlo mais preciso e suave deves usar pwm.
O botão de emergência o melhor é usar um pino que suporte interrupção, e quando esse pino é activado na interrupção metes o led a piscar e páras o motor.
O pseudo código muito grosseiro deve ser algo assim:
//função que trata da interrupção
Parar motor imediatamente!
Piscar led
//Função main
Enqanto(botão não pressionado){
Ver se foi pressionado o botão do comando, se sim parar o ciclo infinito;
}
Ler os botões da cabine;
Ler o sensor para ver em que andar nos encontramos;
Se andar selecionado é superior ao actual, andar para cima;
Se andar selecionado é inferior ao actual, andar para baixo;
Enquanto(andar destino diferente de andar lido pelo sensor){
Ler o sensor do andar;
Quando valor do sensor igual a andar desejado, parar motor;
}
Acho que será algo assim.
Tens aqui código para um elevador de 5 andares, com pouco trabalho alteras para 3:
http://tams-www.informatik.uni-hamburg.de/applets/hades/webdemos/95-dpi/pic16f84-elevator5/elevator.html (http://tams-www.informatik.uni-hamburg.de/applets/hades/webdemos/95-dpi/pic16f84-elevator5/elevator.html)
PS.: Sou o Tiago.
Tiago o link que me envias-te não consigo abrir manda-me o mozilla abaixo :S ah isso é que é um pseudo codigo, pois mas isso eu nao posso entregar :( precisava de um programasito para mostrar algo :( usanod a pic que esta na imagem)
-
Tenho de reportar esse erro ao TigPt, por alguma razão o forum adiciona http://www (http://www). a todos os links e isso dá cabo da coisa, o código que está nesse link é este:
// Elevator controller (5 floors) with PIC16F84 for Hades webdemos.
// Also demonstrates how to implement state-machines as C programs.
//
// 22.12.05 - first version (picclite+hitide)
//
// (c) 2005 fnh hendrich@informatik.uni-hamburg.de
#include "htc.h"
// the push-buttons that request the elevator target floor
// we map BUTTON_0=RA4 etc. to keep the schematics simple..
//
#define BUTTON_0 RA4
#define BUTTON_1 RA3
#define BUTTON_2 RA2
#define BUTTON_3 RA1
#define BUTTON_4 RA0
// the sensors that indicate which floor the elevator car
// has reached. Again we map 0-4 1-3 etc. to avoid signal
// crossing in the schematics.
//
#define SENSOR_0 RB4
#define SENSOR_1 RB3
#define SENSOR_2 RB2
#define SENSOR_3 RB1
#define SENSOR_4 RB0
// two output ports used to control the elevator motor
// (on/off) and motor direction (up/ndown).
//
#define MOTOR_ON RB6
#define UP_NDOWN RB7
// the elevator states: parked means waiting (at floor < i >),
// up_to and down_to imply moving to the corresponding floor.
// We force an encoding that allows you to watch the state
// during the simulation (upper nibble=1/2/4: parked/up/down),
// lower nibble=floor index, 0xff=error
//
enum elevator_state {
PARKED_0 = 0x10,
PARKED_1 = 0x11,
PARKED_2 = 0x12,
PARKED_3 = 0x13,
PARKED_4 = 0x14,
UP_TO_1 = 0x21,
UP_TO_2 = 0x22,
UP_TO_3 = 0x23,
UP_TO_4 = 0x24,
DOWN_TO_3 = 0x43,
DOWN_TO_2 = 0x42,
DOWN_TO_1 = 0x41,
DOWN_TO_0 = 0x40,
UNKNOWN = 0xff,
};
enum motor_state {
STOP = 0x00,
MOVE_UP = 0xc0,
MOVE_DOWN = 0x80,
};
// global variables for state-machine state and motor control
//
unsigned char state = PARKED_0;
unsigned char motor = STOP;
// inidicate an error by lighting the LED on port B.5
// (note that RB5 is also used to reset the SR-flipflops,
// but the short strobes should not be visible on a real LED.
void
error(void)
{
motor = STOP;
for(;;) {
RB5 = 1;
}
}
void
main(void)
{
GIE = 0; // disable interrupts
TRISA = 0x1f; // all inputs
TRISB = 0x1f; // RB7..RB5 outputs, RB4..RB0 inputs
for( ;; ) {
switch( state ) {
case PARKED_0:
if (BUTTON_1 | BUTTON_2 | BUTTON_3 | BUTTON_4) {
state = UP_TO_1;
motor = MOVE_UP;
}
else {
motor = STOP;
}
break;
case PARKED_1:
if (BUTTON_2 | BUTTON_3 | BUTTON_4) {
state = UP_TO_2;
motor = MOVE_UP;
}
else if (BUTTON_0) {
state = DOWN_TO_0;
motor = MOVE_DOWN;
}
else {
motor = STOP;
}
break;
case PARKED_2:
if (BUTTON_3 | BUTTON_4) {
state = UP_TO_3;
motor = MOVE_UP;
}
else if (BUTTON_0 | BUTTON_1) {
state = DOWN_TO_1;
motor = MOVE_DOWN;
}
else {
motor = STOP;
}
break;
case PARKED_3:
if (BUTTON_4) {
state = UP_TO_4;
motor = MOVE_UP;
}
else if (BUTTON_0 | BUTTON_1 | BUTTON_2 ) {
state = DOWN_TO_2;
motor = MOVE_DOWN;
}
else {
motor = STOP;
}
break;
case PARKED_4:
if (BUTTON_0 | BUTTON_1 | BUTTON_2 | BUTTON_3) {
state = DOWN_TO_3;
motor = MOVE_DOWN;
}
else {
motor = STOP;
}
break;
case UP_TO_1:
if (SENSOR_2 | SENSOR_3 | SENSOR_4) {
error();
}
if (BUTTON_2 | BUTTON_3 | BUTTON_4) {
state = UP_TO_2;
motor = MOVE_UP;
}
else if (SENSOR_1) {
state = PARKED_1;
motor = STOP;
}
else {
motor = MOVE_UP;
}
break;
case UP_TO_2:
if (BUTTON_3 | BUTTON_4) {
state = UP_TO_3;
motor = MOVE_UP;
}
else if (SENSOR_2) {
state = PARKED_2;
motor = STOP;
}
else {
motor = MOVE_UP;
}
break;
case UP_TO_3:
if (BUTTON_4) {
state = UP_TO_4;
motor = MOVE_UP;
}
else if (SENSOR_3) {
state = PARKED_3;
motor = STOP;
}
else {
motor = MOVE_UP;
}
break;
case UP_TO_4:
if (SENSOR_4) {
state = PARKED_4;
motor = STOP;
}
else {
motor = MOVE_UP;
}
break;
case DOWN_TO_3:
if (BUTTON_2 | BUTTON_1 | BUTTON_0) {
state = DOWN_TO_2;
motor = MOVE_DOWN;
}
else if (SENSOR_3) {
state = PARKED_3;
motor = STOP;
}
else {
motor = MOVE_DOWN;
}
break;
case DOWN_TO_2:
if (BUTTON_1 | BUTTON_0) {
state = DOWN_TO_1;
motor = MOVE_DOWN;
}
else if (SENSOR_2) {
state = PARKED_2;
motor = STOP;
}
else {
motor = MOVE_DOWN;
}
break;
case DOWN_TO_1:
if (BUTTON_0) {
state = DOWN_TO_0;
motor = MOVE_DOWN;
}
else if (SENSOR_1) {
state = PARKED_1;
motor = STOP;
}
else {
motor = MOVE_DOWN;
}
break;
case DOWN_TO_0:
if (SENSOR_0) {
state = PARKED_0;
motor = STOP;
}
else {
motor = MOVE_DOWN;
}
break;
default:
error();
} // end switch(state)
// a variant of the elevator circuit uses extra SR-flipflops
// to make sure that the (short) pulses generated by the
// floor-sensors are picked up by this program loop.
// To reset the flipflops, we generate a short-pulse on RB5
// now. We can do this here, because we have just handled
// one iteration of the state-machine state update.
// The single pulse is too short to make the error LED
// light up visibly.
RB5 = 1;
RB5 = 0;
// now activate the motor corresponding to the current
// state. We just need RB7 and RB6, but the other bits
// are inputs anyway.
PORTB = motor;
// finally, reset the watchdog timer.
CLRWDT();
}
}
// we don't use interrupts in this program.
//
static void interrupt
isr(void)
{
if(T0IF) { // timer interrupt
error();
}
else if(INTF) {
error();
}
}
E o link em condições:
http://tams-www.informatik.uni-hamburg.de/applets/hades/webdemos/95-dpi/pic16f84-elevator5/elevator.html
-
Procuras alguém que te faça o programa?
Qual a experiência que tens de programação em PIC ?
Nenhuma e sim precisava de alguém que me fizesse o programa :S
Em que ano estás da escola ?
Há muita ajuda aqui no forum, e por toda a internet.
Não sei ao certo se a ajuda que tu queres, a vais ter da maneira que queres.
-
Procuras alguém que te faça o programa?
Qual a experiência que tens de programação em PIC ?
Nenhuma e sim precisava de alguém que me fizesse o programa :S
Hum... wrong answer !
-
Procuras alguém que te faça o programa?
Qual a experiência que tens de programação em PIC ?
Nenhuma e sim precisava de alguém que me fizesse o programa :S
Hum... wrong answer !
Wrong mesmo.
Vamos ver o q ele responde a seguir. Isto é tipo batalha naval.
-
Boa tarde. Eu gostaria de saber se era possivel alguem me ajudar a fazer um projecto de um elevador com 5 pisos. A minha PIC e a 18F452.Aguardo uma resposta em breve obrigado.
-
Já está por ai código, adicionar andares é trivial.
-
Mas nao da para compilar. Por isso mesmo e que eu pedi ajuda eu queria algo tipo isto:
while(true)
{
if (input(PIN_D1)==0) num_andar_proximo=1; //ANDAR 1º
if (num_andar_presente > num_andar_proximo)
{
output_high(PIN_B2);
delay_ms (t);
output_low(PIN_B2);
num_andar_presente=num_andar_proximo;
}
Queria algo tipo o codigo que ta em cima. Fazer comparações entre eles.
-
Senso queria-te fazer uma pergunta se não consegues arranjar um trabalho em linguagem C em que apareça num LCD os seguintes parâmetros:
Temperatura, humidade, luminosidade, pulverizadade, horas e data.
Nao e para mim e para um colega meu, que e para entregar no final do Curso
Aguardo uma resposto em breve..
-
Não leves a mal, mas....
Ninguem vai fazer um trabalho para outra pessoa, pelo menos de graça não.
Imagino que aprenderam a fazer algumas dessas coisas nas aulas, depois é pegar em tudo e juntar num projecto só.
-
Eu perguntei tipo para me dares umas dicas, nao queria que me fizesses o trabalho tas a perceber.
Mas obrigado na mesma
-
Só te posso ajudar em AVR's, não uso PIC's, mas isso é algo simples que se encontra muito facilmente na internet.
-
Eu posso te ajudar, mas simplesmente vou só tirar dúvidas... ;)
Indica aqui todos os parametros e o conhecimento que tens... 8)