Boa noite pessoal.

Estou trabalhando num projeto em que utilizo um acelerômetro MMA7361 e uma tela touch-screen  ILI9486 de 3,5' com uma resolução de 320x480.

Bom o problema é o seguinte para ter uma maior precisão nas leituras do acelerômetro tenho que utilizar uma voltagem de referência de 3.3V e o faço jumpeando o pino AREF no pino de 3.3V do próprio Arduíno. No entanto quando faço isso a tela começa da problema pois em ambos eu utilizo pinos analógicos e no caso da tela touch a tensão de referência é de 5V para os pinos analógicos.

Já fiz o teste de não utilizar a referência de 3,3V para as leituras do acelerômetro e a tela funciona normal mas o acelerômetro começa a dar problemas nas leituras.

Pensei em utilizar um resistor na saída da tela para os pinos analógicos para reduzir a tensão de 5V para 3,3V no caso de utilizar uma voltagem de referência de 3,3V (jumper ligando o pino AREF no pino de 3.3V) para deixar as medidas do o acelerômetro mais precisas ou um transistor na saída do acelerômetro para aumentar a tensão de 3,3V para 5V no caso de manter a voltagem de referencia padrão do arduino (5V).

Já procurei alguma maneira de configurar alguns pinos analógicos como 3,3V utilizando o pino AREF mas parece que não tem como, ou seja, se eu jampear o pino AREF em 3,3V todos os pinos analógicos do Arduíno utilizarão 3,3V como referência.

Bom se alguém puder me ajudar serei muito grato.

OBS. Desculpem se não fui tão claro na minha explicação.

 

Exibições: 596

Responder esta

Respostas a este tópico

olá Gustavo.

      Se vc analisar o datasheet do MMA7361, e a documentação para seu Touch-Screen,  irá perceber que existem pontos conflitantes. Porém este conflito é um pouco sutil,  e provavelmente apenas pessoas muito experimentadas em Eletrônica irão perceber.

      Mas quase sempre é possível contornar estes "conflitos" técnicos.  Para isto é preciso se conhecer mais alguns detalhes do seu Sistema.  Veja se vc pode informar estes pontos:

      1)  o MMA7361  que vc está usando está em uma plaquinha comercial, como a que mostro a seguir?

(clique na figura para "zoom")

      Se sim, e se for exatamente a mesma plaquinha da figura, por favor confirme isto, pois é muito importante (pois o diagrama elétrico desta plaquinha da imagem, está disponível na Internet, e então este diagrama pode ser usado como referência aqui no tópico).

      2) como vc está ligando os sinais do MMA7361 ao Arduino?   Pergunto pois além da alimentação da plaquina (pinos 5V, 3V3, e GND)  e sinais X, Y, e Z,   há ainda os sinais "GS", "ST", "SL", e "0G". Alguns destes sinais, devem obrigatoriamente estarem ligados.

      Sobre a ligação da alimentação,  há uma forma otimizada de se fazer, mas antes de falar sobre isso,  irei aguardar suas informações sobre as ligações.

      3)  quais Blibliotecas vc está utilizando?  pergunto tanto para o MMA7361, quanto para o Touch.

      Entenda:  a forma como a Biblioteca faz a aquisição das informações via pinos do Arduino, é muito importante para se saber como uma Biblioteca impacta na outra. Aqui, pode residir grande parte dos conflitos que mencionei.  Especificamente,  posso dizer que me refiro aos "settling times"  da conversão A/D (que geralmente não é previsto nas Bibliotecas).

      4) e finalmente:  qual a Taxa de Amostragem vc está usando para o MMA7361 ?  Claro, isto pode estar implícito na Biblioteca, ou pode ser explicitamente especificado, ou então é determinado pela própria cadência que vc chama as leituras dos dados do MMA7361.  Seja como for,  é uma informação muito importante, e está relacionada à questão 3,  e tem impacto direto na forma como contornar os tais conflitos que mencionei.

      Ah, vc não informou,  mas imagino que seu Arduino seja ou o UNO, ou Mini, ou Mega. Poderia confirmar?

      Fico no aguardo, para melhor poder ajudar.

      Abrçs,

      Elcids

Bom dia Elcids.

Primeiro gostaria de agradecer e muito pela ajuda. Procurarei responder ao seus questionamentos na mesma ordem e numerado como vc fez nas perguntas.

1) O acelerômetro é exatamente esse da foto.

2) A ligação que estou fazendo no arduino, nesse caso o UNO mas no meu projeto utilizo o MEGA, está mostrado na figura abaixo. O esquema de ligação no arduino tbm pode se enoncontrado no site: https://www.filipeflop.com/blog/acelerometro-3-eixos-mma7361-arduino/

3) As bibliotecas que utilizando são:

MMA7361: Link https://github.com/jeroendoggen/Arduino-MMA7361-library ou no arquivo AcceleroMMA7361.h

ILI9486: SPI.h , Adafruit_GFX.h , TouchScreen.hMCUFRIEND_kbv.h

Estou enviando so sketch que estou usando como modelo para a tela: MENU-mod1.ino

 

4) Cara eu não sabia o que era taxa de amostragem dei uma olhada pesquisei e agora eu sei o que é mas, não consegui achar nada nas bibliotecas. Desculpe minha ignorância mas como posso verificar a taxa de amostragem ou a cadencia com que eu chamo as leituras.

O arduino que estou utilizando é o MEGA.

OBSERVAÇÃO: Cara fiz um teste aqui e parece que esta dando certo. Ao inves de alimentar o acelerômetro com 5V estou alimentado com 3,3V e não jampiei o AREF no 3,3V do Arduíno. Parece que está dando certo mas ainda tenho que testar. Não sei se é a melhor das alternativas caso sua sugestão seja mais segura prosseguimos com a ajuda.

abraços.

olá novamente, Gustavo.

      Estas informações que vc forneceu,  são muito importantes para um diagnóstico. Com elas, já fiz uma avaliação primária.  A seguir listo algumas considerações iniciais:

      1)  Sendo seu MMA7361 aquele da figura, podemos usar como referência um esquema elétrico disponível na Internet para aquela plaquinha. De fato, já analisei este esquema, e vi que algumas características relevantes estão presentes na plaquinha.  Se sua opção é usar o MMA7361, então esta plaquinha é certamente a opção mais adequada,  conforme vi pela análise dos circuitos da mesma (irei discernir posteriormente estes pontos).

      No próximo post (mais à frente explico porque não nesse post),  irei descrever alguns problemas que podem ocorrer quando se usa a Interface de Hardware do MMA7361 com o Arduino. Estes "problemas"  praticamente independem de qual Arduino se está usando,  e independem também dos demais Dispositivos que se está usando no Sistema (Displays, RTC, Sensores, etc),  e portanto a solução de contorno também praticamente será a mesma para todos os casos.  Mesmo assim,  alguns "conflitos" podem ocorrer com Dispositivos que também usam canais analógicos do Arduino, e dependendo do tipo do Dispositivo,  este conflito será maior ou menor. Para o Touchscreen por exemplo, provavelmente será menor este conflito, porque são relativamente baixas as impedâncias características X e Y da malha resistiva do Touch (mais comumente fica entre 200 Ohms e 400 Ohms). Mas se o "conflito"  for sensível,  então ele pode ser difícil de solucionar por Hardware, pois a forma como o Touch funciona praticamente não permite  "ajuste" no Hardware,  e neste caso, apenas com "ajuste" na Biblioteca do Touch será possível contornar o problema (mas isto é algo bem simples de se fazer, e fazendo da forma "correta", não terá impacto em nenhum outro aspecto do Sistema).

      2) como vc disse ter feito as conexões elétricas conforme o desenho que postou aqui (além do link do site que usou como referência),  vê-se que nenhum sinal do MMA7361 ficou sem conexão. Apenas está aberto aqui, qual será a melhor forma de alimentar a plaquinha, além de eventuais "ajustes" para evitar os problemas que mencionei no item 1 (como eu disse, sobre isto, irei falar no próximo post).

      3) foi muito bom vc listar as Bibliotecas que está utilizando. Melhor ainda, postou seu código, o que permite analisar de forma "real" o comportamento do mesmo (sem ficar tentando adivinhar certas coisas ou ter que ficar perguntando aqui, o que é muito mais demorado e normalmente não muito eficiente).

      Sobre a Biblioteca Touchscreen, vi que ela é ligeiramente diferente da "original" da Adafruit.  Claro, só pude comparar o arquivo "TouchScreen.h" (já que o arquivo TouchScreen.cpp  vc não informou). Veja na figura a seguir, o resultado dessa comparação:

(clique na figura para "zoom")

      A parte marcada em vermelho na figura, existe apenas no seu arquivo "TouchScreen.h".  Neste caso, sem problema, pois este "overload" normalmente não é usado.  Mas o fato deste "overload" estar ali, significa que existe o equivalente do mesmo no seu arquivo "TouchScreen.cpp", o que significa que realmente esta sua LIB foi "tratada".

      Já a parte em amarelo na figura, não existe no seu "TouchScreen.h". Essa parte trata da compatibilidade das versões de Hardware do Arduino, e por esse motivo seria bom que estivesse no seu arquivo, mas não está.

      Eu normalmente sou contra alterar Bibliotecas, a não ser que seja absolutamente necessário.  Minha prática é fazer uma cópia e renomear a LIB, de forma que seja identificável do que se trata.  Nesta sua LIB TouchScreen,  isto não foi feito,  e pode gerar grandes confusões, já que induz a pensar que é a mesma LIB da Adafruit (mas realmente não é) e que teria os mesmos comportamentos.

      Sem o "TouchScreen.cpp", não posso avaliar o que mais foi alterado nessa sua LIB, e assim não dá pra saber as implicações dessas alterações.

      Se for possível, recomendo utilizar a LIB original da Adafruit. E se for necessário em algum momento alterar a mesma, recomendo que isso seja feito de forma explícita e clara,  caracterizando uma "nova" LIB.

     4)  sobre a Taxa de Amostragem,  é quase certo que no seu Sistema  está sendo feito pela cadência de execução do código. Digo isto porque a LIB do MMA7361 que vc disse estar usando, não tem tratamento sobre isso, deixando esta responsabilidade pra quem a utiliza (não que isto seja ruim ou errado, mas não tem nenhum tratamento mais adequado para a questão).

      Mas é muito simples vc impor uma Taxa de Amostragem adequada ao seu Sistema, e se feito da forma correta terá excelente resultado. Assim, irei postar como vc pode fazer isso, permitindo dessa forma que vc especifique a Taxa de Amostragem mais adequada para seu Sistema. Porém o ideal pra determinar qual é a Taxa de Amostragem mais adequada, seria saber como vc utiliza o MMA7361, ou seja, pra que o mesmo é usado no seu Sistema. Como vc é da área de Física, onde as aplicações seriam muitas, dificulta até imaginar como vc pode estar usando isso (só espero que não seja em projéteis balísticos com intuito bélico, pois neste caso não poderei ajudar devido ao juramento que fiz na colação de grau na Engenharia, mesmo depois de 27 anos).

      Sobre usar o Mega,  como imagino que haja caráter de pesquisa no seu Projeto, é uma ótima escolha, devido à versatilidade que este Arduino proporciona. Além disso, como vc está usando recursos gráficos que consomem uma boa quantidade de memória,  o Mega ajuda muito nesse ponto. Mas lembre-se:  a performance de processamento da CPU do Mega, é exatamente a mesma da CPU do UNO (os chips são diferentes, mas o "core" o "Clock" são os mesmos), ou seja,  não é nenhum foguete.  Pode ser que em algum momento do seu Projeto, vc precise de mais performance de processamento,  e neste caso terá que migrar para um Arduino mais "parrudo" em termos de processamento (pode ser um "Due", um STM32, ou mesmo um ESP32). Mas sem conhecer o intuito do Sistema, isso é apenas especulação.

      Ainda sobre o Mega,  olhando seu código "MENU-mod1.ino", levantou uma questão muito curiosa.  Trata-se da Interface de Hardware com sua placa TFT ILI9486. Como é algo muito técnico, prefiro neste momento não dizer detalhes pra não gerar confusão.  Olhando o código do "MENU-mod1.ino", algo parece não encaixar entre o Hardware do seu TFT ILI9486 e seu Arduino Mega.  Mas para que eu possa tirar esta dúvida e esclarecer se realmente há um problema,  precisaria que vc postasse aqui fotos da sua placa TFT ILI9486, de forma que eu a identificasse e conferisse se está tudo ok com o Hardware. Se postar as fotos do TFT ILI9486, por favor que sejam nítidas, mostrando frente e verso da placa,  de forma que se possa ver o nomes dos sinais (normalmente são escritos no silk no lado "bottom" da placa, junto aos conectores).  A identificação do nome dos sinais é vital para este esclarecimento.

      Sobre os pontos que prometi postar,  irei fazê-lo no próximo post,  pois  assim será mais efetivo com quaisquer outras informações que vc disponha.  Incluindo estes esclarecimentos sobre as LIBs e eventualmente a questão do Hardware entre o Mega e o TFT ILI9486, além é claro do mais significativo, que é discernir sobre a Interface do MMA7361 e eventuais problemas com os sinais X, Y, e Z (e como contorná-los).

      Sobre a alimentação de 3.3V que vc diz ter feito no MMA7361, e eventual melhora, pode ocorrer sim.  Mas devido aos tais "problemas" de Interface que mencionei,  vou esperar mais detalhes dos seus testes, e então comentar de forma mais efetiva, pois há alguns aspectos extremamente importantes relacionados a isso (se vc quiser dar uma olhada neste tópico aqui no LDG   "Conexão do AREF",  ajudará a esclarecer alguns aspectos).

      Abrçs,

      Elcids

Bom dia Elcids.

Bom primeiro muito obrigado pela ajuda e pela aula, não sei se disse mas sou mais um entusiasta do que um programador mas, enfim to ai na peleja com esse projeto.

Desculpe mas ri muito com seu comentário sobre o fato de eu ser físico e estar trabalhando com o acelerômetro, se eu te disser que tenho doutorado e pós doc em tecnologia nuclear ai sim que vc não me ajudará mesmo. Mas, vamos lá lhe explicarei o projeto em mais detalhes:

Estou tentando automatizar as escolhas de dois parâmetros muito importantes na hora de se fazer um exame de raios X, esses parâmetros são escolhidos pelo operador do raios X e implica na dose de radiação, no paciente, e na qualidade da imagem. Para isso uma variável muito importante quando se escolhe esses parâmetros é a espessura da região que será radiografada, o problema que me fez utilizar o acelerômetro é que existem procedimentos radiológicos em que o feixe incide perpendicularmente a superfície (pele do paciente) e em outros o feixe incide obliquamente dai a necessidade do acelerômetro. Além disso quero automatizar o sistema de colimação por meio de reconhecimento de interface utilizando um sonar e uma câmera (a melhor maneira que pensei até o momento) dessa forma com o tamanho de campo e outro parâmetros eu consigo determinar a dose de radiação recebida pelo paciente e mais especificamente a dose de radiação nos órgãos expostos além de inferir uma probabilidade de incidência de algum malefícios devido ao procedimento radiológico, a unica coisa é que talvez, terei que para isso, partir para o raspberry pois para determinar a dose e as outras coisas, o faço pelo processo Monte Carlo e não sei se o arduino dará conta.

Acho que te tranquilizei, rsrsr...

O arquivo cpp da biblioteca que estou utilizando é essa TouchScreen.cpp. Sobre o código "MENU-mod1.ino" eu busquei na internet já pronto e fiz algumas alterações mas, o fabricante da tela tem sua própria biblioteca e alguns exemplos que são:

Bibliotecas:

TouchScreen.hTouchScreen.cpp

LCDWIKI_GUI.hLCDWIKI_GUI.cpp

LCDWIKI_KBV.hLCDWIKI_KBV.cpp

Tentei colocar o arquivo zip com exemplos e pdf's sobre a tela mas não vai devido ao tamanho de qualquer forma se digitar na internet 3.5inch_Arduino_8BIT_Module_ILI9486_MAR3501_V1.1 encontrará o arquivo zip que estou falando. A foto da tela segue abaixo:

Bom sobre a leitura recomendada sobre "Conexão do AREF" cara, quase deu um nó no meu cérebro mas, to ai para aprender e um dia chego lá talvez não no nível de vocês mas, vamos que vamos...rsrs

Abraços

Elcids

Boa noite Xará, 

Observações importantes:

  • O MMA7361 trabalha  com a tensão de 3,3V. Portanto ele não deve trabalhar diretamente com um Arduino 5V. 

https://www.nxp.com/docs/en/data-sheet/MMA7361LC.pdf

  • Alguns pinos podem ser ligados diretamente no Arduino, sem prejuízo do funcionamento. Como os pinos de saída Xout, Yout e Zout. Mas os pinos de controle do acelerômetro (input) não suportam 5V. 
  • Recomendo o uso de conversor bidirecional de níveis lógicos. 

 

Bom dia Xará.

É dei uma olhada no data-sheet e de fato funciona com 3,3V uma lição que aprendi aqui com vocês é sempre dar uma olhada no data-sheet, confesso que eu buscava por ajuda na internet e ia testando as coisas até que funcionassem bem, pelo menos para mim.

Bom dando uma olhada no data-sheet parece que ele recomenda a utilização de capacitores nas saída Xout, Yout e Zout, segue anexo a pagina do data-sheet que trata das ligações básicas.

Sobre a utilização de um conversor bidirecional de níveis lógicos verificarei a possíbilidade.

Valeu pelas dicas.

Bom você tanto o Elcids estão percebendo que não sei nada sobre eletronica, programação enfim com toda certeza não estou utilizando os dispositivos do meu projeto e nem o arduino em toda sua capacidade mas muito obrigado por me ajudarem.

Bom dia Xará, 

Seu projeto é complexo e muito interessante! Conte com a minha ajuda.

Dá para ver na foto do módulo que nas saídas Xout, Yout e Zout já tem capacitores acoplados.

Encontrei esse diagrama que parece ser o mesmo do seu módulo:

https://eecs.oregonstate.edu/education/docs/accelerometer/MMA7361_m...

"Para isso uma variável muito importante quando se escolhe esses parâmetros é a espessura da região que será radiografada, o problema que me fez utilizar o acelerômetro é que existem procedimentos radiológicos em que o feixe incide perpendicularmente a superfície (pele do paciente) e em outros o feixe incide obliquamente dai a necessidade do acelerômetro" 

1) Você pretende colocar o acelerômetro na cabeça do Raio-X?

"Além disso quero automatizar o sistema de colimação por meio de reconhecimento de interface utilizando um sonar e uma câmera (a melhor maneira que pensei até o momento) dessa forma com o tamanho de campo e outro parâmetros eu consigo determinar a dose de radiação recebida pelo paciente e mais especificamente a dose de radiação nos órgãos expostos" 

2) Qual a precisão que será necessária nessa medição? 

Se for cm, poderá usar sonar de ultra-som, se for mm terá que usar trena laser. 

Opa valeu por se oferecer em me ajudar, será de grande valor a ajuda de vocês.

Entendi eu achei que teria que colocar os capacitores, desculpa minha ignorância..rsrs

Respondendo às suas perguntas:

1) Sim pretendo colocar o acelerômetro no colimador, que fica acoplado no cabeçote de raios X.

2) Então estou utilizando dois sonares ultra-som (do tipo da figura abaixo), pois a precisão é da ordem de cm, a única coisa que me preocupa é que para as medidas com sonar a superfície de reflexão das ondas deve ser plana mas, acredito que dará certo. Foi uma batalha para conseguir acoplar esses sensores, tive que separar o emissor do receptor que estavam no mesmo chip dai os coloquei em lados opostos do colimador. (Não sei se me fiz entender).

Grato pela ajuda.

Estava vendo ainda a pouco um vídeo no NatGeo, sobre expedições submarinas de grande profundidade da equipe do Robert Ballard. 

Quando eu vi  os primeiros vídeos dessas expedições, anos atrás, uma imagem me intrigava. Dois pontos de luz de laser em alguns vídeos incríveis de suas descobertas. Lendo mais a respeito, descobri a função desses dois pontos de luz! Para calcular o tamanho dos objetivos nas imagens. 

Muito simples. Se você sabe a distância entre esses dois pontos de luz, quando ver uma imagem com esses dois pontos, poderá calcular o tamanho do objeto, através das imagens. 

Pensando que você terá o angulo do feixe de luz do Raio-X ( e do laser também) que tal usar trigonometria para calcular a distância? Acha viável ? Vai exigir processamento de imagem e cálculos matemáticos. 

Esses lasers devem ser para, provavelmente, ter uma referencia de escala, dessa forma, pode saber o tamanho para um tamanho padrão de imagem, dai é so questão de algoritmo para saber o tamanho do objeto para escalas diferentes.

Eu tenho um aplicativo no PlayStore da google  para plataforma android chamado de X Ray Parameters Control , que desenvolvi pelo AppInventor. O app determina a distância entre dois pontos por uma fotografia e dessa forma eu consigo saber qual a espessura da região a ser radiografada e assim estimar os parâmetros para o procedimento radiológico além da dose de radiação de saída do tubo de raios X. Bom não foi para frente eu preciso melhorá-lo e deixa-lo mais prático, outro problema é que não dá para tirar foto de paciente muito embora a foto não fique armazenada no celular até para explicar isso para o paciente e fora que é anti-ético mas, para fins didáticos serve, ainda pretendo mexer nesse app.

"Pensando que você terá o angulo do feixe de luz do Raio-X ( e do laser também) que tal usar trigonometria para calcular a distância? Acha viável ? Vai exigir processamento de imagem e cálculos matemáticos. "

Então na verdade eu pensei em usar o laser mas não será necessário e tbm devido as limitações do laser quanto a distancia de alcance enquanto o ultrasom tem um alcance de 400cm o laser não passa de 200cm pelo que vi, desconheço algum laser com aplicações para o arduino que tenha um alcance maior. Com o angulo medido pelo acelerometro pretendo descobrir a espessura da região a ser radiografada quando o procedimento exigir uma angulação do feixe. O único problema que acho que não será tão grave é que a espessura medida será um pouco maior que a real isso por que, por exemplo, supondo que a superfície que medirei a espessura será curva.

a distancia de alcance enquanto o ultrasom tem um alcance de 400cm o laser não passa de 200cm pelo que vi, desconheço algum laser com aplicações para o arduino que tenha um alcance maior."

Eu tenho uma trena Laser que mede até 20 metros! com precisão de mm. 

Trena a Laser Bosch GLM20

https://www.bosch-professional.com/br/pt/products/glm-20-0601072EG0

Já tentei hackea-la para poder usá-la, mas ainda não consegui. 

http://labdegaragem.com/forum/topics/medidor-de-distancia-de-0-a-40...

Veja essa trena a laser para Arduino:

https://www.laserrangesensor.com/laser-distance-sensor/short-range-...

https://www.laserrangesensor.com/laser-distance-sensor/

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço