Ir ao conteúdo
  • Cadastre-se

Arduino Código para leitura de sensores com Arduino.


Posts recomendados

  • Membro VIP
6 horas atrás, GustavoH93 disse:

esse sensor que é mais complicado...

Sinistro você achar zero informação sobre ele. Algo me diz que quer que procurem pra você. Me inclua fora desta. De minha parte:

Led não parece estar em (anti) paralelo um com outro.  Lhe fiz até um 'desenho' 😑. Mas antes: consiga um osc. ou use a interface de som do pc entrada mic ou similar... google osc. com ela ou quiçá até mesmo o simples gravador de som.

(afeeeeeeeee)

 

Link para o comentário
Compartilhar em outros sites

Posso estar enganado mas nos manômetros mecânicos o que se tem e um tubo de bourbon que movimenta uma haste que vai ao ponteiro. Para a saída elétrica basta substituir o ponteiro pelo eixo do potenciômetro. Provavelmente possui um regulador de tensão de 5V para ter saída máxima regulada em 4.5V. Nesse caso alimentá-lo com 5V menos o dropout do regulador vai quebrar o esquema de precisão. 

Link para o comentário
Compartilhar em outros sites

3 horas atrás, Sérgio Lembo disse:

nos manômetros mecânicos o que se tem e um tubo de bourbon que movimenta uma haste que vai ao ponteiro

exatamente @Sérgio Lembo  eu desmontei uma vez por curiosidade e vi o mecanismo, é simples e bem delicado também.

 

4 horas atrás, Sérgio Lembo disse:

Para a saída elétrica basta substituir o ponteiro pelo eixo do potenciômetro.

Adaptar um potenciômetro neste manômetro mecânico que tenho? Acho bem difícil, o ponteiro é extremamente leve o potenciômetro por mais macio que seja ainda é ''duro'' demais para o tubo conseguir movimentar...

 

Em 18/06/2023 às 20:56, .if disse:

Sinistro você achar zero informação sobre ele. Algo me diz que quer que procurem pra você. Me inclua fora desta.

Sinistro mesmo porque te garanto que procurei e não achei nada, o sensor é tão ousado que nem marca do fabricante ele tem.

 

Em 18/06/2023 às 20:56, .if disse:

Led não parece estar em (anti) paralelo um com outro.  Lhe fiz até um 'desenho' 😑. Mas antes: consiga um osc. ou use a interface de som do pc entrada mic ou similar... google osc. com ela ou quiçá até mesmo o simples gravador de som.

eles estão em anti paralelo conferi as perninhas antes de espetar na protoboard, e não dá pra usar a interface de som do PC justamente porque da ultima vez que tentei usar para este fim o conector P2 quebrou lá dentro e nunca mais consegui tirar 😑 já faz uns 2 anos tem até em um tópico antigo meu...

 

Vou providenciar outro PC para testar, mas esses dias estava tentando desenvolver o que comentei anteriormente definir uma "zona morta" que vai ter indicação de pressão zero e acima dela pressão positiva e abaixo dela pressão negativa, utilizei a ferramenta recém nascida chatGPT e consegui criar mas pra variar a leitura da pressão fica travada em zero mesmo a leitura AD variando linearmente, sabem o que pode estar acontecendo?

 

Citação

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

 

LiquidCrystal_I2C lcd(0x27, 16, 4);  // Inicializa o display LCD no endereço 0x27

 

const int presspin = A2; // Pino analógico utilizado para ler a tensão do sensor

 

void setup()

{

  Serial.begin(9600); // Inicializa a comunicação serial

  lcd.init();

  lcd.setBacklight(HIGH);

  lcd.setCursor(0, 0);

}

 

void loop()

{

  int voltage = map(analogRead(presspin), 0, 1023, 0, 500); // Leitura da tensão em volts com base em 500

  int reading = analogRead(presspin);

 

  float pressure;

  if (reading >= 187 && reading <= 204) {

    pressure = 0.0;  // Pressão igual a zero na "zona zero"

  } else if (reading >= 0 && reading <= 186) {

    pressure = map(reading, 186, 0, -0.01, -1.0);  // Mapeia a leitura analógica para a faixa de pressão negativa (-1 bar a -0.01 bar)

  } else if (reading >= 204 && reading <= 1023) {

    pressure = map(reading, 204, 1023, 0.01, 3.1);  // Mapeia a leitura analógica para a faixa de pressão positiva (0.01 bar a 3.1 bar)

  }

 

  lcd.clear();  // Limpa o display

 

  lcd.setCursor(3, 0);

  lcd.print(voltage / 100);  // Exibe a tensão inteira

  lcd.print(",");  // Exibe a vírgula

  lcd.setCursor(5, 0);

  lcd.print((voltage % 100) / 10);  // Exibe o primeiro dígito após a vírgula

  lcd.print(voltage % 10);  // Exibe o segundo dígito após a vírgula

 

  lcd.setCursor(12, 0);

  lcd.print(reading);

 

  lcd.setCursor(0, 3);  // Define a posição do cursor no display

  lcd.print("Pressao: ");  // Exibe a mensagem "Pressao: "

  lcd.print(pressure, 2);  // Exibe o valor de pressão no display com duas casas decimais

  lcd.print(" bar");  // Exibe a unidade de medida no display

 

  Serial.print("Voltage: ");

  Serial.println(voltage);

 

  delay(300);

}

 

 

 

e realmente a saida do sensor pode ser PWM, mas veu vejo a leitura AD subir e descer linearmente então mesmo que seja PWM acho que para o que preciso deve funcionar... Vou arrumar outro pc ou um OSC em breve para tirar a duvida mas se esse código funcionar já vai ser um grande progresso...

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
9 horas atrás, GustavoH93 disse:

conferi as perninhas antes de espetar na protoboard

Se estiverem assim não estão conforme te orientei caro amigo.

image.png

 

Olha um novo desenho mais completo:

 +--->|---+
 |        |
 +---|<---+
 |        |
---       |
---       |
 |        |
 o sinal  o            

 

Mas se fez da maneira correta acima, porquê mostrou aquela foto? Foi só pra me irritar?... Conseguiu 😠

😁

Link para o comentário
Compartilhar em outros sites

Em 22/06/2023 às 06:52, .if disse:

Olha um novo desenho mais completo:

 +--->|---+
 |        |
 +---|<---+
 |        |
---       |
---       |
 |        |
 o sinal  o            

 

Na verdade como fiz foi assim com o capacitor entre os leds:

 

Citação

 +--->|---+| |+---|<---+
 |                             |
 |                             |
 |                             |
           o  sinal

 

Em 22/06/2023 às 06:52, .if disse:

Mas se fez da maneira correta acima, porquê mostrou aquela foto? Foi só pra me irritar?... Conseguiu

Já pensou que mesmo com o seu desenho eu poderia não ter entendido totalmente? Se fiz errado foi por isso não para te irritar...  E por isso mostrei a foto o capacitor não estava mais ali quando tirei a foto mas ele estava posicionado na frente dos leds eu colocava um capacitor fazia o teste e colocava outro. Mas mesmo assim o arduino está lendo muito bem a tensão do sensor fiz o teste e a leitura AD sobe e desce normalmente só que não consigo fazer o código funcionar.

 

Em 21/06/2023 às 21:23, GustavoH93 disse:

 a leitura da pressão fica travada em zero mesmo a leitura AD variando linearmente, sabem o que pode estar acontecendo?

 

Citação

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

 

LiquidCrystal_I2C lcd(0x27, 16, 4);  // Inicializa o display LCD no endereço 0x27

 

const int presspin = A2; // Pino analógico utilizado para ler a tensão do sensor

 

void setup()

{

  Serial.begin(9600); // Inicializa a comunicação serial

  lcd.init();

  lcd.setBacklight(HIGH);

  lcd.setCursor(0, 0);

}

 

void loop()

{

  int voltage = map(analogRead(presspin), 0, 1023, 0, 500); // Leitura da tensão em volts com base em 500

  int reading = analogRead(presspin);

 

  float pressure;

  if (reading >= 187 && reading <= 204) {

    pressure = 0.0;  // Pressão igual a zero na "zona zero"

  } else if (reading >= 0 && reading <= 186) {

    pressure = map(reading, 186, 0, -0.01, -1.0);  // Mapeia a leitura analógica para a faixa de pressão negativa (-1 bar a -0.01 bar)

  } else if (reading >= 204 && reading <= 1023) {

    pressure = map(reading, 204, 1023, 0.01, 3.1);  // Mapeia a leitura analógica para a faixa de pressão positiva (0.01 bar a 3.1 bar)

  }

 

  lcd.clear();  // Limpa o display

 

  lcd.setCursor(3, 0);

  lcd.print(voltage / 100);  // Exibe a tensão inteira

  lcd.print(",");  // Exibe a vírgula

  lcd.setCursor(5, 0);

  lcd.print((voltage % 100) / 10);  // Exibe o primeiro dígito após a vírgula

  lcd.print(voltage % 10);  // Exibe o segundo dígito após a vírgula

 

  lcd.setCursor(12, 0);

  lcd.print(reading);

 

  lcd.setCursor(0, 3);  // Define a posição do cursor no display

  lcd.print("Pressao: ");  // Exibe a mensagem "Pressao: "

  lcd.print(pressure, 2);  // Exibe o valor de pressão no display com duas casas decimais

  lcd.print(" bar");  // Exibe a unidade de medida no display

 

  Serial.print("Voltage: ");

  Serial.println(voltage);

 

  delay(300);

}

 

Expandir  

 

 

@.if @Sérgio Lembo @Thiago Miotto imaginam o motivo da função MAP não estar funcionando aqui? Já olhei várias vezes  e não consigo entender deveria estar funcionando normalmente, tirei o sensor coloquei potenciômetro no lugar e não funciona é o código que está errado mesmo.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
14 horas atrás, GustavoH93 disse:

Já pensou que mesmo com o seu desenho eu poderia não ter entendido totalmente?

Não pensei mas nem precisou.. você não entendeu e errou.🤪.. Isso nunca iria acender o led

14 horas atrás, GustavoH93 disse:

 

Citação

 +--->|---+| |+---|<---+
 |                             |
 |                             |
 |                             |
           o  sinal

 

14 horas atrás, GustavoH93 disse:

foi por isso não para te irritar

Tá me irritando cada vez + 😁

 

14 horas atrás, GustavoH93 disse:

função MAP não estar funcionando aqui? Já olhei várias vezes  e não consigo entender deveria estar funcionando normalmente, tirei o sensor coloquei potenciômetro no lugar e não funciona é o código que está errado mesmo.

Esquece a tal map. Mostre o valor do ad em algum lugar p.ex. no terminal.

14 horas atrás, GustavoH93 disse:

a leitura da pressão fica travada em zero mesmo a leitura AD variando linearmente, sabem o que pode estar acontecendo?

Você pode estar lendo no canal errado ou não configurado direito. Mostre o esquema e fotos ... prepare a cabeça pra um cóqui!! 😡

😁

Link para o comentário
Compartilhar em outros sites

6 horas atrás, .if disse:

Esquece a tal map. Mostre o valor do ad em algum lugar p.ex. no terminal.

 

6 horas atrás, .if disse:

Mostre o esquema e fotos ...

 

 

O valor AD estou acompanhando desde o inicio, no começo é a tensão o segundo é o valor AD e em baixo é a pressão, tudo funciona normalmente mas com a pressão fica travada em 0.00 bar, não tem esquema é só a saída do sensor ligada ao pino A2, pra ter  certeza que está correto liguei um potenciometro no lugar e funciona exatamente igual vai de 0 a 1023 e a tensão muda igualmente só que a pressão no LCD não sai do zero.

a2025301-f5df-49aa-a379-bf03cc36c3ec.jpg

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Se vai de 0 a 1023 com pot, de minha parte tá tudo certo no hw... (apesar da pendência do tal pwm). A questão agora é seu sw. Vai ter que fazer uma 'reflexão' sobre a matemática dele. Algo me diz que ela é bem simples. O problema pode estar entre a cadeira e o teclado e também "B.I.O.S." 😁

Link para o comentário
Compartilhar em outros sites

Em 26/06/2023 às 20:49, Thiago Miotto disse:

Pino "queimado" talvez?

Tenta trocar o canal ou tenta colocar um 5V num potenciômetro neste canal p/ ver se muda a leitura (pino do meio na leitura analógica, um lado do potenciômetro no 5V e outra no gnd)

 

Em 27/06/2023 às 08:29, .if disse:

Se vai de 0 a 1023 com pot, de minha parte tá tudo certo no hw... (apesar da pendência do tal pwm). A questão agora é seu sw. Vai ter que fazer uma 'reflexão' sobre a matemática dele. Algo me diz que ela é bem simples.

Queimado não está, funciona normalmente com o pot a leitura AD o problema é a programação e isso sabia desde o começo por isso postei o código aqui, e eu tentei ver erro mas não consigo achar, vou tentar usar outra forma de conversão de leitura ao invés de MAP usar alguma técnica que faça a conversão usando conta diretamente, vamos torcer pra dar certo porque estou sem ideias.  e com 4 páginas isso deve estar sendo torturante para @.if

Link para o comentário
Compartilhar em outros sites

1 hora atrás, GustavoH93 disse:

4 páginas isso deve estar sendo torturante para @.if


Editado 1 hora atrás por GustavoH93

 

Que isso .... O que o @.if mais gosta são esses casos de código de Arduíno !!!

 

Ė uma diversão para ele sair dos Pic12 que ele tem guardado fazem anos e anos !

 

Normalmente ele reclama quando vira a primeira página, mas as outras ele não liga não !

 

Pena que eu não possa ajudar nessa linguagem ....

 

Paulo

 

 

  • Haha 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
16 horas atrás, aphawk disse:

Pena que eu não possa ajudar nessa linguagem ....

16 horas atrás, aphawk disse:

código de Arduíno

Acho que não é arduíno tampouco na linguagem mas sim na micromatemática da coisa. Confira...

 

Continuo achando que a complexa matemática da coisa é bem simples. Digamos que a variação é linear. Oras, se com 0 no ad a pressão é zero e com 1023 é 5bar a conversão é direta. Vou tentar exercitar o tico e teco com sua tabela

image.png

Consegue notar que (4.5-1) está para (3.0-0.0)?

(4.5-1.0)/(3.0-0.0)=1.16

Vamos achar agora os vermelhos

1.0=(2.17-1)/1.16

2.0=(3.33-1)/1.16 ..

fechou?

Algo me diz que é quase isso que a tal map faz.

Considere agora não a tensão mas sim o resultado do registro do ad. Pra mostrar no display considere as dicas das páginas anteriores bem como o uso de int no lugar de float. Dica: leia devagar😁

 

18 horas atrás, GustavoH93 disse:

com 4 páginas

Se eu (eu) virar a décima terceira numa sexta feira 13, eu faço o código pra você 🤪

 

 

4 horas atrás, aphawk disse:

Segue a função MAP feita no Bascom, quem sabe a matemática seja elucidativa :

 

Bacana Paulão. .. ainda que eu prefira o minimalismo do c

 

long map(long x, long in_min, long in_max, long out_min, long out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

O resultado é a lesma lerda. De fato testei no numa panilha excel e deu sim o resultado que o garoto almeja. Ele pode estar fazendo alguma cagadinha básica como p.ex. não está mostrando os caracteres da forma que ensinamos... o que acho que pode ter confundido a cabeça dele com o lance da otimização pra mc 8 bits. Sugiro-lhe esquecer e re-começar-fletir-pensar-fazer com a tal map gulosa mesmo.

 

 

 

Link para o comentário
Compartilhar em outros sites

@.if ,

 

Segue a função MAP feita no Bascom, quem sabe a matemática seja elucidativa :

 

Function Map(byval Value As Word , Byval Min_in As Word , Byval Max_in As Word , Byval Min_out As Word , Byval Max_out As Word)as Word
 Local I1 As Long
 Local I2 As Long
   I1 = Value - Min_in
   I2 = Max_out - Min_out
   I1 = I1 * I2
   I2 = Max_in - Min_in
   I1 = I1 / I2
   I1 = I1 + Min_out
   'Map = Abs(i1)     'casting Abs() directly into result may give wrong values
   I1 = Abs(i1)
   Map = I1
   If Map >= Max_out Then Map = Max_out - 1
End Function

 

Paulo

Link para o comentário
Compartilhar em outros sites

Em 29/06/2023 às 21:09, aphawk disse:

Pena que eu não possa ajudar nessa linguagem ....

 

Paulo

 

Que isso @aphawk  Ajuda bastante sim mesmo não conhecendo a linguagem, na verdade eu que não conheço bem a linguagem e fico me atropelando todo aqui...

O tópico está indo mais devagar também porque estou fazendo outras tarefas do trabalho  e aí acabo não tendo tanto tempo para seguir com a programação, mas tenho boas noticias:

 

Em 30/06/2023 às 09:02, .if disse:

Consegue notar que (4.5-1) está para (3.0-0.0)?

(4.5-1.0)/(3.0-0.0)=1.16

Vamos achar agora os vermelhos

1.0=(2.17-1)/1.16

2.0=(3.33-1)/1.16 ..

fechou?

Algo me diz que é quase isso que a tal map faz.

Sim na verdade é basicamente uma regra de três o duro é conseguir colocar isso direitinho no código, e vi que a função MAP não estava funcionando bem para o caso da leitura decimal sei lá porque,  aí relendo as páginas anteriores bem no início lembrei da tal interpolação linear que o guruGPT mencionou, então lá fui ver se conseguiria fazer a tal interpolação linear e funcionou ela é basicamente MAP mas mais direta eu acho:

 

 

Citação

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

 

LiquidCrystal_I2C lcd(0x27, 16, 4);  // Inicializa o display LCD no endereço 0x27

 

const int presspin = A2; // Pino analógico utilizado para ler a tensão do sensor

 

void setup()

{

  Serial.begin(9600); // Inicializa a comunicação serial

  lcd.init();

  lcd.setBacklight(HIGH);

  lcd.setCursor(0, 0);

}

 

float interpolate(float x, float x1, float y1, float x2, float y2) {

  return y1 + ((x - x1) * (y2 - y1) / (x2 - x1));

}

 

void loop()

{

  int voltage = map(analogRead(presspin), 0, 1023, 0, 500); // Leitura da tensão em volts com base em 500

  int reading = analogRead(presspin);

 

  float pressure;

  if (reading >= 187 && reading <= 204) {

    pressure = 0.0;  // Pressão igual a zero na "zona zero"

  } else if (reading >= 0 && reading <= 186) {

    pressure = interpolate(reading, 186, -0.01, 0, -1.0);  // Interpolação linear para a faixa de pressão negativa (-1 bar a -0.01 bar)

  } else if (reading >= 204 && reading <= 1023) {

    pressure = interpolate(reading, 204, 0.01, 1023, 3.1);  // Interpolação linear para a faixa de pressão positiva (0.01 bar a 3.1 bar)

  }

 

  lcd.clear();  // Limpa o display

 

  lcd.setCursor(3, 0);

  lcd.print(voltage / 100);  // Exibe a tensão inteira

  lcd.print(",");  // Exibe a vírgula

  lcd.setCursor(5, 0);

  lcd.print((voltage % 100) / 10);  // Exibe o primeiro dígito após a vírgula

  lcd.print(voltage % 10);  // Exibe o segundo dígito após a vírgula

 

  lcd.setCursor(12, 0);

  lcd.print(reading);

 

  lcd.setCursor(0, 3);  // Define a posição do cursor no display

  lcd.print("Pressao: ");  // Exibe a mensagem "Pressao: "

  lcd.print(pressure, 2);  // Exibe o valor de pressão no display com duas casas decimais

  lcd.print(" bar");  // Exibe a unidade de medida no display

 

  Serial.print("Voltage: ");

  Serial.println(voltage);

 

  delay(300);

}

 

 

 

o duro é que esse interpolate usa várias float o que não é o ideal, então tentei fazer como o @Thiago Miotto e @.if indicaram e deu certo no código anterior para substituir tudo de float para int e acrescentei quele esqueminha para colocar  "  ,  " no display, e pra variar o treco ficou travado:

 

Citação


#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 4);  // Inicializa o display LCD no endereço 0x27

const int presspin = A2; // Pino analógico utilizado para ler a tensão do sensor

void setup()
{
  Serial.begin(9600); // Inicializa a comunicação serial
  lcd.init();
  lcd.setBacklight(HIGH);
  lcd.setCursor(0, 0);
}

int interpolate(int x, int x1, int y1, int x2, int y2) {
  return y1 + ((x - x1) * (y2 - y1) / (x2 - x1));
}

void loop()
{
  int voltage = map(analogRead(presspin), 0, 1023, 0, 500); // Leitura da tensão em volts com base em 500
  int reading = analogRead(presspin);

  int pressure;
  if (reading >= 187 && reading <= 204) {
    pressure = 0.0;  // Pressão igual a zero na "zona zero"
  } else if (reading >= 0 && reading <= 186) {
    pressure = interpolate(reading, 186, -0.01, 0, -1.0);  // Interpolação linear para a faixa de pressão negativa (-1 bar a -0.01 bar)
  } else if (reading >= 204 && reading <= 1023) {
    pressure = interpolate(reading, 204, 0.01, 1023, 3.1);  // Interpolação linear para a faixa de pressão positiva (0.01 bar a 3.1 bar)
  }

  lcd.clear();  // Limpa o display

  lcd.setCursor(3, 0);
  lcd.print(voltage / 100);  // Exibe a tensão inteira
  lcd.print(",");  // Exibe a vírgula
  lcd.setCursor(5, 0);
  lcd.print((voltage % 100) / 10);  // Exibe o primeiro dígito após a vírgula
  lcd.print(voltage % 10);  // Exibe o segundo dígito após a vírgula

  lcd.setCursor(12, 0);
  lcd.print(reading);

  lcd.setCursor(0, 3);  // Define a posição do cursor no display
  lcd.print("Press: ");  // Exibe a mensagem "Press: "
  lcd.print(pressure / 100);  // Exibe a pressao inteira
  lcd.print(",");  // Exibe a vírgula
  lcd.print((pressure % 100) / 10);  // Exibe o valor de pressão no display com duas casas decimais
  lcd.print(pressure % 10);  // Exibe o segundo dígito após a vírgula
  lcd.print(" bar");  // Exibe a unidade de medida no display

  Serial.print("Voltage: ");
  Serial.println(voltage);

  delay(300);
}

 

 

Alguma ideia porque não está exibindo corretamente no display? Se deixar assim funciona mas imagino que tanto float possa custar caro no final das contas tendo em vista que vou colocar várias coisas no arduino...

 

 

 

 

Em 29/06/2023 às 21:09, aphawk disse:

Que isso .... O que o @.if mais gosta são esses casos de código de Arduíno !!!

 

Ė uma diversão para ele sair dos Pic12 que ele tem guardado fazem anos e anos !

 

Normalmente ele reclama quando vira a primeira página, mas as outras ele não liga não !

OFF: não acostumei a tratar a @.if com pronomes masculinos, se me recordo bem antes de .if tinha um nome ali e era feminino... Sei lá devo estar tendo um devaneio/dejavu... ignorem isso.

 

 

Link para o comentário
Compartilhar em outros sites

12 horas atrás, GustavoH93 disse:

OFF: não acostumei a tratar a @.if com pronomes masculinos, se me recordo bem antes de .if tinha um nome ali e era feminino... Sei lá devo estar tendo um devaneio/dejavu... ignorem isso.

 

 

Imagina eu que tratei como feminino durante  mais de 10 anos kkkkkkk ..... mas esse fato é o de menos, o que importa é a presença dele com seus conhecimentos e humor , e sempre disposto a ajudar a quem pede !

 

Tem muita gente que se incomoda com o fato de ser "ele" ou "ela", isso vem dessa maldita polarização religiosa que invadiu o Brasil, mas aqui no CDH somos todos iguais, todos são tratados com o respeito amigo que merecem. Se não fosse assim, eu não estaria aqui.

 

E mais, eu não entendo patavina de C, então sem ele este Fórum estaria bem menos movimentado kkkkkk !

 

Paulo

Link para o comentário
Compartilhar em outros sites

Em 03/07/2023 às 10:10, aphawk disse:

Imagina eu que tratei como feminino durante  mais de 10 anos kkkkkkk ..... mas esse fato é o de menos, o que importa é a presença dele com seus conhecimentos e humor , e sempre disposto a ajudar a quem pede !

Verdade, confesso que as vezes até me confundo com o que @.if fala, exemplo os leds anti paralelo que me enrolei a pouco tempo kkkkkk

Mas realmente o conhecimento que ela/ele passa aqui no fórum é excelente.

 

Em 03/07/2023 às 10:10, aphawk disse:

aqui no CDH somos todos iguais, todos são tratados com o respeito amigo que merecem. Se não fosse assim, eu não estaria aqui.

concordo plenamente.

 

Em 03/07/2023 às 10:10, aphawk disse:

E mais, eu não entendo patavina de C, então sem ele este Fórum estaria bem menos movimentado kkkkkk !

 

Pode não entender de C mas entende bastante de micros né @aphawk ? Dei uma lida rápida no material que indicou e foi bem interessante, neste caso não entende de C mas acha que trocar de Float para int iria poupar muito mais recurso do micro? Se não me engano foi falado que trabalhar com ponto flutuante exige muito dos micros mais simples, mas para o ATMEGA328P acho que ele dar conta se não for muita coisa, ou quando acrescentar mais coisas no código acha que ele vai começar a apanhar? Estou pensando se deixo o código com float como está porque apesar de tudo está funcionando aparentemente bem   \😁/

Link para o comentário
Compartilhar em outros sites

17 horas atrás, GustavoH93 disse:

mas para o ATMEGA328P acho que ele dar conta se não for muita coisa, ou quando acrescentar mais coisas no código acha que ele vai começar a apanhar?

 

Na época dos Pic14 e 16, ponto flutuante matava muito, porque o processamento já era em baixa velocidade ( 4 MHz )  e as instruções consumiam 3 , 4 ciclos de clock, então ocorriam demoras que podiam complicar bastante o processamento.

Já num Arduino com o Atmega328, você tem 16 MHz de clock, e a grande maioria das instruções em apenas 1 ciclo de clock, já fica quase 10x mais rápido que nos antigos Pics ......

 

Eu costumo dividir no código : ponto flutuante apenas onde for estritamente necessário. Todo o resto uso 8 bits ou 16bits.

 

Nada te impede de fazer a mesma coisa : use ponto flutuante para as contas, e no final converta para 16 bits se possível, por exemplo uma tensão eu posso apresentar ela como 2,7 volts em vez de 2,7349 ..... é uma imprecisão que nem é sentida na imensa maioria das vezes !

 

Olha, eu tiro leite de pedra de um ATMEGA328P.... Tenho alguns produtos que rodam programas que consomem 99% da memória flash, todos tem muitas interrupções ao mesmo tempo e algumas reentrantes ( ! ) , e tenho cálculos em ponto flutuante em alguns locais para calculo de posicionamento magnético, mas sigo algumas regras desde 1981

 

- Interrupções sempre o mais rápido possível, sinalizando para o programa principal quando tiver de fazer cálculos complicados.

- Controle TOTAL das interrupções, eu que habilito/ desabilito e trato as reentrâncias.

- Rotinas que enviam dados em baixa velocidade devem ser posicionadas estrategicamente no tempo, e se possível controlando as interrupções para não atrapalharem.

 

Se você não tem problemas com a demora nos cálculos, não vejo problema em fazer tudo em ponto flutuante também.

 

Um mix de Basic e Assembly e continuo ativo no ramo por mais de 40 anos  kkkkkkkk !

 

Paulo

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Em 05/07/2023 às 17:01, aphawk disse:

Eu costumo dividir no código : ponto flutuante apenas onde for estritamente necessário

 

Em 05/07/2023 às 17:01, aphawk disse:

 

Se você não tem problemas com a demora nos cálculos, não vejo problema em fazer tudo em ponto flutuante também.

Então tentei eliminar ponto flutuante em tudo no código final, temperatura deixei inteiro, leitura do sensor da sonda em inteiro também com aquele esqueminha no display para mostrar como decimal inserindo a virgula artificialmente, quase tudo foi feito com inteiro, só estou tendo problemas com essa parte do código que usa float, se tentar mudar pra int fica todo errado, se deixar com float fica normal.

 

Acho que vou manter só essa parte com float, no final vou utilizar mais de um arduino pra fazer tudo funcionar direitinho  então um float apenas não vai me custar caro.

 

Ainda tenho que montar tudo no carro e testar um a um, mas aparentemente está tudo certo o carro está em manutenção mas quando voltar a rodar vou montar os sensores e o arduino lá pra ver como vai ficar, neste caso acho que podemos parar o tópico por aqui, quando for continuar com as adaptações eu criarei outro tópico ainda mais com todas as duvidas que tenho de programação kkkkkkk

 

Agradeço muito a todos que acompanharam até aqui, vocês são brilhantes!!  \o/ \o/ \o/ \o/ \o/ \o/ \o/ \o/

Link para o comentário
Compartilhar em outros sites

5 minutos atrás, aphawk disse:

Ué , porque mais que um ???

vão ser várias coisas no mesmo arduino, então pra dividir vou usar provávelmente dois arduinos e um STM que o @Sérgio Lembo indicou.

 

Tenho que fazer a leitura de:

 

Temperatura do liquido de arrefecimento

Temperatura do óleo

Temperatura no cofre do motor

Temperatura pós turbocompressor

pressão do óleo

pressão do combustível

pressão do turbocompressor

nível do tanque

voltimetro da bateria

RPM

Angulo do ponto de ignição (feito pelo STM)

 

e as leituras dos pinos para indicar setas, farol, desembaçador...

 

Depois pegar todas essas informações e mandar via cabo OTG para um tablet, para um arduino fazer tudo acho que é muita coisa mesmo sendo o MEGA.

 

 

 

 

Link para o comentário
Compartilhar em outros sites

@GustavoH93 ,

 

As temperaturas tudo bico.
Pressão, só capturar as medidas dos sensores, geralmente I2C ou SPI, bico.

Nível do tanque é um potenciômetro, bico.

Voltímetro, simples leitura AD, bico.

Rpm com dois sensores hall ou outro tipo de sensor, bico também.

Ângulo do ponto de ignição ...... não sei como medir isso, mas claro que um Arduino comum tem capacidade de fazer. Se já tiver outro processador fazendo, ótimo.

 

Mandar via OTG ..... não sei o que é e nem como fazer KKK mas acho melhor você usar o Arduino Mega por causa do espaço para o programa.

 

Paulo

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Em 07/07/2023 às 11:40, aphawk disse:

melhor você usar o Arduino Mega por causa do espaço para o programa.

sim com certeza fora que ele tem muito mais pinos disponíveis também.

 

então talvez ele dê conta de fazer tudo, mas só vamos saber na prática, assim que o carro voltar a rodar vou montar tudo lá,  estou ansioso pra ver funcionando mas vai levar um tempinho ainda mais que agora está tendo reformas em casa também, de qualquer forma em breve conseguirei testar na prática e aí veremos como vai ficar 😁

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

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

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

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!