Coder Social home page Coder Social logo

zenitheesc / drivers Goto Github PK

View Code? Open in Web Editor NEW
10.0 3.0 7.0 886 KB

Centralized repository for the low level drivers developed by Zenith Aerospace

License: MIT License

C 100.00%
arduino bmp280 c canbus driver flash ina219 ina3221 microcontroller mpu6050

drivers's People

Contributors

carloscraveiro avatar gustavokanaiama avatar leocelente avatar mairacanal avatar marcusmoraisepifane avatar murilotrevisan avatar thiagovicentini avatar williamorl avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

drivers's Issues

Biblioteca de Altitude

Biblioteca de Altitude

Resumo

Criar uma biblioteca contendo pelo menos 1 método de conversão entre pressão e altitude.

Justificativa

Um dos dados mais importantes da sonda é sua altitude. Geralmente temos múltiplos sensores de pressão e temperatura e indiretamente calculamos a altitude. Existem várias maneiras de extrair a informação da altitude, desde o calculo normal, passando por média móvel e filtros FIR até Filtros de Kalman e observadores em geral. Essa biblioteca então deverá conter os métodos disponíveis, começando pela formula padrão.

Especificação

  • Um typedef para as leituras, contendo a medida de pressão e temperatura.
  • Um typedef para o estado atual, representando a altitude estimada e qualquer outro estado inter-medida ou configuração.
  • Uma função para adicionar uma medida.
  • Opcional: Uma função para adicionar N medidas (média móvel)
  • Uma função de inicialização com argumentos associados as configurações
  • Uma função para extrair a altitude estimada mais recente, com validação e retornando erros.

Outros detalhes

  • Não é recomendado uso de double
  • Formate seu código
  • Documente elementos não óbvios do seu código
  • Documente as unidades utilizadas
  • Teste seu código com exemplos incluindo chamados corner cases

Referências

NASA Earth Atmosphere Model - Metric Units

STM32: DS2786 Fuel Gauge

Driver e Documentação do Fuel Gauge DS2786

Sensor usado para monitorar a quantidade de carga presente num conjunto de baterias

Protocolo: I2C
Datasheet: PDF

Documentar

  • Funcionamento básico ( Qual o jeito mais simples de usar o sensor )
  • Funcionalidades adicionais ( Quais são as outras funcionalidades/configurações interessantes )
  • Qual a sequencia de comunicação para o uso básico ( Quais registradores )

Biblioteca

  • Fazer uma struct ds2786_tpara conter o i2c utilizado e configurações
    • Se existem muitas configurações, separar em uma outra struct ds2786_config_t
  • Fazer uma função ds2786_init que inicialize um ds2786_t
  • Fazer uma função para pegar o valor de interesse em bytes "brutos"
  • Fazer uma função para transformar os bytes brutos em valores uteis
  • Lembrar de colocar as constantes, endereço I2C, valores de configuração etc no .h como #define DS2786_<NOME>

Validação

Vish, como não dá pra simular, nem dá para comprar módulos baratos, o melhor jeito é com o 3LT, mas como ainda não está pronto e idealmente são necessárias duas pessoas com conhecimento do funcionamento do sensor (uma para escrever a biblioteca e outra para escrever o mock) é melhor esperar e reavaliar meios de testar futuramente.

Platform Abstraction Layer

Platform.h

Uma interface padronizada que seja capaz de abstrair as funções que são específicas de cada plataforma de hardware:

  • - STM32 (F1,F4,L4,G0 etc...)
  • - Arduino (avr)
  • - ESP32 (esp-idf)

Idealmente cada driver deve precisar apenas #include "platform.h" e a plataforma deve ser automaticamente selecionada. No caso do STM32 que possui HALs que variam por família, ela também deve ser detectada.

A especificação da interface deve estar disponível para novas plataformas serem adicionadas facilmente.

Driver para Barômetro

Aplicação: Barômetro

O responsável por esse issue deve:

  • Pesquisar sobre essa aplicação
    • Em qual contexto do projeto será utilizada?
    • Qual geralmente é o propósito dessa aplicação?
    • Existe algum dispositivo comum?
  • Pesquisar sobre o dispositivo atual
    • Por que estamos usando ele?
    • Tem algo que torna ele difícil de trabalhar?
    • Onde ele já foi utilizado?
  • Implementar uma biblioteca do dispositivo.
    • Qual informação está associada ao dispositivo?
    • Como se espera que ele seja utilizado?
    • Sua implementação compila sem Warnings?
  • Documentar a Implementação
    • O que cada função faz?
    • O que cada struct e seus campos significam?
    • Quais características do dispositivo afetam o código?
    • Quais partes do datasheet um usuário do driver deve ficar atento?
    • Existe alguma outra documentação externa de interesse para o usuário?

Observações

Tarefas

  • Pesquisa e Leitura do Datasheet
  • Selecionar Features
  • Rascunho da Interface
  • Implementação
  • Documentação
  • Revisão
  • Teste
  • Finalização

Driver para Rádio

Aplicação: Rádio

O responsável por esse issue deve:

  • Pesquisar sobre essa aplicação
    • Em qual contexto do projeto será utilizada?
    • Qual geralmente é o propósito dessa aplicação?
    • Existe algum dispositivo comum?
  • Pesquisar sobre o dispositivo atual
    • Por que estamos usando ele?
    • Tem algo que torna ele difícil de trabalhar?
    • Onde ele já foi utilizado?
  • Implementar uma biblioteca do dispositivo.
    • Qual informação está associada ao dispositivo?
    • Como se espera que ele seja utilizado?
    • Sua implementação compila sem Warnings?
  • Documentar a Implementação
    • O que cada função faz?
    • O que cada struct e seus campos significam?
    • Quais características do dispositivo afetam o código?
    • Quais partes do datasheet um usuário do driver deve ficar atento?
    • Existe alguma outra documentação externa de interesse para o usuário?

Observações

O driver deve ser capaz de enviar e receber pacotes LoRa e FSK com com tamanhos variando de 27 até 61 bytes.
Também deve ser possível selecionar uma "rede" independente, possivelmente utilizando o parâmetro de syncword, de tal forma que os receptores de uma rede automaticamente descartem pacotes de outra rede.

Tarefas

  • Pesquisa e Leitura do Datasheet
  • Selecionar Features
  • Rascunho da Interface
  • Implementação
  • Documentação
  • Revisão
  • Teste
  • Finalização

Biblioteca de Termistores

Biblioteca de Termistores

Criar uma biblioteca genérica de termistores para que outros drivers possam utilizar. A biblioteca não deve depender da forma que as medidas foram adquiridas, seja diretamente via ADC, ou um amplificador/conversor externo. Também não deve depender da plataforma.

Construção de Bibliotecas

Primeiro deve ser determinado o estado da biblioteca, ou seja, qual informação é de escopo global, versus local de uma função. Caso haja um estado global, não é recomendado utilizar variáveis globais. É melhor criar uma struct com esse estado e ela pode ser passada em cada chamada de função. Isso evita problemas caso tenhamos mais de um termistor de tipo diferente.

Uma vez sabendo qual informação pertence a qual escopo, já dá pra identificar as funções, geralmente acaba sendo:

  • init
  • measure
  • funções auxiliares

Lembrando que toda função da biblioteca deve começar com o nome dela, sugestão: thermistor_*.
Como estamos lidando com medidas físicas, é importante deixar explicito as unidades.
Idealmente, toda constante não óbvia deve ter um nome com um #define no .h da biblioteca.
Como estamos programando para um microcontrolador, o tamanho em memória das variáveis deve ser ponderado.
É recomendado declarar variáveis no momento que são necessárias, não no inicio da função.

  • Definir interface comum; sugestão: a resistência medida
  • Definir a struct de estado global, caso haja
  • Definir as funções de interface
  • Construir a implementação
  • Documentação
  • Revisão
  • Teste

Driver para IMU

Aplicação: IMU

O responsável por esse issue deve:

  • Pesquisar sobre essa aplicação
    • Em qual contexto do projeto será utilizada?
    • Qual geralmente é o propósito dessa aplicação?
    • Existe algum dispositivo comum?
  • Pesquisar sobre o dispositivo atual
    • Por que estamos usando ele?
    • Tem algo que torna ele difícil de trabalhar?
    • Onde ele já foi utilizado?
  • Implementar uma biblioteca do dispositivo.
    • Qual informação está associada ao dispositivo?
    • Como se espera que ele seja utilizado?
    • Sua implementação compila sem Warnings?
  • Documentar a Implementação
    • O que cada função faz?
    • O que cada struct e seus campos significam?
    • Quais características do dispositivo afetam o código?
    • Quais partes do datasheet um usuário do driver deve ficar atento?
    • Existe alguma outra documentação externa de interesse para o usuário?

Observações

Aplicar filtros passa baixa do chip, focando em frequência de 10Hz

Tarefas

  • Pesquisa e Leitura do Datasheet
  • Selecionar Features
  • Rascunho da Interface
  • Implementação
  • Documentação
  • Revisão
  • Teste
  • Finalização

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.