Parque de Estacionamento Utilizando o Arduino Uno

Olá a todos

Estou para vos pedir uma ajudinha com um projecto escolar que eu estou a fazer e estou a utilizar um Arduino Uno. O projecto é um parque de estacionamento de 8 lugares com um indicador de parque livre e de parque completo e com uma entrada e uma saída (utilizando servos) e se possível um display de 7 segmentos (que indicá-se o número de vagas existentes no parque). A minha ideia era que quando um carro estivesse para entrar no parque a barreira abria durante 5 segundos e passado esse tempo a barreira fecha e é adicionado esse carro à contagem e na saída quando um carro está para sair a barreira abre e fecha passados 5 segundos e é retirado um carro à contagem. Quando o parque está cheio, acende a luz vermelha e logo que sai um carro a luz vermelha apaga-se e acende-se a luz verde.

Será que me podem dar uma ajudinha?

O que é que já fizeste?

Apenas fiz pequenos testes utilizando um programa de um parque de estacionamento que me deram, mas esse programa apenas é o indicador de parque livre e parque completo.

Ok...

Nota, nós não estamos aqui para fazer os teus trabalhos. Estamos aqui para tirar dúvidas. Quando te perguntei o que já tinhas feito era para ver se conseguia "arrancar" perguntas em concreto sobre o que tens dúvidas e poder ajudar-te dessa forma.

Perguntar para te ajudarem num projecto sem dizeres o que já tens feito ou onde ficaste encalhado, vai ser mais um post aqui a ganhar pó. Vê o que te falta, o que não sabes em concreto e pergunta. Há por aqui imensa gente capaz de te responder. :slight_smile:

Eu também não estou aqui para fazerem o trabalho por mim. Eu já fiz o programa, só que quando eu coloco para passar o programa para o Arduino ele dá me uns erros de variáveis. Em anexo coloco o programa do Arduino, para ver se alguém consegue ver de onde vem os erros.

P.S. Eu sou novo no mundo Arduino tenho 2 ou 3 semanas de experiencia, ainda não sei muito.

Ninguém disse que estavas aqui para sermos nós a fazer o programa... mas a verdade é que não deste muita informação ou sequer questões para te podermos ajudar.

Coloca aqui os erros e o código que estás a usar para podermos ver onde está o erro.

Aqui está o programa!!!

Parque_de_Estacionamento.ino (2.61 KB)

O que esperas atingir com isto:

const int One = 3 , 4;

const int Two = 2 , 3 , 5 , 6 , 8;

const int Three = 2 , 3 , 4 , 5 , 8;

const int Four = 3 , 4 , 7 , 8;

const int Five = 2 , 4 , 5 , 7 , 8;

?

bubulindo:
O que esperas atingir com isto:

const int One = 3 , 4;

const int Two = 2 , 3 , 5 , 6 , 8;

const int Three = 2 , 3 , 4 , 5 , 8;

const int Four = 3 , 4 , 7 , 8;

const int Five = 2 , 4 , 5 , 7 , 8;



?

Eu ia colocar a mesma questão, quando atualizei a página você tinha sido mais rápido :wink:

Eu sou o flash do Fórum do Arduino. LOL

Se calhar isto é sinal que passo demasiado tempo aqui... Por falar nisso, fiquem bem. Vou passar o fim de semana fora de casa. :slight_smile:

bubulindo:
Eu sou o flash do Fórum do Arduino. LOL

Se calhar isto é sinal que passo demasiado tempo aqui... Por falar nisso, fiquem bem. Vou passar o fim de semana fora de casa. :slight_smile:

Ok The Flash! kkkk

Tirar uma folga é verdadeiramente bom! :wink:

Eu responderei a todas as pessoas e quando voltares tu corriges tudo o que eu disser, ok? rs

essa linguagem era para o display de 7 segmentos.

Ola vejo muitas coisas menos corretas.

if(digitalRead(IncreasePin)==LOW&&COUNTER<maxCar)
{
COUNTER++;
info();
delay(wait);
}

na loop tens isto, a intençao é boa mas o que irá acontecer se mantiveres o pino em baixo?
A loop é mais rapida que tu ou o sensor e isso ira logo atingir o valor maximo mesmo antes do sensor ou botao ser solto.
Tens de encravar a funçao para que isso nao aconteça
O que te aconcelho é antes de partires para a programaçao desenharem numa folha um algoritmo de como o programa tem de funcionar e partires cada parte em pequenas funçoes,depois partes para o programa.
Tipo funçao detecta carro, funçao verifica lugar parque, funçao semaforo ...
No teu codigo que postaste estas a repetir muitas vezes a mesma coisa que pode ser reutilizada.
Pensa primeiro nisso

como assim fazer o algoritmo no papel?

Tuba,

O que o HugoPT quer dizer é que o loop corre muito rápido e se fizeres um teste apertando e soltando o botão, o teu count pode ser incorreto, pois o loop pode registrar o estado LOW mais de uma vez em um único pressionamento.

dê uma olhada nesse exemplo, ele melhora o tratamento do pressionamento (ou do sensor que enviará o sinal):

http://arduino.cc/en/Tutorial/ButtonStateChange

Outro método que pode utilizar é esse:
http://arduino.cc/en/Reference/AttachInterrupt

Sobre o todo, como o HugoPT disse, faz cada parte isoladamente, testa o pressionamento do botão (ou disparo do sensor), depois a movimentação dos servos, o display, etc e depois junta todo o código gradativamente, esse é o caminho mais fácil e prático (digo por experiência própria ^^).

sobre o código abaixo:

bubulindo:
O que esperas atingir com isto:

const int One = 3 , 4;

const int Two = 2 , 3 , 5 , 6 , 8;

const int Three = 2 , 3 , 4 , 5 , 8;

const int Four = 3 , 4 , 7 , 8;

const int Five = 2 , 4 , 5 , 7 , 8;



?

Presumo que desejavas era o que tem neste link: http://www.hacktronics.com/Tutorials/arduino-and-7-segment-led.html

Se algo não funcionar ou se tiveres alguma dúvida, retorna aqui que tentamos te ajudar.

como assim fazer o algoritmo no papel?

A minha sugestao e desenhares tipo com baloes e instruçoes de decisao num papel o diagrama que o teu programa tem de fazer e resolver mediante o desafio que tens.
Partes cada bocado num pequeno problema e vais criando funçoes para cada uma delas
Por exemplo no teu codigo que postaste estas a repetir a mesma coisa imensas vezes para ligares os leds com o numero de lugares no parque.Para contornar isso podes usar uma variavel de 8 bits e mandares essa variavel directamente no Porto onde tens os leds.Assim podes usar uma funçao para la escrever de uma forma simples:

void writeVariableToPortB(uint8_t valueToPort)
{
DDRB = 0x1F;        //seta os 5 bits menos significativos do porto B como outputs
PORTB = valueToPort;             //escreve valor na PortaB
}

Ve esta pequena tabela de verdade que fiz no excel sobre os valores que a variavel que passas para a funçao terá de ter:
Ou seja se quiseres ligar o led 5 passas para a funçao uma variavel com o valor de 32 por exemplo:

uint8_t portVariable = 1;

void setup()
{
 DDRB = 0x1F; //seta os 5 bits menos significativos do porto B como outputs 0b00011111
 /*O portB tem como pinos no Atmega328 a seguinte ordem:
 bit0 do PortoB ----->Pino 8 no arduino
 bit1 do PortoB ----->Pino 9 no arduino
 bit2 do PortoB ----->Pino 10 no arduino
 bit3 do PortoB ----->Pino 11 no arduino
 bit4 do PortoB ----->Pino 12 no arduino*/
}
void loop()
{
  for(uint8_t i = 0; i<=4;i++)
 {
   writeVariableToPortB(portVariable);
   portVariable = portVariable * 2;
   delay(1000);
   if(portVariable == 64)portVariable = 1;//Renicia o ciclo
 }

}
void writeVariableToPortB(uint8_t valueToPort)
{
PORTB = valueToPort;//Escreve o valor no PortoB
}

Este codigo deverá fazer correr os 5 leds e devera dar para resolveres essa repetiçao de codigo.Agora resolves os outros erros ...

TabelaVerdade.png

Desculpa, mas não estou a perceber o isso dos valores decimais.
E isso do algoritmo é tipo isto:

fluxograma parque estacionamento.bmp (18.2 KB)

Desculpa, mas não estou a perceber o isso dos valores decimais.

Esses valores em decimal e a conversao de binario para decimal.Se pegares numa calculadora em modo programaçao (usa a do windows) e colocares la 10000 no formato binario e carregaresm em DEC ele converte esse numero para decimal que é o mesmo valor mas numa representaçao diferente

E isso do algoritmo é tipo isto:

Nao bem, é mais algo assim:

Fluxogranma02.gif

desculpa estar a pedir te isto mas eu tou desesperado é que nao entregar esse projecto concluido no inicio do 3º periodo tenho que me inscrever para a recuperação do modulo e isso vai custar me 7 euros.

Nao vou fazer isso pois isso e contra tudo neste forum.Se pedires ajudar sim irei ajudar nas tuas DUVIDAS, mas nao irei fazer isso que me pedes.
Se eu te fizer isso nao vais perceber no final e nao vais ganhar nada nem aprender.Nao penses dessa forma,nao encares esse projecto como algo que tens de fazer a pressa e depois arrumou pra sempre.Da valor ao que estas a fazer e dedica-te a ele.
Acredita que eu no teu lugar preferia chumbar o modulo se quando o estivesse para apresentar nao entende-se o que la tinha feito

Tá bem mas eu depois de isso completo eu ia pedir que me ensinasses a fazer essas coisas, pois o professor diz que se eu fizer bem o trabalho me oferece o arduino.
E desculpa, por isto mas é que eu estou um pouco às cegas com o projecto, apenas tenho as ideias de o que queria que acontecesse no parque, mas nao percebo patavina da linguagem que deveria fazer, será que me podes ensinar a fazer a linguagem para este projecto?