quarta-feira, 10 de dezembro de 2014

Escolhendo o tema do Projeto Final

Amigos, hoje decidi escrever um pouco sobre como escolher um tema para um bom projeto final, ou pelo menos o que eu considero um bom projeto final. Não se trata apenas disso mas sim um concelho para vida de um modo geral.


Atualmente troquei mais uma vez de emprego, agora estou trabalhando na ALSTOM Power, na divisão de comissionamento de equipamentos para hidroelétricas, isso faz penas 2 meses. O que quero aqui não é anunciar um novo emprego mais sim mostrar como foi importante o meu projeto final para isso.

Quando fiz o meu projeto final estava ainda trabalhando na ENELTEC e resolvi aproveitar um projeto que estava circulando na empresa para o meu projeto final, o controlador de velocidade para geradores a bio-gás, eu gostava do tema e era algo que eu estava bem empenhado porque era com aquilo que eu pretendia trabalhar o resto da minha vida.

Naturalmente não tive um orientador que pudesse me ajudar diretamente com o tema, a final, controle de geradores é algo bem específico e no Rio de Janeiro não conheço ninguém que trabalhe com isso, foi um desafio único, até para encontrar uma banca para avaliar o projeto.

Entre os desafios teve uma parte de modelagem da parte mecânica, execução dos testes de software e testes do hardware e finalmente o teste prático no gerador propriamente dito, infelizmente não tenho mais os videos da grande vitória que foi testar a placa no gerador e ver tudo funcionando na fábrica, este ficou só para memória.

Fato é que acabei por ter que ir para outra empresa e trabalhar com linhas de transmissão, também é interessante mas não era exatamente já estava me adaptando com a ideia de trabalhar com linhas para o resto da vida quando quando surgiu essa oportunidade para vir a ALSTOM trabalhar com comissionamento de turbinas hidroelétricas especialmente em controle de velocidade!

Eles viram o que eu tinha colocado no linkedin sobre o projeto e me procuraram por já ter conhecimento nesse nicho específico que demanda pessoal que é o controle de velocidade. Naturalmente nunca me passou pela cabeça trabalhar com usinas hidroelétricas mas a oferta foi irrecusável e agora estou aqui.

Isso é uma história que achei interessante de contar porque, primeiro que nunca pensei que o linkedin fosse render alguma vaga, eu procurando vaga no vagas.com, assinando o catho e nada e repentinamente surge uma oportunidade para uma coisa que eu conhecia.

O que eu quero dizer nesse post não é só mostrar como foi importante para mim realizar o trabalho e coloca-lo como meu projeto final da faculdade mas também mostrar que nem sempre a linha de pesquisa acadêmica é a melhor.

Quando estava no CEFET-RJ tinha muitas propostas feitas por professores na área de comercialização de energia, planejamento energético e proteção e controle de sistemas. Tudo não passava de linhas de pesquisa que os professores já tinham trabalhos e simplesmente exigiam dos alunas uma nova redação daquilo que já estava sendo feito. Resolvi me motivar, por mais que mais difícil de fazer um projeto com um orientador que não conhecia o tema e aceitou o meu tema.

Claro, nem todos tem um laboratório disponível para fazer um controlador de velocidade, mandar fazer placas fora, comprar processadores, comprar plataformas de programação, e fazer um teste num gerador maior que um caminhão... mas existem temas que podem ser trabalhados com pouco material e muita pesquisa e simulação que valem a pena ser explorados.

Escolher o Tema

A escolha do tema não precisa ser apenas com base no que o orientar ou aquele professor que olhou para você como um potencial trabalhador solidário para empreitada acadêmica dele.

Muitas vezes nos envolvemos em projetos que o professor leva para universidade com base na linha de pesquisa que ele já tinha em mente desde o doutorado e que não é nem a expectativa dos alunos nem a da própria universidade ou curso. E como já estamos envolvidos acabamos por seguir naquela linha.

Quando eu fiz iniciação científica no CEFET-RJ, ainda no curso técnico, utilizamos redes neurais para reconhecimento de harmônicos em redes elétricas, de fato, nunca mais utilizei aquilo... e era exatamente uma linha de pesquisa que o professor julgou pertinente, mas, redes neurais para alunos de técnico é bem avançado mesmo...

Outra coisa que eu fiz sem pé nem cabeça foi a Iniciação Cientifica em biomatemática, pasmem, no CEFET-RJ, uma faculdade de engenharia pura, tem um grupo de pesquisa em biomatemática... Acabei por me envolver nisso, queria uma bolsa minha gente, também sou filho de Deus. Isso me rendeu dois prêmios de Iniciação Cientifica do CEFET-RJ mas não consegui aproveitar aquilo para muita coisa.

Hoje eu tenho noção que poderia ter proposto para os professores algum tema próximo ou parecido relacionado ao que estava fazendo, um tema até mesmo mais prático.

Escolha o orientador mais flexível

O mais flexível não é o mais fácil! O mais flexível é que permite você ter liberdade de se auto-gerenciar e apresentar seus próprios resultados e conclusões, isso permite que mesmo que ele não goste muito do tema assuma o seu trabalho e algumas vezes até um co-orientador externo que ele não conheça bem.

Você não precisa mais de uma babá, terá que traçar suas próprias metas e entregas e desenvolver um trabalho mais individual, mas garanto que vale a pena, você poderá depois disso falar com voz de trabalho seu e as pessoas vão te respeitar pelo seu tema e por aquilo que você atingiu.

Quando estava sendo entrevistado, e perguntaram detalhes do projeto, e como eu tinha feito praticamente tudo sabia todos os detalhes e como foram feitos isso chamou a atenção deles porque eu tinha feito mesmo o projeto e sabia coisas sobre controle de velocidade que não são apresentadas pela universidades em cursos normais. Mesmo no mestrado, se alguém perguntasse para os especialistas em geradores a preocupação deles é com o regime funcional mas existe uma série de periféricos e condições de partida e parada que devem ser avaliadas que são ignoradas por livros e professores.

Não faça em grupo

Eu sei que todos os cursos hoje em dia oferecem a possibilita de se fazer o projeto em grupo de 2 ou 3 indivíduos. Isso tem pontos bons e ruins foi relatar alguns deles para que você faça o seu próprio julgamento.

Em grupo, você vai poder fazer um trabalho maior, quando os indivíduos tem uma boa interação esse resultado pode ser espetacular e não sobrecarregar ninguém, ainda mais no final do curso quando todos estão fazendo aquelas matérias que sobraram e querem se formar, a final a cada 6 meses para se formar você perde um carro que você poderia comprar (R$ 6.000 x 6 = R$ 36.000,00).

Outro ponto bom do trabalho em grupo e que você pode ajustar o que você acha mais interessante de fazer e se você não trabalhou ainda em equipes de engenharia você vai ver o que é "trabalhar com um engenheiro". Engenheiro tem ego, vontade, orgulho e vaidade que tanto você como seus amigos vão ficar essa sementinha do mau dentro de si.

Fazer sozinho dá mais trabalho sem sombra de dúvida, mas você começa a absorver aspectos importantes que certamente você ainda não  conseguiu dominar plenamente como disciplina, capacidade de rumar consigo mesmo para um lugar, escrever um texto completo com começo meio e fim e sintetizar as idéias, expor sozinho e pesquisar.

Fazendo um paralelo, quando você faz um trabalho sozinho você ganha algumas habilidades importantes de buscar pessoas e coisas sozinho, se você é mais introvertido, isso é bom para seu crescimento pessoal de buscar e falar e expor problemas que são só seus. Eu sou um pouco assim, as vezes não gosto de incomodar os outros com problemas  meus então vou deixando para o final e quando falo já no limite, ligar para alguém pode ser uma tortura se não foi uma pessoa que falo sempre, em fim, pense nisso.

Outro ponto bom de fazer solo é que você não depende de mais ninguém, não vai ter ninguém tentando ajustar o projeto ao tempo e interesses dele.

Escolha um tema factível

Quando eu fiz meu projeto final queria abraçar o mundo e fazer todos os controladores possíveis do gerador mas no final não passou de só um e olhe lá! O melhor é dimensionar para metade da sua intensão, porque ai você garante que vai fazer com dificuldade e vai dar certo.

Conclusão

Bom espero te ajudado um pouco a escolher melhor o seu tema, estes foram problemas que eu tive por falta de visão mesmo do que eu realmente queria e almeja e da minhas capacidades, naturalmente.

terça-feira, 9 de dezembro de 2014

Preocupações com Segurança - não quero queimar minha placa!

A um tempo atrás estava trabalhando com a Explorer 16Br (versão nacional da plataforma da microchip) e tive uma triste impressão da placa simplesmente parara de funcional de uma vez sem nenhum sinal de vida,  testes e teste e tensões normais de alimentação canais de programação chegando aos pinos lógicos e nada.
Foto da Mosaico

Não teve jeito nada vez levantar a placa outra vez, processadores queimados? Não! pasmem, estavam bons em perfeito estado, depois de comprar uma outra placa, desta vez importada da MICROCHIP consegui utiliza o processador, de fato nunca consegui saber ao certo o que estava errado.

A placa em si dá para fazer grandes coisas mas ela além de não ser 100% compatível com o Hardware original da MICROCHIP tem problemas sérios de roteamento que vazem com que ela seja facilmente "dignificável" com estática, pó e outras coisas mais.

A ideia desse artigo é mostrar algumas preocupações que podem deixar o seu projeto de eletrônica mais confiável e a acabar com aquele amadorismo total que faz com que uma coisa montada em casa nunca possa funcionar por mais de uma ano...

Não Toque!

Nunca toque, ou evite tocar nos CI's e partes integrantes como pernas de componentes, resistências e outras partes metálicas a não ser que seja necessário e indispensável.



A mão, mesmo que não apreça oxida as trilhas porque está engordurada e com umidade, geralmente, circuitos comerciais comprados com algum tipo de verniz mesmo no lugar soldados isso protege de oxidação as soldas mas quando você solda manualmente acontece que a proteção por cima sai e próprio ponto começa a oxidar e componente a conexão.

Use luvas! Isso pode ajudar ainda mais porque você não se suja e a placa não é tocada por você.

Outra coisa importante, quando você compra a solda note que os fios de solda mais grossos sempre surge uma casca preta/marrom sobre a solda. Isso nada mais é do fluxo passivo, dizem que é breu com um diluente qualquer (éter, álcool, gasolina).

Quando você fizer as suas placas mesmo que não for passar o verniz utilize uma camada de breu diluído com gasolina para proteger as trilhas, inclusive, as soldas depois de feitas com um pincel fino é bom colocar uma gota de breu para proteger da oxidação.

Todos os fabricantes se preocupam com a estática porque você não?

Quando você toca ainda tema parte do potencial estático, parece que não mas todos os fabricantes tem uma preocupação grande com a estática porque você não teria?


A fita anti estática pode até ser bem cara (~ R$ 20,00), mas não precisa de uma fita propriamente dita, você pode simplesmente se aterrar em um ponto qualquer perto do seu laboratório antes de tudo, quando eu não tinha aterramento fazia isso na janela mesmo e me mantinha em um potencial baixo quando entrava no laboratório para realizar qualquer coisa. Até mesmo em casa fazia isso, em casa eu tinha uma pulseira enrolada com um fio 0,3 mm ligado ao terra, não dava trabalho mas tenho certeza que consegui evitar de queimar muitos componentes.

Sabe aquela vez que você fez todo seu projeto de digital e quando chegou para mostrar ara o professor o fipli-flop queimou na protoboard, é pode ter sido estática! Geralmente quando transportamos de carro em dias muito secos o atrito do ar com o carro gera estática que carrega você a placa e tudo mais, quando você alimenta a placa no laboratório ela simplesmente se descarrega pelo terra ou pelo neutro do circuito...

Outra coisa que pode acontecer é você acordar com carga estática, o ar seco do ar-condicionado junto com o atrito seu com os lençóis da cama faz com que você fique carregado e acabe queimando uma porta logica, um processador ou um CI...

Hoje os processadores já possuem proteções internas, especialmente os da ATMEL e MICROCHIP são utilizados em processos industriais são bem robustos e não queimam com tanta facilidade mas comovem não abusar.

Não use bancadas metálicas!

Assim como você deve se aterrar nunca manipule placas sobre mesas metálicas, sempre há o risco de fazer um curto-circuito entre trilhas usando a bancada de ferro.

para manter a placa afastada utilize pés de plastico que nem os que vem com o netduino isso ajuda a não tocar aplaca na mesa que mesmo sendo de madeira pode conter restos de solda e danificar a placa aplicando curtos entre os terminais

Não use violência nas placas

As vezes você quer limar a placa ou fazer um encaixe para qualquer dispositivo, ou até mesmo um furo e sempre tem uma mesa com uma morsa para prender a placa e tal. Mas evite fazer isso a qualquer custo, limar a placa, furar qualquer atividade mecânica que gere rebarbas e esforços pode danificar as trilhas, se você fez a placa você mesmo, com acido a tendência das trilhas saírem é grande e possível que você tenha problemas depois.


As placas mesmo grandes são sensíveis e flexionam, o fenolite em especial é bem frágil. Se a placa for para ficar ao tempo dentro de algum equipamento utilize fibra de vidro porque é bem mais resistente, inclusive de for fixar um motor ou alguma coisa mecânica nela.

Solde bem suas placas

Um das coisas que mais são problemas são suas próprias soldas, o que o pessoal chama de solda fria. Você até consegue unir mecanicamente o componente na placa mas ele não não dá contato elétrico, ou dá contato quando você acaba de fazer e 2 dias depois passa a dar problema. Isso acontece muitas vezes porque durante o processo de soldagem a temperatura não atingiu o valor suficiente para fundir o estanho ou porque a superficial estava oxidada de mais para soldar.

Isso é quase uma auto sabotagem, eu particularmente recomendo a qualquer um treinar solda um pouco antes e comprar um bom ferro de solda, eu tenho uma estação de solda em casa mas se você não quer ter uma pelo menos um ferro ajustável você precisa ter.

Primeiro sempre limpe a superfície onde você vai soldar, as placas comerciais já vem protegidas com uma solução parecida com o breu com gasolina, se a sua placa não estiver limpe com alguma lixa, evite usar palha de aço (bombril) porque ele solta pedaços pequenos que podem ficar e oxidar sobre o seu circuito.

Segundo, a solda vai entre o que você quer juntar! Evite colocar a solda no ferro de solda, você deve sempre posicionar o ferro de solda encostando entre as partes que você quer soldar e deixar o ponto onde as dua se unem livre para solda. Quando você encostar a solda e as superfícies estiverem limpas a solva vai derreter e ficar limpa e espelhada

Com isso você vai sempre fazer uma boa solda. Se caso você notar soldas muito foscas com muita solda em cima, bolinhas de solda, estas certamente vão se tornar um ponto de falha e que vai te dar dor de cabeça depois.

User um aterramento de verdade

As vezes é impossível, trabalhei em um laboratório em um prédio antigo no centro do rio, na época tivemos a necessidade de fazer uma terramento próprio.


Quando você fizer o seu aterramento com uma haste simples você pode teta-lo colocando uma lampada, se ela acender significa que está bom e ele é capaz de drenar uma boa corrente e garantir a proteção.

Conclusão 

Fazer um trabalho com qualidade sempre aumenta suas chances de sucesso no seu projeto, mesmo que seja algo simples. Sempre tento dividir os projetos em testes e "projetos" os testes são coisas que eu pretendo desmontar depois e os projetos idéias que penso em concluir e deixa funcionando, uma dos primeiros projetos que eu fiz foi um medidor de bateria para o carro, ele simplesmente registrava o menor valor de tensão durante a partida do motor e segurava o valor dando o diagnóstico foi bem simples mas como tive cuidado de fazer o circuito envernizar e soldar direito até hoje ele funciona bem.

segunda-feira, 8 de dezembro de 2014

Experiências com EL CID (Electromagnetic Core Imperfection Detection) - Parte 1

Esse post é um pouco mais fora do campo do Netduino em si, pensei até em mudar o blog de nome porque a placa em si perdeu um pouco de foco no meu dia-a-dia a coisa agora é usa-la como plataforma para meus testes, assim, comecei pelo teste de EL CID (Electromagnetic Core Imperfection Detection).

O teste EL CID é um teste para núcleos laminados de motores, geradores e máquinas elétricas que envolvam esse tipo de material laminado. O teste tem como finalidade identificar pontos entre as chapas do estador que apresentem curto-circuito fornecendo um ponto quente que em funcionamento nominal pode comprometer a integridade da máquina como um todo.

O teste EL CID é original do laboratório inglês Central Electricity Research Laboratories, e foi aprimorado pela empresa ADWEL International para se tornar um equipamento portátil e utilizável para esse tipo de finalidade.

Neste artigo farei uma breve introdução sobre a técnica de medição e suas implicações práticas.

O que é

Tradicionalmente o teste de núcleos laminados é feito fazendo-se um enrolamento em torno do núcleo de tal forma que a corrente circulante faça surgir no núcleo magnético um valor equivalente a saturação magnética de todas as regiões. Quando o campo magnético é forçado a circular em áreas onde o núcleo apresenta problemas de isolamento entre chapas laminadas a corrente de fucalt aparece e começa a circular na região provocando aquecimento. este aquecimento, depois de estabelecido, pode ser visualizado através de câmeras térmicas.


O problema deste teste está em atingir a densidade de campo magnética especificada para o núcleo magnético do equipamento, muitas vezes é necessário uma potência elevada e durante um tempo suficientemente grande, muitas vezes esse teste demora dias e pode consumir uma quantidade alta de energia. Em função disso, buscou-se um teste alternativo em que fosse possível fazer a análise do núcleo magnético da máquina durante o período de fabricação sem a necessidade de tempo, energia e a plataforma de potência, este teste alternativo foi chamado de EL CID (Electromagnetic Core Imperfection Detection)

O EL CID foi desenvolvido como uma alternativa ao teste em anel nesta verificação de pontos quentes em núcleos de motores e geradores. A técnica está na medição do fluxo magnético em toda região laminada detectando as distorções no fluxo magnético provenientes de problemas no isolamento entre as chapas de núcleos laminados. Um problema apontado pelo Cigré, por exemplo, é a necessidade de uma equipe maior para realizar o teste e a necessidade de se testar ponto a ponto o núcleo o que no teste de indução em anel já é feito e homogenizado.

Procedimento do Teste

O teste é realizando fazendo circular um fluxo magnético dentro do núcleo em formato de anel, este fluxo originado de uma bobina pode ser construído de espiras de fio  2,5 mm² em torno de 4 a 7 voltas em torno do núcleo abraçando o anel interno e atravessando a parte de fora conforme mostra a figura retirada da brochura do Cigré.


A ideia da construção da bobina de excitação é permitir que algo em torno de 5% do fluxo magnético nominal esteja atravessando completamente o núcleo em anel, quando o equipamento formado por uma bobina rogowski  em semi metade é colocada entre dois dentes e feita de deslocar regularmente entre as placas do estator é possível ver uma linha contante de indução na bobina e uma tensão combinada a uma corrente alternada de amplitude de  +/-100 mA capaz de ser filtrada e identificar regularidade do campo.

Como a bobina de excitação abraça todo o estado em anel o fluxo induzido em todas as barras ao longo do deslocamento deve ser constante e livre de variações. As variações acusam imperfeições construtivas que são nada mais do que problemas de isolamento e correntes parasitas.

A medição é feita como apresentado na figura abaixo, um núcleo magnético fechando o circuito magnético entre dois dentes do estador se deslocando regularmente pela fresta. 


O Teste EL CID se mostrou suficientemente eficiente para testes de estadores de máquinas por isso resolvi fazer alguns testes em máquinas menores para verificar exatamente o que se está sendo dito sobre o teste. Naturalmente existem equipamentos realmente caros no mercado para realização desse teste mas uma simples bobina limitada por uma lampada é capaz de gerar fluxo suficiente em um estador de 2cv para realizar a análise em questão.

Exitem ainda alguns pontos abertos em relação aos testes realizados com o EL CID. O primeiro deles diz respeito da amplitude do sinal em relação a falta, quanto maior a falta maior e o sinal assim como o teste convencional, mas, segundo o Cigré, o que é visto mesmo são as falhas maiores na superfície do material laminado e não no interior do núcleo. No teste distorções localizadas podem indicar falhas na superfície do material, maiores ou menores mas sempre indicando um fluxo magnético maior que o esperado. 

Regiões do núcleo com problema de fluxo mais severo podem ser vistas em regiões maiores e com valor efetivo medido de fluxo menor do que o esperado para leitura do Chattock coil. Existem varias discussões que podem ser feitas então vamos ver algumas experiências antes de chegar nas conclusões do Cigré.

Experiências

Bom como todo amador quero fazer os testes. A minha ideia inicial é utilizar um núcleo de estado que tenho disponível de um ar-condicionado que não foi feio enrolamento.

A indução pode ser feita através de um bobina de fio esmaltado enrolado diretamente sobre uma ranhura do estador, variar a quantidade de espiras para variar a indução. A limitação da corrente pode ser feita com um esquema de lampadas em série/paralelo.

O  Chattock coil pode ser feito com material material laminado em "U" de tal forma que feche as ranhuras, bem pequeno com algumas espiras (vamos ver um calculo simples para enlace) o campo pode ser fechado com um resistor de 10 ~ 100 Ohms, o valor deve ser ajustado para ficar com a circulação de 100 mA como dito. e a medição da tensão em cima do próprio resistor dá uma escala de tensão corrente de 100 ~ 10 conforme o resistor escolhido.

Referências

Esse artigo foi baseado na brochura do Cigré 257, Outubro de 2004, EL CID ( ELECTROMAGNETIC - CORE IMPERFECTION DETECTOR ) TESTING OF LARGE STEAM-TURBINE-DRIVEN GENERATORS, Grupo de Trabalho A1.01.06

domingo, 24 de agosto de 2014

Uma Fábrica Caseira de Cerveja usando o Netduino!

Esses dias, mesmo agora fora completamente do qualquer desenvolvimento gosto de pesquisar e saber sobre o que estão fazendo por ai com as placas de desenvolvimento. É incrível ver a enorme possibilidade de coisas que podem ser feitas utilizando o Netduino.



Desta vez o que chamou minha atenção foi uma incrível fabrica de cerveja artesanal utilizando o Nettuino, veja aqui o post original.


O video mostra a placa em ação! Controlando todo o processo, note que ele programou através do LCD as configurações de tal forma que não é necessário ficar reprogramando a placa para ver a modificação dos tempos e aplicações do processo.

O autor do projeto é o Sr. Garrett, no Blog ele dá mais detalhes da formulação da cerveja e como ele conseguiu montar esse incrível equipamento.

quinta-feira, 24 de abril de 2014

Sistema de segurança doméstica com Netduino Plus


Esses dias andei dando uma olhada nos projetos existentes do Netudino e achei um projeto muito interessante de um sistema de segurança doméstica feito com Netduino por Mike Linnen! Fantásico! Neste vídeo ele mostra como ele fez o sistema utilizando o Windows Azure e e 11 Netduino Plus conectados via rede.


No vídeo ele mostra a função de cada placa de Netduino Plus e a sua aplicação na solução global de segurança, ele dedica placas para aplicações específicas como botões de um painel e sinalização.

Link para página do Projeto: cloudhomesecurity


É fantástico! Estou realmente impressionado com o profissionalismo da solução, para a plicação ele utilizou a biblioteca MQTT que na verdade é um cliente .Net (. Net Framework,. Net Compact Framework e. Net Micro Framework) para  Internet of Things e comunicação M2M.

MQTT, abreviação de "Message Queue Telemetry Transport", é um protocolo de mensagens de peso leve que permite que dispositivos embarcados com recursos limitados para realizar a comunicação assíncrona em uma rede restrita.

MQTT protocolo baseia-se na publicação / assinatura padrão para que um cliente pode se inscrever em um ou mais tópicos e receber mensagens de outros clientes que publicam sobre estes temas.

Esta amostra é uma biblioteca contém um cliente MQTT que você pode usar para se conectar a qualquer corretor MQTT. É desenvolvido em linguagem C # e funciona na plataforma do Netduino veja: https://m2mqtt.codeplex.com/.

Estou vendo as popções do que posso fazer com o Netduino esse ano, essa solução me pareceu genial, estive pensando esses dias em projetar algumas placas para acoplar no Netduino e transmitir mais possibilidades, uma placa com Relés e I/O com mais potência multiplicadas, talvez um teclado. O grande problema e a viabilização disso, fabricar uma placa dessas requer minimamente umas 10 unidades de forma que fique viável assim eu acho interessante fazer uma para mim e com a divulgação no blog talvez vocês leitores se interessem e acabem comprando algumas.

domingo, 20 de abril de 2014

Alocação de Memória: Struct vs Memory Allocation


Esse post surgiu de uma dúvida que está no Fórum do Netduino: Veja

No fórum, um membro Nofaca fez uma pergunta sobre alocação de memória dizendo que sempre ocorre um problema de OutOfMemoryException quando ele tenta alocar memória para arrays de estruturas.

Fato é que .NETMF tem uma forma própria de alocar memória, as vezes queremos que .NETMF seja igual ao .NET convencional mas não é bem assim, existem algumas limitações relacionadas com a natureza do processador, em outras palavras o .NETMF faz uma parte de um "tipo RTOS" - MSDOS transformando para alto nível o que está em muito baixo nível.

Continuando, ele colocou o seguinte exemplo de código:

 [Serializable, StructLayout(LayoutKind.Sequential)]  
 struct SColor  
 {  
      public byte R;  
      public byte G;  
      public byte B;  
      public byte Alpha;  
 }  

Fato é que ele pretende criar uma estrutura simples que armazena informações de cor. SColor seria uma estrutura para armazenamento de informações de cor RGB e intensidade (Alpha). Segundo o que ele disse não está conseguindo alocar a memória para essa estrutura. Eu tentei confirmar mas funciona bem com a classe de inteiro e com a estrutura SColor!

 Debug.Print("Memory free: " + Debug.GC(true).ToString());  
 int[] _buffer = new int[128 * 64];  

 Debug.Print("Memory free: " + Debug.GC(true).ToString());  
 SColor[] _colors = new SColor[128 * 64];  

A saída do debug dele foi:

 Memory free: 96948  
 Failed allocation for 8194 blocks, 98328 bytes  
 Failed allocation for 8194 blocks, 98328 bytes  

Fato é que existe pouca memória no Netduino isso faz com que facilmente o programa saia do espeço de memória utilizável.

Conforme o Chris Walker respondeu o NETMF teve alguma sobrecarga de memória adicional para cada variável criada. Dessa forma a memória extra utilizada foi mapeada para armazenanda a estrutura e as utilizações da estruturam, ou seja, deu overflow de memória... Quando em um código solto isso não afeta em nada, entenda-se um código solto como um código específico e pequeno.

A alternativa que o Chris Walker deu para esses casos é otimizar é compilando a estruturas dentro do próprio .NETMF compilando-o novamente! Solução Supersaiadin !!!

Como uma solução alternativa também seria trabalhar com array's simples de 4bytes identificados como ocorre no C. Isso reduz a necessidade de uma estrutura exclusiva para a aplicação em questão e reduz com isso a memória de código/uso utiliza para a estrutura. Para não ficar dependente do desmonte seria possível criar estruturas estilo #defines.

Achei interessante a dúvida porque as vezes temos muitos problemas com locação de memória, quem não trabalhou com a conversão de ponto fixo para ponto flutuante não tem ideia de como era difícil... saber a ordem de grandeza de tudo, estudar o erro e a imprecisão em função de onde se colocava a vígula, Q10, Q15, Q18, etc... As vezes isso que define a otimização de uma aplicação, não trata-se de um simples preciosismo mas sim de um recurso para utilização da ferramenta - Netduino - em sua plenitude.

segunda-feira, 14 de abril de 2014

Código alternativo para LCD 16x2 - μLiquidCrystal

Retomando os trabalhos com o Netduino vamos a algo prático e simples que se trata de escrever em um LCD 16x2. A maior parte dos artigos ensina como fazer isso com IC que converte de paralelo para serial isso porque muitas vezes o LCD não fica exatamente perto do dispositivo e mais ainda mais fios complicam ainda mais a criação do protótipo.


Fato é que o barramento paralelo utilizado pelo LCD 16x2 não é necessário para escrever os careceteres básicos, coisa de 98% do que se pretende escrever, só são necessárias 7 vias conforme mostrado por Jeroen em seu blog.

A maioria dos displays alfanuméricos estão baseados no controlador HD44780 por uma questão apenas de padronização para aplicações "plug-and-play". Dentro dessa interface paralela boa parte dos 8-bit são referenciados a controle de fluxo de dados, o barramento paralelo de fato são apenas 4-bits que levados a I/O vamos utilizar só 4! Para muitos metódicos isso seria muito e podemos dizer que um barramento serial só de ida utilizaria uma unica I/O, mas convenhamos, não temos Hardware adicional algum o que vale muito a pena.

Como eu me mudei estou sem a minha banca completa com todas as ferramentas que eu tinha antes e muitos dos meus componentes, fazer uma placa é quase impraticável ainda, foi desse ponto que decidi procurar uma maneira mais fácil de escrever as coisas no LCD e encontrei esse artigo no blog do Jeroen que fala sobre a uLiquidCristal uma implementação completa para comunicação do microframework com o LCD's.

Como temos 90% das vezes queremos uma coisa "easy-to-use" nada de escovação de bit's.... Então vamos a aplicação simples e clara.

Meu primeiro passo foi ir atrás da informação sobre o display que eu tinha disponível. Não foi difícil, uima rápida busca no Google consegui encontrar o Datasheet do dito cujo que me informava a pinagem correta.

O projeto não tem um Release para download no Codeplex então, você vai ter que baixar o código fonte e compila-lo, o que não é nenhum problema. Uma vez compilado basta você ir na sua solução e adicionar a *.dll no "References" do seu projeto.


public class Program
{
    public static void Main()
    {
        // create the transfer provider, use direct GPIO provider
        // Initialize the library with the numbers of the interface pins
        // Use wiring shown here http://arduino.cc/en/uploads/Tutorial/lcd_schem.png
        var lcdProvider = new GpioLcdTransferProvider(Pins.GPIO_PIN_D12,    // RS
                                                        Pins.GPIO_PIN_D11,    // ENABLE
                                                        Pins.GPIO_PIN_D5,     // D4
                                                        Pins.GPIO_PIN_D4,     // D5
                                                        Pins.GPIO_PIN_D3,     // D6
                                                        Pins.GPIO_PIN_D2);    // D7
 
        // create the LCD interface
        var lcd = new Lcd(lcdProvider);
 
        // set up the LCD's number of columns and rows:
        lcd.Begin(20, 2);
 
        // print a message to the LCD.
        lcd.Write("Hello world!");
 
        while (true)
        {
            // set the cursor to the first column on the second line
            lcd.SetCursorPosition(0, 1);
 
            // print the number of milliseconds since reset:
            lcd.Write((Utility.GetMachineTime().Ticks / 10000).ToString());
 
            Thread.Sleep(100);
        }
    }
}


Espero mais uma vez ter ajudado, estou voltando pouco a pouco a minhas atividades normais, vou tentar terminar algumas coisas como o medidor de nível de caixa d'água e o sensor de temperatura para depois partir para novos projetos.