A diferença entre projetos de software e hardware

Se você acha que sua experiência com software permitirá que você crie um projeto de hardware facilmente, talvez seja um pouco ambicioso demais. É muito diferente do software.

Eu não sabia nada sobre jardinagem. Eu não sabia nada sobre hardware. Acho que é por isso que decidi trabalhar em um novo projeto de hobby, onde eu tinha que aprender sobre os dois. Comecei a cultivar uma planta de mirtilo, 100% automatizada usando um Raspberry Pi.

 

Ao lado do meu trabalho principal, cientista de dados, sempre trabalho em alguns projetos de hobby. Eles não ganham muito dinheiro (nem fazem sentido), mas são divertidos e eu os uso para expandir meu conhecimento em áreas sobre as quais não conheço muito. Eu poderia continuar falando sobre por que trabalhar em projetos paralelos é ótimo .

 

Mas dada toda a minha experiência com projetos paralelos, devo dizer que posso ter sido um pouco ambicioso demais quando pensei que construiria um projeto de hardware facilmente. Acontece que, em muitos aspectos, é muito diferente do software. Eu aprendi isso da pior maneira.

 

Aqui estão minhas lições mais importantes!

 

A beleza de um projeto de hardware: você pode tocar no produto!

 

Eu já havia trabalhado em vários projetos de software hobby. Mas para mim, um projeto de hardware foi emocionante por dois motivos:

 

Primeiro, recentemente me interessei em cultivar minha própria comida. Saber que posso produzir pelo menos uma pequena parte do que vou comer é muito gratificante. No entanto, sou muito ruim com coisas repetitivas e sempre tendo a esquecer de regar minhas plantas. Então, eu tinha duas opções: configurar toneladas de lembretes de calendário ou agir como um engenheiro e automatizar todo o processo. Obviamente, eu escolhi este último.

 

Em segundo lugar, sou um cientista de dados . Eu escrevo código, crio modelos, executo scripts, mas tudo isso existe apenas no meu computador. Às vezes, eles só existem na nuvem, que é outra camada removida de mim. Eu queria criar algo que pudesse tocar !

 

Portanto, um projeto de hardware parecia razoável.

 

O plano (era para ser fácil ...)

Na minha cabeça, o plano era simples:

 

Pegue um pequeno computador (por exemplo, um Raspberry PI).

Pegue um sensor de umidade do solo e um sensor de luz que se conecta a este computador via wi-fi e envia pontos de dados continuamente sobre minha planta .

Pegue uma bomba d'água e uma lâmpada de cultivo que são ativadas via wi-fi quando os dados indicam que a planta precisa de algo.

Eu imagino que todo mundo que começa um projeto como este viria com um plano simples semelhante. Como uma pessoa de software, eu já vi o fluxo de dados, as simples instruções `if`, as automações no crontab. Na minha cabeça, todo o projeto foi feito em uma semana.

 

Eu fui tão ingênuo - e tão errado ...

 

Introdução: o hardware está lento!

 

Há uma boa chance de que, como eu, você tenha escrito código, mas nunca tenha trabalhado com hardware real. 

 

Sempre que quiser iniciar um novo projeto de software, posso começar rapidamente:

 

Eu escolho uma estrutura, ambiente, solução, etc ...

Eu implanto o servidor (faço download e instalo o sistema operacional e outros aplicativos, etc.)

Eu espero até que a instalação seja concluída. (~ 10-30 minutos)

Eu começo a construir o projeto.

É um pouco simplificado, mas você entendeu. Pode-se passar da fase de ideia para a fase de execução em aproximadamente 10 minutos (ou menos).

 

A primeira coisa que tive que aprender é que esse não é o caso de um projeto de hardware. Mais como:

 

Você escolhe sua estrutura, ambiente, hardware preferido, etc ...

Você encomenda o hardware.

Você espera pela sua entrega. (~ 1 semana)

Você instala tudo. (~ 10-30 minutos)

Você começa a construir o projeto.

 

Essa etapa adicional (aguardar a entrega) pode não parecer grande coisa. Isto é. Principalmente quando você percebe que se esqueceu de pedir alguma coisa. Ou uma peça de hardware não é compatível com outra. Ou que a substituição não está disponível em seu país.

 

Essa semana pode facilmente crescer para um mês ou mais. E esperar pode matar projetos de passatempo.

 

Mas dividir as tarefas também ajuda aqui. 

 

Para meu jardineiro automatizado, comecei pequeno - em vez de pedir tudo que precisava, me concentrei em construir apenas uma pequena parte do projeto primeiro: o sensor de umidade do solo. Recebi minha primeira pilha de teste (um Raspberry Pi 4, um cartão SD, um sensor de umidade Adafruit STEMMA e alguns cabos de ligação) em poucos dias. (Na verdade, encomendei o tipo errado de cabos jumper. Isso acrescentou alguns dias. Em cerca de uma semana, finalmente comecei.)

 

Assim que o sensor de umidade funcionou, comecei a adicionar todas as outras partes. Eu sempre pedia o novo hardware de que precisava - ou as substituições quando descobri que eu pedia as peças erradas. Às vezes, encomendei as peças certas, mas cometi um erro conceitual. (por exemplo, tentei construir uma torneira mecânica em vez de usar uma bomba de água simples. Deus sabe por quê.) Isso é mais ordem - e mais espera.

 

Resumindo: depois de todos os testes e construção, demorou não menos que três meses para chegar à minha pilha final do autogardener completo. Novamente: a construção de hardware é lenta.

 

Depurar hardware também é difícil

 

Não se trata apenas de construir hardware mais lento do que construir software. Também é significativamente mais difícil depurá-lo!

 

Como mencionei, meu primeiro passo foi construir a peça do sensor de umidade. Assim que comecei a trabalhar e consegui meus primeiros dados de umidade na tela, fiquei muito animado.

 

Mas no dia seguinte, simplesmente parou de funcionar.

 

Levei três horas (!) Para descobrir o problema. Eu investiguei em um nível de software. Nada. Reiniciei o Raspberry Pi várias vezes. Nada. Limpei o sensor de umidade. Então eu o desconectei da placa e conectei novamente. Nada.

 

Eu estava travado. O principal problema era que meu processo de depuração - que aprendi para codificação - também não me ajudou. Quando escrevo código, apenas executo o modo de depuração e vejo as mensagens de erro. Quando isso não ajuda, executo novamente meu código linha por linha. Mais cedo ou mais tarde, encontro o problema.

 

Mas desta vez recebi uma mensagem de erro muito genérica, não encontrei realmente o erro no código e não tinha ideia de como depurar o hardware. Eventualmente, descobriu-se que o problema era com um cabo de jumper ligeiramente danificado. O que parece óbvio agora, mas quando você é um iniciante absoluto com hardware, você não acha que os cabos de jumper podem ser danificados. Para mim, parecia que a função `print ()` foi danificada no Python. Isso não pode acontecer. Claro, eu estava errado.

 

Mas pelo menos esse foi um problema que finalmente consegui resolver sozinho.

 

Havia outro problema que não consegui resolver:

 

A certa altura, tive que replantar a planta de mirtilo. Em seguida, o sensor de umidade começou a apresentar mau funcionamento: ele retornou o nível máximo de umidade o tempo todo. Mesmo quando meu solo estava seco como um deserto, isso mostrou que meu mirtilo não precisava ser regado. Minha planta não estava muito feliz.

 

Quando percebi o problema, comecei a investigar novamente. Demorou horas novamente - mas desta vez sem sucesso. Como último recurso, fui a alguns fóruns online. Felizmente, algumas pessoas tiveram o mesmo problema que eu.

 

Acontece que meu tipo específico de sensor de umidade e meu tipo específico de solo não funcionam bem juntos. Huh!? Melhor ainda, existe uma solução alternativa: envolver o sensor de umidade com três camadas de fita adesiva. Quero dizer, quem pensaria nisso !?

 

No software, você depura ao encontrar falhas na lógica: um loop `for` malformado, sintaxe incorreta, dados maltratados. Mas depurar hardware significa lidar com objetos reais que podem quebrar, desconectar ou reagir fisicamente com outras substâncias. Isso requer experiência - e um bom conhecimento da física. O que nos leva ao próximo ponto.

 

Para software, você precisa ser bom com lógica. Para hardware, você também precisa de física.

Minha maior percepção foi que trabalhar com hardware requer um grande conhecimento da física. 

 

Lembre-se de como todos nos disseram que não usaremos nada que aprendemos nas aulas de física do ensino médio sobre:

 

eletricidade (por exemplo, lei de Ohm)

capacidade

pressão hidrostática

como medir os níveis de luz

sinais de rádio

 

Para fazer esse jardineiro automobilístico funcionar, eu precisava entender tudo isso. Felizmente, fui bem em física no ensino médio. Mas, nos últimos dez anos, concentrei-me em codificação e ciência de dados. Esses campos estão mais próximos da matemática e da lógica, enquanto a física é tão complicada quanto o mundo real.

 

Quando você executa o mesmo código duas vezes, geralmente obtém o mesmo resultado. No entanto, quando você opera sua bomba d'água por dez segundos várias vezes, quase nunca obtém a mesma quantidade exata de água para sua planta - sem mencionar o nível de umidade que você mede depois disso. Isso se deve à variação natural e ao efeito aleatório de coisas reais.

 

Mas de novo: essa é a beleza de um projeto de hardware! Faz com que você entenda que o mundo não é um laboratório controlado, mesmo quando se trata de um jardineiro automotivo interno.

 

Você não pode controlar o hardware no mesmo nível que o faz com o software. Independentemente disso, você deve ser cauteloso porque...

 

Hardware pode ser perigoso

 

Como disse, ao iniciar este projeto, fiquei empolgado. Mas também estava um pouco preocupado.

 

Quando cometo um erro em um algoritmo de aprendizado de máquina, algumas coisas ruins podem acontecer, como se ele não retornasse a saída esperada. Se eu bagunçar algo muito feio, posso sobrecarregar o servidor, e outros scripts também param. Na pior das hipóteses, podemos ter perda de dados.

 

O hardware é diferente. Aqui você pode causar sérios danos reais se não for cuidadoso. Por exemplo, se eu fizer a fiação errada, posso fritar meu Raspberry Pi. O pior cenário é que algo pegue fogo (eletricidade e água juntas podem causar muitas surpresas desagradáveis). Minha maior preocupação é queimar todo o escritório. Ok, eu devo ter ficado paranóico pensando nisso.

 

Ainda assim, com o hardware, você deve ser extremamente cuidadoso!

 

Felizmente, a experiência de codificação pode ajudar, pois você pode aplicar abordagens semelhantes para reduzir o risco:

 

Como o teste de unidade ou a execução em um ambiente de teste, você pode criar um ambiente fisicamente separado (por exemplo, cercar o jardineiro automático com materiais não inflamáveis).

Você pode configurar sistemas de monitoramento e alerta (por exemplo, adicionar um detector de fumaça que envia uma notificação push para o seu telefone quando há uma situação de emergência).

Você pode criar sistemas de backup (por exemplo, eu tenho um segundo Raspberry Pi em uma rede separada que pode desligar meu Raspberry Pi principal).

De qualquer forma, trabalhar com hardware significa maior risco, portanto, seja mais cuidadoso do que trabalhar com software. Novamente, você está lidando com física, não matemática, e a física pode machucar.

 

Meu jardineiro automatizado

 

Neste ponto, eu acho, você pode estar interessado em como é a pilha final do jardineiro automático:

 

Raspberry Pi 4 (Modelo B)

Sensor capacitivo de umidade (Adafruit STEMMA)

Mini bomba d'água 5 V (horizontal)

sensor de luz (Adafruit Lux Sensor)

Lâmpada crescente (25 umol / s - observe que posso precisar de mais do que isso)

Plugue 433 MHz + remoto

Transmissor RF 433MHz

E uma planta de mirtilo (Antes que você pergunte: eu sei que esta é uma planta de morango na foto. Essa foi minha primeira tentativa. Mas ela morreu. Veja, ao trabalhar com hardware, um pequeno erro lógico em seu script pode ser letal.)

 

O design é este:

 

Quando o sensor de umidade sinaliza baixo nível de umidade, o transmissor de rádio liga o plugue e a bomba d'água adiciona a quantidade adequada de água.

O sensor de luz mede o nível de luz e liga ou desliga a lâmpada crescente.

A câmera tira fotos da planta para que eu possa fazer o processamento de imagem baseado em aprendizado profundo e a otimização para criar vídeos de lapso de tempo legais.

(Observe que ainda estou na fase de aprendizado, então posso substituir algumas partes deste conjunto. Suas recomendações são bem-vindas na seção de comentários!)

 

A complexidade de um projeto de hardware é um nível totalmente novo

 

Esta é apenas uma fatia deste projeto, embora seja a que representa a parte difícil. Pode parecer que um projeto de hardware é um incômodo. E isso é. Sua complexidade é um nível totalmente novo (para quem vem do mundo do software, pelo menos). Mas é por isso que foi tão satisfatório para mim.

 

Eu tenho que aprender muitas coisas novas:

 

Como funciona um Raspberry Pi (e todos os seus acessórios)?

O que as plantas precisam para crescer e por quê?

Como você pode se comunicar com um objeto físico escrevendo código?

Mas a parte mais gratificante é definitivamente o mirtilo - eu o vejo e toco - e ele cresce automaticamente. Mal posso esperar pela primeira colheita!

 

 

Nós levamos a sua privacidade a sério. Cadastre-se no Avance Network a verdadeira comunidade criptografada de extremo a extremo.


Strong

5178 Blog indlæg

Kommentarer