Ir ao conteúdo

Posts recomendados

Postado
  Em 19/02/2023 às 17:45, GustavoH93 disse:

Essa pecinha que marquei em vermelho esquenta ao ponto de não conseguir colocar o dedo

Expandir  

Então já era. 

  Em 19/02/2023 às 17:45, GustavoH93 disse:

faz a comunicação do arduino com o computador via USB

Expandir  

Tem razão. 

  Em 19/02/2023 às 17:45, GustavoH93 disse:

pior que pra dificultar é SMD e não sei se é só ele que queimou

Expandir  

Tem sorte do micro ser de soquete, se ele estiver bom você pode programa-lo em outro arduíno e depois usar ele sozinho em outro projeto, ou nesse mesmo. 

  Em 16/02/2023 às 00:47, GustavoH93 disse:

além de eletrônica e programação tu manja de magica também né? Fiquei bugado aqui tentando entender como a sua resposta veio antes da minha pergunta kkkkkkk

Expandir  

@.if é membro VIP, pode editar os posts antigos quando quiser. 

E o 26º post hein, sobrou justo pra mim que nem posto nesse tópico, afinal programação não é meu forte. 

Postado

O ímã de neodímio é uma cerâmica sensível a choque e a umidade. A cor prata da aparência é uma caixa de níquel. Faz a proteção mecânica e selagem contra umidade. Níquel é um excelente condutor, usado com frequência no revestimento de contatos. Ao grudar na placa onde ficou colocou tudo em curto. Na próxima montagem pense numa caixinha plástica para proteção da placa. 

  • Membro VIP
Postado

Já que virou... e nem fui eu kk

  Em 16/02/2023 às 00:47, GustavoH93 disse:

não fica no meio do caminho que as vezes pode ser 1 e as vezes pode ser 0? Ou acima de 2,5 já é 1 de qualquer jeito

Expandir  

O mc usa ter entrada smicth trigger (clique). Ela toma a decisão 0 e 1. Com relação aos níveis consulte o d.s.

 

  Em 16/02/2023 às 00:47, GustavoH93 disse:

Módulo Bluetooth HC-05 é essa plaquinha mais os arduino fazendo todas as funções e pronto?

Expandir  

Sim amigo. Seu sistema consiste em partes eletromecânicas que são lentas. Basta 1 mc pra gerenciar tudo. Cair-se-ia-lhe bem algum conhecimento das entranhas do mc pra otimizar/aproveitar seus recursos. Mas nem precisa conhecer o assembly dele.

 

  Em 19/02/2023 às 17:45, GustavoH93 disse:

chegando lá tudo conectado e ligado senti o cheiro de queimado, nem percebi mas a porcaria do imã que eu usei pra testar na bancada foi junto com as coisas e ficou grudado em baixo do arduino

Expandir  

Uma lágrima rolou... de tanto rir 😅

Postado
  Em 19/02/2023 às 23:52, Sérgio Lembo disse:

Ao grudar na placa onde ficou colocou tudo em curto. Na próxima montagem pense numa caixinha plástica para proteção da placa. 

Expandir  

sim sim Sérgio, eu só coloquei o arduino ali para fazer o teste e posicionar o imã certinho no imã que está preso a polia, o arduino estava ali só para indicar quando o hall estava "sentindo o imã" pior que pensei depois que poderia ter usado umas pilhas e led no hall, seria mais prático e não teria perdido o arduino 😕

 

  Em 19/02/2023 às 21:33, Renato.88 disse:

Tem sorte do micro ser de soquete, se ele estiver bom você pode programa-lo em outro arduíno e depois usar ele sozinho em outro projeto, ou nesse mesmo. 

Expandir  

pois é, estou vendo se consigo colocar ele em uma protoboard e tentar mandar alguma programação nele para acender leds e ver se as saídas estão funcionando... Quando um microcontrolador desse entra em curto pode ter queimado só algumas saídas ou se queimar uma saída ele para de funcionar por completo?

 

  Em 20/02/2023 às 05:57, .if disse:

Sim amigo. Seu sistema consiste em partes eletromecânicas que são lentas. Basta 1 mc pra gerenciar tudo. Cair-se-ia-lhe bem algum conhecimento das entranhas do mc pra otimizar/aproveitar seus recursos. Mas nem precisa conhecer o assembly dele.

Expandir  

Utilizando o arduino que ainda me restou comprei um adaptador OTG  (não ria ele só tinha pra vender na cor rosa 😐) estudando bastante e consegui entender mais ou menos como funciona o RealDash.

Ele tem umas coisas no GitHub, consegui um arquivo XML esse arquivo fica no celular ou tablet e  faz a  "tradução" dos dados que o arduino envia para que o Realdash possa exibir, lá também tinha uma programação de teste para o arduino, ele gera o sinal de RPM e pressão de turbo aleatoriamente só pra simular um motor, consegui criar uma barra gráfica que muda com a posição do potenciômetro, e também fazer um sinalzinho verde ficar vermelho quando ligo o pino 3 ao GND, gravei um vídeo para vocês darem uma olhada:

 

 

É bem interessante porque a barra gráfica pode ser de ponteiro, numero digital... A luz verde pode ficar invisível e quando o pino mudar de estado exibir uma imagem pequena tipo uma seta ou luz de freio, etc...

É bem personalizável e fiquei surpreso com o fato de eu ter conseguido fazer isso funcionar, mas a programação é sinistra, o Realdash se comunica através de um  protocolo que não entendi quase nada, vou precisar da ajusa de vocês para me dar uma luz, mas isso fica para outro tópico 😅

 

Por hora montei a válvula no carro e amanhã vou usar um código simples para abrir e fechar ela usando um botão, isso vai mostrar se está tudo ok na parte mecânica e aí passaremos para a contagem dos giros do motor e a abertura e fechamento automático da válvula.

 

  Em 19/02/2023 às 21:33, Renato.88 disse:

@.if é membro VIP, pode editar os posts antigos quando quiser. 

E o 26º post hein, sobrou justo pra mim que nem posto nesse tópico, afinal programação não é meu forte. 

Expandir  

ahhhn agora entendi kkkkkk

  • Membro VIP
Postado

Senti vontade obter carona no seu tópico pois tem uma ligeira relação com ele. Estou a bolar um sistema de seguir o sol pra placa solares. Eis sua essência...

-um pic12f683 (que tenho as pencas... smd... mas tenho adaptador pra pth... também as pencas... em breve num anúncio do m.l. ou shopee perto de você 😁)

-2 foto transistores separados por uma parede algo como. Me fale se tiver ideia melhor🙃

images?q=tbn:ANd9GcQa2_sEblaQFeKHdUARlgD

-um programa minimalista

#include <pic.h>
__CONFIG(FOSC_INTOSCIO&BOREN_ON&CP_OFF&MCLRE_OFF&WDTE_OFF&BOREN_ON);//UNPROTECT&BOREN&MCLRDIS&PWRTEN&WDTDIS&INTIO);
#define PTX GP5
#define BT GP3
#define DIREITA GP4
#define ESQUERDA GP2
void delay(unsigned char dl)
{
while(dl--) asm("NOP"); //9600bps @ 4Mhz
asm("NOP"); //microajuste pra 9600bps
}
void tx(unsigned char dado)
{
unsigned char i=8;
PTX=0; //start bit
delay(10);
while (i)
	{
	PTX=dado;
	delay(10);
	dado>>=1;
	i--;
	}
PTX=1;//stop bit
delay(10);
}
//*************************************************
void serial_texto(const char * s)
{
while(*s) tx(*s++);
}

unsigned int adc_read(unsigned char channel)
{
ADCON0 = (channel << 2) | 0x81;  // enable ADC, fosc/32
delay(0xff);
GO_nDONE=1;
while(GO_nDONE); // wait for conversion complete
return ADRESH*256 + ADRESL;
}


void serial_decimal(unsigned int dado)
{
unsigned char un=dado%10;
dado/=10;
unsigned char dez=dado%10;
dado/=10;
unsigned char cent=dado%10;
dado/=10;
unsigned char mil=dado%10;

tx(mil+0x30);
tx(cent+0x30);
tx(dez+0x30);
tx(un+0x30);
}

static bit m1x;
void main(void)
{
unsigned int aE,aD;
TRISIO=0b00001011; //AN1,AN0
CMCON0=0xff; //desliga comparador
ANSEL=0b01100011;
serial_texto("Teste abcdef ");
serial_decimal(1234);
tx(13);//pula linha
tx(13);//pula linha


for (;;)
{
aD=adc_read(0);
aE=adc_read(1);
if (aD==aE) 
	{
	DIREITA=ESQUERDA=0;
	if (!m1x) //sรณ tx se mudou
		{
		serial_texto("Motor PARADO   AN0=");serial_decimal(aD);
		serial_texto(" AN1=");serial_decimal(aE);
		tx(13);//pula linha
		tx(13);//pula linha
		}
	m1x=1;
	}
else
	{
	if (m1x)
		{
		if (aD<aE) {DIREITA=1;ESQUERDA=0;serial_texto("Motor ESQUERDA ");}
		if (aD>aE) {DIREITA=0;ESQUERDA=1;serial_texto("Motor DIREITA  ");}
		serial_texto("AN0=");serial_decimal(aD);
		serial_texto(" AN1=");serial_decimal(aE);

		tx(13);//pula linha
		tx(13);//pula linha

		}
	m1x=0;
	}

}
}

-o esquema que tive sucesso na simulação

Clipboard02.thumb.png.b8a025954a72b83d2b3b3c9b2bdccab7.png

-com a ideia de Serjão pros limites fim de curso

-o passo seguinte...transmito o dado do ad até o celular via o mencionado módulo blue tooth só pra verificar e calibrar os valores analógicos.

-o .hex se quiser simular girasol.zip

 

🤪

Edit...o texto fonte ficou grande.. não vejo mais o botão de ocultar.. estaria oculto?

Postado

@.if O programa de avaliação de posição apresenta um possível problema: desejar uma precisão de 1LSB talvez, dependendo do range de trabalho, possa resultar num sistema instável. Os valores de igualdade irão variar muito dependendo da insolação do momento. Assim sendo anote como possível necessidade de melhoria uma tolerância percentual e não de valor fixo para a parada do motor. Experimentalmente adotei 4% para cada lado. O valor final será definido no campo. Simulador é que nem papel, aceita tudo, inclusive 2+2=5.

aD=adc_read(0);
aE=adc_read(1);
DIREITA=ESQUERDA=0

if (m1x)
		{
		if (aD<aE*25/24) {DIREITA=1;ESQUERDA=0;serial_texto("Motor ESQUERDA ");}
		if (aD>aE*25/24) {DIREITA=0;ESQUERDA=1;serial_texto("Motor DIREITA  ");}
		serial_texto("AN0=");serial_decimal(aD);
		serial_texto(" AN1=");serial_decimal(aE);
        }


        {
	
if (DIREITA+ESQUERDA==0) {
        if (!m1x) //sรณ tx se mudou
		{
		serial_texto("Motor PARADO   AN0=");serial_decimal(aD);
		serial_texto(" AN1=");serial_decimal(aE);
		tx(13);//pula linha
		tx(13);//pula linha
		}
	m1x=1;
	}
}
	

 

 

E já que a intenção é um melhor aproveitamento da placa solar, fico me perguntando se a instalação de espelhos inclinados nas laterais das placas não aumentaria a energia produzida por dia. O lado ruim dessa ideia são os ventos.

 

Dada a tolerância inverti a sequência. Caso nenhum dos gatilhos de movimento seja acionado ELSE motor parado. Não entendi a variável m1x, talvez com a inversão proposta tais comandos necessitem de correção.

 

Talvez haja umas chaves a mais ou a menos, fiz a inversão no CrtlC CrtlV.

Abraços.

  • Curtir 1
  • Membro VIP
Postado
  Em 25/02/2023 às 02:58, Sérgio Lembo disse:

necessidade de melhoria uma tolerância percentual e não de valor fixo para a parada do motor.

Expandir  

Sim amigo... já estava ciente desta condição. Aquilo é só pra facilitar a simulação e visualização do sistema. De fato é necessária uma condição de histerese tipo  schmitt trigger. Mas foi bom você observar sim.

 

  Em 25/02/2023 às 02:58, Sérgio Lembo disse:
if (aD<aE*25/24)
Expandir  

Claro isso daí é só conceito teórico obviamente inviável prum mc 8 bits. No caso prático seria algo como

if ((aD>aE-histerese) && (aD<aE+histerese) motor=parado. Como os fotos tr geram ligeira diferença de tensão, só mesmo com a futura medição do valor pro ajuste da histerese. De fato...

  Em 25/02/2023 às 02:58, Sérgio Lembo disse:

O valor final será definido no campo.

Expandir  

 

  Em 25/02/2023 às 02:58, Sérgio Lembo disse:

a variável m1x

Expandir  

Esqueci de mencionar - ou achei desnecessário - é que a simulação trava (no meu pc) caso fique transmitindo o tempo todo. Neste caso a m1x mostra 1 vez apenas a cada alteração da posição do sol ou variação de 1 valor analógico com relação ao outro.

 

  Em 25/02/2023 às 02:58, Sérgio Lembo disse:

espelhos inclinados nas laterais das placas não aumentaria a energia produzida por dia

Expandir  

Sim. E bom pra dias nublados. Em dias ensolarados pode esquentar mais as placas o que fatalmente reduz sua vida útil que se estima em 20 anos (uma das minhas já + de 10). Há ainda a questão do granizo que raramente cai mas... já ouviu falar em murphy? Mas a ideia do espelho continua sendo boa pra aquecimento de água o qual aliás está nos meus planos de melhoria (já possuo aquecedor tipo diy)

 

Apesar do sistema eletrônico e mecânico estar semi montado, agora há pouco me apareceu uma outra iluminação puramente mecânica.

A viagem: usar a gravidade pra apontar as placas pro sol

... Um peso que levanto a cada manhã e reposicionado as placas

... Usar um reloginho de ponteiro.

... Um disco com furos em cada hora

... Um sistema com molas que expulsa com pouquíssima força um pino do furo a cada hora...

não consigo mais falar sobre pois a ideia tá verde mas tá borbulhando em minha mente doentia ... Além do + vou patentear primeiro  😜

A propósito googlei o termo 'transistor mecânico' que ninguém havia googlado... se aparecer na busca... foi eu quem buscou 1o 😜

 

Edit...meu texto fonte ficou grande.. há tempos não vejo mais o botão de ocultar.. estaria oculto?🤔

 

[spoiler]

teste...

[/spoiler]

... é ... não funciona... G.T. deve ter tido motivo pra tirar... 😔

 

modo super power on..😁

 

  Em 25/02/2023 às 17:05, Sérgio Lembo disse:

espelho, fica a dúvida se este é refletivo ao infravermelho

Expandir  

 

Pode sim haver algo mais reflexivo ao i.r. mas o espelho é que temos à mão pra algo diy. Um teste simples é apontar sua reflexão pra um termômetro exposto ao sol. A temp deve subir.

  Em 25/02/2023 às 17:05, Sérgio Lembo disse:

teste de campo.

Expandir  

 

Em tempo... um concentrador solar também faz parte do meu sonho de consumo: tem consumido meus neurônios até durante o sono

 

 

  Em 26/02/2023 às 23:50, GustavoH93 disse:

qual programa usa para simular?

Expandir  

proteus

Postado
  Em 25/02/2023 às 11:44, .if disse:
  Em 25/02/2023 às 02:58, Sérgio Lembo disse:

espelhos inclinados nas laterais das placas não aumentaria a energia produzida por dia

Expandir  

Sim. E bom pra dias nublados. Em dias ensolarados pode esquentar mais as placas o que fatalmente reduz sua vida útil que se estima em 20 anos (uma das minhas já + de 10). Há ainda a questão do granizo que raramente cai mas... já ouviu falar em murphy? Mas a ideia do espelho continua sendo boa pra aquecimento de água o qual aliás está nos meus planos de melhoria (já possuo aquecedor tipo diy)

Expandir  

Sobre o vidro, integrante do espelho. Pelo que sei ele não é transparente ao infravermelho (calor). Por ser espelho, fica a dúvida se este é refletivo ao infravermelho, algo a ser pesquisado na literatura ou teste de campo.

Postado
  Em 24/02/2023 às 23:48, .if disse:

Senti vontade obter carona no seu tópico pois tem uma ligeira relação com ele. Estou a bolar um sistema de seguir o sol pra placa solares. Eis sua essência...

-um pic12f683 (que tenho as pencas... smd... mas tenho adaptador pra pth... também as pencas... em breve num anúncio do m.l. ou shopee perto de você 😁)

Expandir  

bem parecido mesmo

  Em 24/02/2023 às 23:48, .if disse:

-o esquema que tive sucesso na simulação

Expandir  

qual programa usa para simular?

  Em 25/02/2023 às 11:44, .if disse:

A viagem: usar a gravidade pra apontar as placas pro sol

... Um peso que levanto a cada manhã e reposicionado as placas

... Usar um reloginho de ponteiro.

... Um disco com furos em cada hora

... Um sistema com molas que expulsa com pouquíssima força um pino do furo a cada hora...

Expandir  

dentro da parte de energia renovável: tem um rio aqui perto de casa eu fiz uma roda d'água de 1,2m de diâmetro e iria colocar ali pra gerar energia, mas tem que concretar a parte que ela vai ficar, ver o gerador puxar fios, tá parado por enquanto mas um dia ainda vou fazer aquilo,  preciso ver principalmente como posicionar ela de uma forma que a água caia bem mesmo na época seca e que também não leve a roda embora quando o rio encher, no pensamento parece facinho mas chegando lá parece que surgem um monte de probleminhas 🤔

 

 

Pessoal montei a válvula no carro soldei os fios do motor e dos fins de curso e está funcionando normalmente a válvula, agora consegui os capacitores e um cristal 16M vou tentar usar um arduino para tentar programar o na protoboard o 328P do arduino que faleceu para ver se ainda funciona (tomara que funcione) e aí darei segmento a programação para abrir e fechar a borboleta.

  • Curtir 1
  • 3 semanas depois...
Postado

Bom pessoal continuando o tópico depois de muito tempo devido a uns problemas no carro (tipo a polia do comando de válvula soltando e quase quebrando o motor inteiro com menos de 3h de funcionamento) consegui com uma ajudinha do chatgpt que descobri a pouco tempo, criar um programa com o arduino que mede a RPM por periodo que foi o que o @Sérgio Lembo sugeriu, o código ficou assim:

 

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

 

#define HALL_PIN 2

#define LCD_COLUMNS 16

#define LCD_ROWS 2

#define LCD_ADDRESS 0x27

 

volatile unsigned long rotationCount = 0;

volatile unsigned long lastTime = 0;

volatile bool newRotation = false;

 

int rpm = 0;

 

unsigned long led1OnTime = 0;

unsigned long led2OnTime = 0;

 

LiquidCrystal_I2C lcd(LCD_ADDRESS, LCD_COLUMNS, LCD_ROWS);

 

void setup() {

  pinMode(HALL_PIN, INPUT_PULLUP);

 

  cli();  // desabilita interrupções

 

  // Configuração do Timer1 para gerar interrupções a cada 10ms

  TCCR1A = 0; // Configura Timer1 em modo normal

  TCCR1B = (1 << WGM12) | (1 << CS11); // Configura Timer1 em modo CTC com prescaler 8

  OCR1A = 1562; // Valor necessário para gerar interrupção a cada 10ms

  TIMSK1 = (1 << OCIE1A); // Habilita interrupção do Timer1

 

  sei(); // habilita interrupções

 

  lcd.init();

  lcd.backlight();

  lcd.setCursor(0, 0);

  lcd.print("Inicializando...");

  delay(500);

  lcd.clear();

  delay(100);

  lcd.setCursor(0, 0);

  lcd.print("Pronto!");

  lastTime = millis();

}

 

void loop() {

  if (rotationCount > 0 || newRotation) {

    if (rotationCount == 0 && newRotation) {

      lastTime = millis() + 400;

    }

    unsigned long currentTime = millis();

    unsigned long period = currentTime - lastTime;

    if (period < 1000) {

      rpm = 60000 / period;

    } else {

      rpm = 0;

    }

    rotationCount = 0;

    newRotation = false;

 

    lcd.clear();

    lcd.setCursor(0, 0);

    lcd.print("RPM: ");

    lcd.print(rpm);

  }

}

 

ISR(TIMER1_COMPA_vect) {

  if (!digitalRead(HALL_PIN)) {

    rotationCount++;

    newRotation = true;

  }

}

 

 

Aparentemente funciona bem, mas quando tento colocar o funcionamento da válvula ele apresenta problemas tudo quer usar delay e o delay atrapalha o display e estou me enrolando bastante pra fazer o millis() funcionar mas acho que vai sair. Estou esmigalhando o chatgpt com milhares de perguntas sobre arduino e tentando entender os códigos, mas já vi erros por ali e olha que não entendo quase nada de programação. (ele me mandava alterar uma linha no código mas essa linha não existia, ele criou um código garantiu que funcionava e quando fiz o upload travava tudo...)

 

Toda vez que tento revisar esse código e ver se dá pra diminuir alguma coisa não encontro nada, mas o gpt diz que pode eliminar algumas coisas e quando faz isso trava tudo... Para calcular a RPM vocês tem alguma sugestão de melhoria ou do jeito que tá acham que já é o mais simples mesmo?

Postado
  Em 09/02/2023 às 16:57, Sérgio Lembo disse:

 

TCCR1A = 0;   // Seta modo de operação do Timer1
TCCR1B = 5;   // Seta Capture para borda de descida e preescaler para divisão por 1024
TCCR1C = 0;   // Seta modo de operação do Timer1
TIMSK1 = 0;
TIFR1 = 0;     // Inicializa flag do capture
while !TIFR1{  // Aguarda passagem da marca para iniciar contagem de tempo
};
TCNT1L = 0;    // zera contador
TCNT1H = 0;
TIFR1 = 0;     // Inicializa flag do capture
while !TIFR1{  // Aguarda passagem da marca para fazer contagem de tempo
};
sua_variavel = TCNT1; // Armazena tempo na sua_variavel
Expandir  

Note que a configuração do Timer1 e a captura do período estão juntas, durante o tempo em que o Timer1 fica capturando o tempo o programa fica preso no loop. Habitualmente se costuma fazer a configuração do timer na inicialização do programa mas o Arduíno é pobre de timers, as bibliotecas de tempo também fazem uso dele. Assim sendo a configuração e a tomada de tempo tem que estar contínuas sem que o programa possa fazer outras funções onde existam delay, milis ou um display que não seja I2C pois todos estes fazem uso do Timer1 para funcionar e você perderia a configuração e uma leitura válida. Feita a tomada de tempo agora você pode fazer outras coisas que venham a utilizar o Timer1.

image.png.9d0b0b7b5436a67c166b2c044126e13c.png

 

Numa leitura rápida do seu código vi pausas (delay) de meio segundo. Não é tempo demais para deixar o motor sem controle? Volto a insistir: tem uns ARM da STMicroeletronics pelo mesmo custo do Arduíno e com muito mais timers. O STM32F030F4P6 é baratíssimo e outros modelos com mais recursos custam pouca coisa a mais. Além dos timers colocados pela ST também tem mais um timer dentro da CPU para essas temporizações. Sobre você ser iniciante a boa notícia: dá para programar usando a IDE do Arduíno, não vai ter que aprender nada de diferente.

  • Curtir 1
Postado
  Em 16/03/2023 às 14:21, Sérgio Lembo disse:

Note que a configuração do Timer1 e a captura do período estão juntas, durante o tempo em que o Timer1 fica capturando o tempo o programa fica preso no loop. Habitualmente se costuma fazer a configuração do timer na inicialização do programa mas o Arduíno é pobre de timers, as bibliotecas de tempo também fazem uso dele. Assim sendo a configuração e a tomada de tempo tem que estar contínuas sem que o programa possa fazer outras funções onde existam delay, milis ou um display que não seja I2C pois todos estes fazem uso do Timer1 para funcionar e você perderia a configuração e uma leitura válida. Feita a tomada de tempo agora você pode fazer outras coisas que venham a utilizar o Timer1.

Expandir  

 

  Em 16/03/2023 às 14:21, Sérgio Lembo disse:

Numa leitura rápida do seu código vi pausas (delay) de meio segundo. Não é tempo demais para deixar o motor sem controle? Volto a insistir: tem uns ARM da STMicroeletronics pelo mesmo custo do Arduíno e com muito mais timers. O STM32F030F4P6 é baratíssimo e outros modelos com mais recursos custam pouca coisa a mais. Além dos timers colocados pela ST também tem mais um timer dentro da CPU para essas temporizações. Sobre você ser iniciante a boa notícia: dá para programar usando a IDE do Arduíno, não vai ter que aprender nada de diferente.

Expandir  

 

Com relação ao código os delays estavam apenas no começo para iniciar o display, no restante utilizei millis para não atrapalhar a exibição. Montei no carro apenas verificar se estava funcionando e funcionou exibiu a RPM, mas não sei se colocar alguma função por exemplo acender um led quando chegar a X RPM iria funcionar bem...

 

Então @Sérgio Lembo realmente não tinha pensado nessas possibilidades, mas aproveitando futuramente eu queria exibir a informação do ponto de ignição do motor, é basicamente "sentir" quando é gerada a centelha no cabo de vela, começar a contagem de tempo e quando o pistão estiver no ponto máximo superior parar a contagem,  para identificar quando o pistão está no ponto superior existe o imã na polia do comando de válvulas que é lido pelo sensor hall, e é desse sensor também que é gerada a base para a calculo do período da RPM.

 

Teoricamente  pra "sentir" o pulso no cabo de vela usaria algum circuito com fio enrolado no cabo para gerar o pulso para o arduino disparar a contagem, esse pulso seria teria que ser interrupt ou perderíamos a contagem, e o término da contagem quando o imã for detectado pelo hall também seria interrupt, depois de calculado o tempo entre a centelha e o pistão chegar no topo bastaria executar alguma conta ou basear por um array qual seria o ponto de ignição no momento. Como tenho a pistola de ponto poderíamos verificar na prática qual seria o ponto atual para calibrar a programação.

 

No entanto por ser uma programação complexa, pensei em deixar um arduino para contar a RPM,  e fazer o cálculo do ponto de ignição enviando essas informações para um Arduino mega, que controlará o display e receberá informação dos outros sensores do carro também.

Nesse caso é interessante fazer dessa forma ou o  STM32F030F4P6 se mostra mais eficiente para essa tarefa?

 

Como exemplo calculando com ajuda da internet um motor com ponto de ignição em 10° a 1000 rpm entre a centelha do cabo de vela e o pistão chegar ao topo leva aproximadamente 1,67ms é extremamente rápido e nem tenho certeza se o arduino consegue medir isso na verdade...

 

Postado
  Em 18/03/2023 às 00:37, GustavoH93 disse:

Como exemplo calculando com ajuda da internet um motor com ponto de ignição em 10° a 1000 rpm entre a centelha do cabo de vela e o pistão chegar ao topo leva aproximadamente 1,67ms é extremamente rápido e nem tenho certeza se o arduino consegue medir isso na verdade...

Expandir  

Um microcontrolador rodando a 16MHz faz umas 15 milhões de instruções por segundo. Apesar da CPU, AVR, ARM e outras modernas executarem 1 instrução por ciclo temos que considerar que as instruções condicionais gastam 2 ciclos quando positivas. Assim sendo em 1,67ms dá para rodar umas 25 mil instruções.  ou se o motor estiver a 3000RPM umas 8 mil instruções para 10º de ignição.

 

Entenda uma coisa: seu motor é lento quando comparado a capacidade de um microcontrolador mas tem a questão dos cálculos e é aí que o bicho pega. Numa CPU de 8 bits a manipulação de qualquer número que exceda a 255 é trabalhosa. Na programação em C ocupa apenas uma linha mas quando o compilador gera o assembler o buraco é mais embaixo. No último programa que fiz no Arduíno coloquei um cálculo com float. Por achar que estava lento demais adicionei 2 comandos no programa: o primeiro colocava em 1 uma porta que estava sobrando na hora de iniciar as contas. O segundo levava a zero quando terminava as contas. O programa ficava travado no loop no momento da aquisição de dados de tempo. Olhando no osciloscópio descobri que os cálculos com float (uso de decimal) ocupavam 80% do ciclo do programa. Arduíno usa CPU AVR, tem apenas 8 bits, só faz operação rápida para número <=255. O ARM tem 32 bits, só faz operação lenta para número > 4 bilhões. É o processador ideal pára quem tem que realizar cálculos. Por exemplo: se sua necessidade é de 2 casas decimais multiplique o valor inicial por 100 e passe a trabalhar com uma unidade valendo 1 centésimo, ou seja, se seu range de valores vai de zero a 220,00 ele passa a ser de zero a 22.000 ou se quiser de zero a 220.000. Pode parecer loucura mas os 32 bits vão até 4 bilhões numa só operação, num só clock.  É muito mais simples do quer trabalhar com float para o processador. 

  • Membro VIP
Postado
  Em 22/03/2023 às 23:42, Sérgio Lembo disse:

multiplique o valor inicial por 100

Expandir  

Já usei algo do gênero pra mc de 8 bits. Pra dividir p.ex. 10/3 em byte e colocar no display ia dar 3. Mas eu queria pelo menos 3.3 aparecendo. Multipliquei por 10 e dividi por 3 e deu 33. Pra mostrar no display:

display(33/10);display(".");display(33%10); (obviamente usei variáveis)

Mas (sempre tem um mas) a base decimal é boa pra nós que temos 10 dedos a mão. Pro mc que só tem 2,  é melhor base 2. Pra multiplicar/dividir basta deslocar pra esquerda/direita o que é bem rápido. Uso esta técnica pra tirar a média de medições do ad.

int ad=0;
for(i=0;i<8;i++) ad+=adcread();
ad/=8; //ou ad>>=3;

 

Outra técnica pra agilizar a coisa é deixar tabelas de resultados pre pronta.

char const tabela_seno[16]={0,25,...253};
seno=tabela_seno[i];

é muuuito mais rápido do que

float seno;
seno=sin(i); //praticamente impossível prum mc de 8 bits com 1K de flash

 

  Em 22/03/2023 às 23:42, Sérgio Lembo disse:

tem a questão dos cálculos e é aí que o bicho pega

Expandir  

 

Postado
  Em 22/03/2023 às 23:42, Sérgio Lembo disse:

Numa CPU de 8 bits a manipulação de qualquer número que exceda a 255 é trabalhosa. Na programação em C ocupa apenas uma linha mas quando o compilador gera o assembler o buraco é mais embaixo. No último programa que fiz no Arduíno coloquei um cálculo com float. Por achar que estava lento demais adicionei 2 comandos no programa: o primeiro colocava em 1 uma porta que estava sobrando na hora de iniciar as contas. O segundo levava a zero quando terminava as contas. O programa ficava travado no loop no momento da aquisição de dados de tempo. Olhando no osciloscópio descobri que os cálculos com float (uso de decimal) ocupavam 80% do ciclo do programa. Arduíno usa CPU AVR, tem apenas 8 bits, só faz operação rápida para número <=255. O ARM tem 32 bits, só faz operação lenta para número > 4 bilhões. É o processador ideal pára quem tem que realizar cálculos.

Expandir  

de 255 para 4 bilhões é uma baita diferença, realmente me convenceu @Sérgio Lembo vou atrás de um Stm32f030f4p6, como o Stm é mais potente e tem mais timers dá pra fazer mais coisas ainda utilizando mais interrupções.

 

o stm é esse aqui né?

 

https://pt.aliexpress.com/item/32901957369.html?spm=a2g0o.productlist.main.1.6ffa55a30O6GhF&algo_pvid=504f8372-e271-4ad7-a6a7-9037505d6a8b&algo_exp_id=504f8372-e271-4ad7-a6a7-9037505d6a8b-0&pdp_ext_f={"sku_id"%3A"65831282366"}&pdp_npi=3%40dis!BRL!7.4!6.96!!!!!%40211beca116797962732742720d0703!65831282366!sea!BR!881910984&curPageLogUid=5VVtGh3CNpeW

 

Realmente está com preço bem convidativo.  Pensei em deixar o trabalho de contar os pulsos e fazer os cálculos com o STM e conectar ele com o arduino, dessa forma o arduino vai receber as informações do STM, ler as portas analógicas e enviar para o app Realdash, o que acha?

 

  Em 23/03/2023 às 12:02, .if disse:

Já usei algo do gênero pra mc de 8 bits. Pra dividir p.ex. 10/3 em byte e colocar no display ia dar 3. Mas eu queria pelo menos 3.3 aparecendo. Multipliquei por 10 e dividi por 3 e deu 33. Pra mostrar no display:

display(33/10);display(".");display(33%10); (obviamente usei variáveis)

Mas (sempre tem um mas) a base decimal é boa pra nós que temos 10 dedos a mão. Pro mc que só tem 2,  é melhor base 2. Pra multiplicar/dividir basta desloc

Expandir  

Boa ideia, neste caso o display divide 33/10 que dá 3,3 aí você deixa como int para exibir apenas 3, depois manda escrever um ponto no display e escreve (33%10) esse comando exibe o resto da divisão que são os números depois da virgula, ficando então 3,3 teoricamente o MC faz duas operações aqui, mas mesmo sendo duas operações é mais rápido e menos trabalhoso do que trabalhar com float, é isso mesmo @.if ?

 

  Em 23/03/2023 às 12:02, .if disse:

Outra técnica pra agilizar a coisa é deixar tabelas de resultados pre pronta.

char const tabela_seno[16]={0,25,...253};
seno=tabela_seno[i];
Expandir  

Isso seria um array?

  • Membro VIP
Postado
  Em 26/03/2023 às 02:13, GustavoH93 disse:

Isso seria um array?

Expandir  

https://pt.stackoverflow.com/questions/232895/qual-a-diferença-entre-array-e-matriz

Eu chamo de matriz mesmo. Mas, como o meu, o nome não é importante. O importante é você saber manipular... (ficou sinistro isso 🤔)

Aliás vetores e ponteiros, matriz, array e etc... são as mais perturbadoras entidades do c. Algumas até parece que têm vida própria. até hoje elas me dominam  😬..

 

  Em 26/03/2023 às 02:13, GustavoH93 disse:

aí você deixa como int

Expandir  

Literalmente ... menos né... deixo como char 🙃

Postado
  Em 21/02/2023 às 01:50, GustavoH93 disse:

pois é, estou vendo se consigo colocar ele em uma protoboard e tentar mandar alguma programação nele para acender leds e ver se as saídas estão funcionando... Quando um microcontrolador desse entra em curto pode ter queimado só algumas saídas ou se queimar uma saída ele para de funcionar por completo?

Expandir  

Pelo visto e pelo meu conhecimento, parece que queimou o MC responsável pela interface usb/MC principal

Daria p/ fazer algumas coisas c/ esse arduino:
1-Usar o MC principal p/ construir uma Arduino StandAlone
2-Comprar uma placa externa de programação e ligar nos pontos corretos da sua placa, de maneira a conexão c/ esse MC estragado

Postado
  Em 27/03/2023 às 00:27, Thiago Miotto disse:

Daria p/ fazer algumas coisas c/ esse arduino:
1-Usar o MC principal p/ construir uma Arduino StandAlone
2-Comprar uma placa externa de programação e ligar nos pontos corretos da sua placa, de maneira a conexão c/ esse MC estragado

Expandir  

Tentei, mas infelizmente o MC principal queimou também, o 328P foi pro beleléu infelizmente, curiosamente tenho um arduino nano e do nada ele resolveu parar de conectar via usb, agora não sei como fazer pra programar alguma coisa nele...

 

  Em 26/03/2023 às 09:55, .if disse:

Eu chamo de matriz mesmo. Mas, como o meu, o nome não é importante. O importante é você saber manipular... (ficou sinistro isso 🤔)

Aliás vetores e ponteiros, matriz, array e etc... são as mais perturbadoras entidades do c. Algumas até parece que têm vida própria. até hoje elas me dominam  😬..

Expandir  

Tu que entende das manipulações manipuladas que nos manipulam ao invés de manipularmos, nos dê seu palpite sobre uma coisinha aqui:

 

Vou ter que colocar um sensor para medir a pressão do turbo, o sensor já trabalha de 0 a 5v o que facilita minha vida, mas de 0 a 1v é pressão negativa e acima de 1.1 é pressão positiva, o fabricante disponibiliza essa tabela aqui para facilitar:

 

image.thumb.png.590ee01e222741149c2c243d04201945.png

 

Neste caso seria  interessante fazer uma matriz com todos estes valores ou usar alguma coisa tipo função MAP uma para leitura abaixo de 1v e outra MAP para utilizar acima de 1v? O que vocês fariam?

  • Membro VIP
Postado

Quase percebo uma reta quase linear da pressão em função da V. confirme. Pra negativo, um algoritmo estilo algo como:
 

#define correspondende_a_1V 202
#define conversor_de_unidade 47
signed int pressao=resultado_ad();
if (pressao<correspondende_a_1V) pressao*=-1;
pressao*=conversor_de_unidade;
printf("%d",pressao);

 

Se não for linear, tem que fazer um ajuste no meio do caminho com tabela [pra mim] é mais fácil. Mas sim, existe matemática avançada pra você achar a fórmula da conversão direta.. nem preciso dizer que esta não me pertence né...

Postado
  Em 29/03/2023 às 12:57, .if disse:

Se não for linear, tem que fazer um ajuste no meio do caminho com tabela [pra mim] é mais fácil. Mas sim, existe matemática avançada pra você achar a fórmula da conversão direta.. nem preciso dizer que esta não me pertence né...

Expandir  

 

  Em 29/03/2023 às 18:17, Thiago Miotto disse:

Numa rápida olhada, eu vejo quase uma linearidade entre -0.1 até 4.5

Expandir  

é quaase linear mesmo pessoal estava olhando essa tabela de perto e percebi alguns erros na verdade, acho que vou usar ela mais para referência, mas quando for usar na prática vou usar um manômetro para confirmar a pressão real e medir com voltímetro, aliás notei que tem erro na tabela, na linha 18   4,3V   (tá escrito 40,3V foi erro de digitação imagino eu)  Mas enfim 4.3V corresponde a 2,7BAR   e na linha 19  4,27V corresponde a 2,9BAR  como uma tensão maior corresponde a tensão menor consegue pressão maior? Sei lá o que aconteceu aí...

 

  Em 29/03/2023 às 18:17, Thiago Miotto disse:

Faria o calculo transformando -0.1 em 0 e 4.5 em 255.

Expandir  

mas 0 e 255 é para gerar PWM neste caso para leitura não seria de 0 a 1023 @Thiago Miotto ?

  • Membro VIP
Postado

O amigo está confuso. 255 e 1023 são respectivamente 8 bits e 10bits... ndv com a questão dos periféricos. Pra entender melhor, dá uma olhadela no d.s.: com quantos bits cada 1 trabalha?

 

  Em 31/03/2023 às 00:31, GustavoH93 disse:

medir com voltímetro

Expandir  

Só faça uma mediçãozinha básica de 0 a 5V pra ver se fica na faixa e esquece multímetro: faça uma função que mostre o resultado do ad com algumas pressões principalmente a mínima e máxima. Anote os valores e com uma matemáticazinha muito básica de regra de 3 você (o mc) acha os intermediários. De novo, não use a V mas sim o valor do adc_read(); que usa ser mesmo 10bits.

Postado
  Em 31/03/2023 às 10:36, .if disse:

Só faça uma mediçãozinha básica de 0 a 5V pra ver se fica na faixa e esquece multímetro: faça uma função que mostre o resultado do ad com algumas pressões principalmente a mínima e máxima. Anote os valores e com uma matemáticazinha muito básica de regra de 3 você (o mc) acha os intermediários. De novo, não use a V mas sim o valor do adc_read(); que usa ser mesmo 10bits.

Expandir  

Entendi, vou fazer um programinha pra mostrar no display I2C na primeira linha a pressão de acordo com a tabela do fabricante e na segunda linha a leitura da porta analógica, como tenho o manômetro de ponteiro no carro dá pra comparar os valores e ver se está ok.

 

  Em 31/03/2023 às 10:36, .if disse:

O amigo está confuso. 255 e 1023 são respectivamente 8 bits e 10bits... ndv com a questão dos periféricos. Pra entender melhor, dá uma olhadela no d.s.: com quantos bits cada 1 trabalha?

Expandir  

Fui pesquisar mais a fundo e agora compreendi melhor, para a leitura analógica a resolução do arduino é de 0 a 1023 (10 bits) e para escrita é 0 a 255 (8 bits) ou seja neste caso o @Thiago Miotto indicou para colocar o valor máximo em 255 dessa forma a leitura seria feita em 8 bits não em 10 bits, deixando o código mais rápido é isso?

 

 

 

Bom pessoal vou comprar umas coisas da china para continuar a programação incluindo o sensor de pressão e o  Stm32f030f4p6 que o amigo @Sérgio Lembo  indicou e como o STM vai fazer a contagem do RPM que vai ser a base para várias tarefas incluindo abrir e fechar a válvula  vamos ter que aguardar chegar para continuar este tópico. Mas enquanto isso vou criar outro tópico para fazer funcionar os outros sensores que já possuo em mãos e que também tenho duvidas de como fazer.

  • Membro VIP
Postado
  Em 02/04/2023 às 19:32, GustavoH93 disse:

a leitura analógica a resolução do arduino é de 0 a 1023 (10 bits) e para escrita é 0 a 255 (8 bits)

Expandir  

Leitura usa um periférico: o conversor AD. Escrita usa outro: pwm. Cada um tem seu circuito separado e claro sua lógica e número de bits.

analog_read() analog_write()  ... é simples só pro programador mas envolve algumas escritas e leituras um pouco além de simples de registradores

em tempo... olha isso que da hora

https://victorvision.com.br/

a qualquer momento vou possuir um display deste.. sério...

Postado
  Em 02/04/2023 às 20:44, .if disse:

em tempo... olha isso que da hora

https://victorvision.com.br/

a qualquer momento vou possuir um display deste.. sério...

Expandir  

da hora mesmo, eu tinha ouvido falar dos displays Nextion dizem ser muito bons também, mas custa beem caro na verdade o maior perrengue é conseguir um display que consiga ter algum controlador embutido pra só receber a informação e jogar na tela, o arduino apanha bastante pra fazer um shield LCD funcionar  por isso tive que arrumar um tablet, mas ainda não é a solução ideal porque o tablet demora pra iniciar, as vezes pode dar uma travada e se o android for antigo fica bem limitado... Tô até pensando em arrumar um PC jurássico com tela LCD e botar um SSD pra funcionar, sai mais barato que um tablet novo eu acho...

 

  Em 02/04/2023 às 20:44, .if disse:

Leitura usa um periférico: o conversor AD. Escrita usa outro: pwm. Cada um tem seu circuito separado e claro sua lógica e número de bits.

Expandir  

Ahnnn sim agora entendi. Apesar de ser o mesmo micro que faz tudo ele tem circuitos separados internamente pra fazer funções especificas.

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Mostrar mais  

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

Mostrar mais  
×
×
  • Criar novo...