Boa noite galera.

Vamos para mais uma discussão,

Seguinte, vi aqui no LdG um esquema com código de PWM, 

o código testei com um led funciona legal (só precisamos mudar umas coisas).

o circuito: 

Para controlar o motor usei um IRFZ46n, muito bom.

o Código:

(está em anexo ok, para o post não ficar muito grande):

Agora as mudanças que gostaria de fazer:

Por favor, o meu nível de programador não é zero (já aprendi um pouquinho) mais não o suficiente para mudar programação e discutir a nível médio e avançado.

1. Ao incrementar ou decrementar os valores gostaria que ao chegar no 256 (máximo) ele parasse ou chegasse no 0 também, isto é variasse somente de 0 a 256 (mínimo ao máximo e ou vice versa). Ele dá o loop e começa novamente, se você pulsar o crementar, ela sai do zero vai ao maximo e estoura começando novamente.

2. Inserir dois display de 7 segmentos para indicar de 00 a 99 (valor proporcional ao PWM) ou seja de acordo que fosse crementando os valores do display também fossem subindo até ao máximo.

E ai vamos fazer e postar depois para os garaginos ? Eu vi algo em um site de vendas e custa em torno de 45U$D. Claro que aqui é por curiosidade e para aplicar no motor de meu barco.

O anuncio que vi tinham 3 display (indicava de 0 a 100) mais de 0 a 9 já estaria legal.

Como tenho um Arduino Uno talvez não teremos porta para tal (mais podemos multiplexar os displays) usando um duplo ? 

Valeu vamos lá.

José Antonio 

Exibições: 974

Anexos

Responder esta

Respostas a este tópico

Ninguém por enquanto ? Vamos pensar.

 

Olha sobre o display sim tem a opção de se multiplexar, o que eu acho mais pratico pela menor quantidades de portas que você irá gastar, ja o código é só você por uma condição dentro dos ifs que são responsáveis pelo incremento e decremento da variável  

if (incButton == HIGH)
{
if(val == 255) val = 255;
else val++;
}
if(decButton == HIGH)
{
if(val == 0) val = 0;
else val=val-1;
}

Boa tarde Gabriel.

Tá a primeira parte realmente está resolvida. Não estoura mais.

Agora gostaria de inserir os display fazendo ele ler de 0 a 100 (ou 99), ou seja 0 a 255 = 0 a 100, hum uma equação ai, ou seja quando estiver 128 estará em 50%, quando estiver em 64 = 25%. 100/256. Agora mandar o display ler estes valores ? e inserir os display no circuito ? Mais deve ser mais ou menos isto não ? No aguardo.

Obrigado por enquanto.

JA 

Pessoal, boa noite,

Estava pensando em usar um garagino ou mesmo um kit arduino compatível para a montagem para não sacrificar meu Arduino Uno (só tenho ele), o que acham ? Mais enquanto não finalizar esta parte do ajuste (leitura não tem como).

LdG favor help-me.

Obrigado.

Depois de tanto pesquisar cheguei a um circuito onde reuni diversas informações.

Fiz na mão grande (e por acaso ninguém, nem uma alma boa me ajudou). 

Mais sou persistente e ai esta. Por enquanto com 1 display de 0 a 9 com botões de acelera e desacelera com saída PWM. Agora farei durante a semana até o 99 na MÃO GRANDE.

Sei que deve haver alguma coisa do tipo. Olha memória se for 25 o valor da PWM você mostrará o numero 10 no display, ou melhor aquela equação 100/255.

Valeu até a proxima


int motorPin = 3; // Motor conectados ao pino 3
int incPin = 4; // Pushbotton para ascelerar conectado no pino 4
int decPin = 5; // Pushbotton para desascelerar conectado no pino 5
int val = 0; // Valor 0 para motor
int incButton = LOW; // valor zerado no push de ascelerar
int decButton = LOW; // valor zarado no push de desascelerar
int displayA = 6; // segmentoA conectado no pino 6
int displayB = 7; // segmentoB conectado no pino 7
int displayC = 8; // segmentoC conectado no pino 8
int displayD = 10; // segmentoD conectado no pino 10
int displayE = 11; // segmentoE conectado no pino 11
int displayF = 12; // segmentoF conectado no pino 12
int displayG = 13; // segmentoG conectado no pino 13

void setup()
{
pinMode(incPin, INPUT); // Pino de acelerar setado como entrada
pinMode(decPin, INPUT); // Pino de desascelerar setado como entrada
pinMode(motorPin, OUTPUT); // Motor setado como sáida
analogWrite(motorPin, 0); // Valor zerado no motor

Serial.begin(9600); // Valor do serial para transferencia de dados

pinMode(6, OUTPUT); // Pino 6 será tipo saída de dados
pinMode(7, OUTPUT); // Pino 7 será tipo saída de dados
pinMode(8, OUTPUT); // Pino 8 será tipo saída de dados
pinMode(10, OUTPUT); // Pino 10 será tipo saída de dados
pinMode(11, OUTPUT); // Pino 11 será tipo saída de dados
pinMode(12, OUTPUT); // Pino 12 será tipo saída de dados
pinMode(13, OUTPUT); // Pino 13 será tipo saída de dados
}
//Programa começa aqui
void loop(){
incButton = digitalRead(incPin);
decButton = digitalRead(decPin);
if (incButton == HIGH)
{
if(val==255)val=255;
else val++;
}
if(val>=0){
digitalWrite(displayA, LOW); //Seguencia do numero 0
digitalWrite(displayB, LOW);
digitalWrite(displayC, LOW);
digitalWrite(displayD, LOW);
digitalWrite(displayE, LOW);
digitalWrite(displayF, LOW);
digitalWrite(displayG, HIGH);
}
if(val>=3){ //se valor for menor ou igual que -1
digitalWrite(displayA, HIGH); //Seguencia do numero 1
digitalWrite(displayB, LOW);
digitalWrite(displayC, LOW);
digitalWrite(displayD, HIGH);
digitalWrite(displayE, HIGH);
digitalWrite(displayF, HIGH);
digitalWrite(displayG, HIGH);
}
if(val>=28){
digitalWrite(displayA, LOW); //Seguencia do numero 2
digitalWrite(displayB, LOW);
digitalWrite(displayC, HIGH);
digitalWrite(displayD, LOW);
digitalWrite(displayE, LOW);
digitalWrite(displayF, HIGH);
digitalWrite(displayG, LOW);
}
if(val>=56){
digitalWrite(displayA, LOW); //Seguencia do numero 3
digitalWrite(displayB, LOW);
digitalWrite(displayC, LOW);
digitalWrite(displayD, LOW);
digitalWrite(displayE, HIGH);
digitalWrite(displayF, HIGH);
digitalWrite(displayG, LOW);
}

if(val>=94){
digitalWrite(displayA, HIGH); //Seguencia do numero 4
digitalWrite(displayB, LOW);
digitalWrite(displayC, LOW);
digitalWrite(displayD, HIGH);
digitalWrite(displayE, HIGH);
digitalWrite(displayF, LOW);
digitalWrite(displayG, LOW);
}
if(val>=128){
digitalWrite(displayA, LOW); //Seguencia do numero 5
digitalWrite(displayB, HIGH);
digitalWrite(displayC, LOW);
digitalWrite(displayD, LOW);
digitalWrite(displayE, HIGH);
digitalWrite(displayF, LOW);
digitalWrite(displayG, LOW);
}
if(val>=156){
digitalWrite(displayA, HIGH); //Seguencia do numero 6
digitalWrite(displayB, HIGH);
digitalWrite(displayC, LOW);
digitalWrite(displayD, LOW);
digitalWrite(displayE, LOW);
digitalWrite(displayF, LOW);
digitalWrite(displayG, LOW);
}
if(val>=184){
digitalWrite(displayA, LOW); //Seguencia do numero 7
digitalWrite(displayB, LOW);
digitalWrite(displayC, LOW);
digitalWrite(displayD, HIGH);
digitalWrite(displayE, HIGH);
digitalWrite(displayF, HIGH);
digitalWrite(displayG, HIGH);
}
if(val>=214){
digitalWrite(displayA, LOW); //Seguencia do numero 8
digitalWrite(displayB, LOW);
digitalWrite(displayC, LOW);
digitalWrite(displayD, LOW);
digitalWrite(displayE, LOW);
digitalWrite(displayF, LOW);
digitalWrite(displayG, LOW);
}
if(val>=232){
digitalWrite(displayA, LOW); //Seguencia do numero 9
digitalWrite(displayB, LOW);
digitalWrite(displayC, LOW);
digitalWrite(displayD, HIGH);
digitalWrite(displayE, HIGH);
digitalWrite(displayF, LOW);
digitalWrite(displayG, LOW);
}
if(decButton == HIGH)
{
if(val==0)val=0;
else val=val-1;
}
Serial.println(val);
delay(120);
analogWrite(motorPin, val);
}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço