1. Introdução
Desde a juventude, quando tínhamos a antiga DeskJet, eu estava interessado em cartuchos de impressora a jato de tinta. Esses cartuchos pareciam muito interessantes e, assim que acabaram, eu os levei imediatamente para mim. Naquela época, eu não podia fazer nada com eles, exceto desmontar e sujar as mãos ... Embora eu soubesse que havia algum tipo de eletrônica complexa por dentro, mas quando os contatos tocavam a bateria, nada de interessante aconteceu e meu conhecimento de eletrônica por mais não é suficiente.
Um pouco mais tarde, quando me formei, consegui uma impressora jato de tinta antiga. Naquela época, eu mesmo usava uma impressora a laser, por isso não estava muito interessado nela, mas era interessante examinar os cartuchos e tentar fazer engenharia reversa. Na verdade,
escrevi um artigo sobre o gerenciamento desses cartuchos e, embora eles funcionassem muito bem, também havia desvantagens: eu ainda não conseguia descobrir a ordem exata dos bicos, o cartucho era apenas monocromático (impresso em magenta) e também bastante antigo e, portanto, a resolução acabou por ser bastante baixo.
Recentemente, minha namorada começou a pintar, então essa era uma boa desculpa para retornar aos cartuchos de tinta na esperança de que eu pudesse desenhar algo na tela. Dessa vez, tive sorte: consegui encontrar uma maneira de ligar todos os bicos aos sinais corretos. Além disso, hoje os cartuchos de impressora controlam mais bicos usando menos sinais, o que simplifica o gerenciamento de cartuchos e aumenta a superfície que pode ser coberta em uma passagem.
Finalmente consegui controlar o cartucho colorido e imprimir em cores!
Se você quiser ir comigo da pilha de impressoras para concluir o controle do cartucho, fiz um relatório sobre isso no Hackaday Supercon 2018. A gravação em vídeo do discurso é adicionada abaixo. Se você estiver interessado nos detalhes da engenharia reversa, confira. Neste artigo, falarei sobre os detalhes técnicos dos componentes eletrônicos que criei, bem como os detalhes específicos do controle do cartucho, para que você possa desenhar o Nyancat usando o ESP32 ou outro microcontrolador.
Anexo da apresentação
Se você não assistiu ao vídeo, aqui está um breve resumo: desmontei o cartucho colorido da impressora HP1112 (na China é um cartucho HP 803, mas o número do artigo depende da região), tirei fotos do cristal e tentei descobrir como ele funciona. Quando não consegui descobrir muita coisa, comecei a ler os sinais transmitidos entre a impressora e o cartucho, descobri quais sinais enviar para que o cartucho obedecesse aos meus pedidos e depois imprimi Nyancat e outras coisas engraçadas.
A parte do tempo do sinal do estudo foi principalmente um processo de tentativa e erro. Só posso adivinhar que tipo de conexão existe entre os sinais, por isso foi bastante difícil descobrir a ordem entre as bordas e quais sinais podem ser atrasados e quais devem ser transmitidos a tempo. Estudei um cartucho de silicone para essa informação. Acabei conseguindo obtê-lo colocando o cartucho sob o microscópio, mas não como eu esperava.
Antes de falar na Supercon, estudei os cartuchos coloridos porque eles me pareciam os mais interessantes. Depois de voltar da Supercon, eu queria fazer engenharia reversa do cartucho preto: sua cabeça de impressão é maior que a do cartucho colorido, para que eu pudesse imprimir mais de uma vez. É provável que a adição de suporte para este cartucho não seja tão difícil: a organização dos pinos parece a mesma e eu sabia que o protocolo provavelmente seria semelhante, porque eu já havia tentado conectar o cartucho preto ao meu hardware. Embora o software estivesse transmitindo imagens coloridas, ele ainda conseguiu imprimir alguma coisa.
Aqui está o que fiz com o cartucho colorido: coloquei-o sob o microscópio, removi o revestimento de silicone dos contatos e preparei-me para combinar várias fotos em uma imagem grande. No entanto, o cartucho preto diferia da cor, pois havia mais inscrições em sua placa de metal com bicos: sob o revestimento de silicone havia nomes de sinais ocultos para todos os contatos!
(A propósito, se você quiser ver fotos completas do microscópio com toda a grandeza de 40 megapixels, aqui está o
escudo e o
silicone do cartucho colorido! Admire a complexidade dos
bicos e a
imagem cristalina do cartucho preto!)
Embora possa não parecer muito, em um mar de placas de circuito impresso não marcadas, chips sem materiais de referência e artigos que não levam a lugar algum, os nomes de vários sinais são uma descoberta real. Em um palpite, direcionei nomes de sinais individuais com o nome “Hewlett Packard” para as
Patentes do Google e descobri uma
patente específica (e outra
mais antiga mencionada pela primeira) com uma descrição clara das tecnologias e sinais usados nos cartuchos. Isso me pouparia muito tempo quando eu lutava com o tempo dos cartuchos ... tudo bem. Posso dizer sinceramente que essa dica foi muito difícil de encontrar: os sinais não eram cobertos apenas com filme de silicone, mas também eram pequenos: as letras têm apenas 30 micrômetros de tamanho e isso é menor que a espessura de um cabelo humano.
A patente descreve a operação interna do cartucho e vale a pena ler (se você puder descobrir o jargão jurídico usado lá) apenas para entender como a lógica estranha que a HP às vezes usa para controlar todos os bicos. A patente em si é útil, mas não o suficiente para controlar o cartucho; pelo menos a maior parte do trabalho de engenharia reversa que empreendi ainda seria necessária, mesmo se eu tivesse essa patente.
Aqui e abaixo, usarei os nomes dos sinais e contatos usados na patente. Observe que, no código, meus próprios nomes de sinais ainda podem ser encontrados; Incluirei uma tabela de tradução junto com a documentação.
Codificação de dados
Então, aqui está a aparência dos cartuchos em estudo. À primeira vista, esses são dispositivos bastante simples: por dentro, quase inteiramente consistem em uma esponja encharcada de tinta. No caso do cartucho que acompanha a impressora, há muito pouca tinta: apenas metade do espaço no cartucho é ocupado pelas esponjas, e as próprias esponjas também estão meio vazias:

No lado, existem 16 contatos na parte inferior, onde a cabeça de impressão está localizada. Como você pode ver no microscópio, existem aproximadamente 336 injetores na cabeça de impressão do cartucho preto e 612 injetores no cartucho colorido. Os bicos estão dispostos em linhas verticais na cabeça de impressão, e cada um pode ser controlado eletronicamente, de modo a disparar uma pequena gota de tinta na direção do lado do papel inserido na impressora. Movendo a cabeça verticalmente, a impressora pode imprimir uma “tira” ou qualquer outra imagem; no caso de um cartucho preto, essa fita tem aproximadamente 15 mm de comprimento e 8 mm para um cartucho colorido.
Obviamente, os bocais podem ser controlados usando contatos. De acordo com as pequenas inscrições da cabeça de impressão, os contatos contêm os seguintes sinais:
Como existem apenas 16 contatos, deve haver algum tipo de esquema de multiplexação para controlar todos os bicos. A patente explica como funciona: o controle dos bicos é dividido em 14 grupos separados. Esses grupos são acionados sequencialmente: primeiro recebe seus dados e aciona o grupo 1, depois o grupo 2 e assim por diante. Cada grupo controla um máximo de 24 bocais e os dados para eles são transmitidos através de três barramentos de dados. No caso de um cartucho colorido, os dados nos três barramentos correspondem às cores: D1 são dados amarelos, D2 são dados magenta e D3 controla os bicos cianos.
Na patente, o trabalho é descrito em detalhes usando um barramento de dados como exemplo. Esta figura da patente mostra os sinais utilizados:
O barramento de dados contém oito bytes, 0-7. Os bytes pares são controlados pela borda à direita do DCLK, os bytes ímpares são controlados pela borda à direita do S1-S4. Bocais cujos dados são controlados pelos quatro primeiros bytes podem ser ligados fornecendo energia através do barramento de força F3; os bicos associados aos últimos quatro bits são ativados pelo barramento F5.
Não sei por que a HP decidiu usar um circuito tão complexo para gerenciar dados de bicos. Podemos dizer que algo óbvio, como um registro de turno, teria funcionado normalmente aqui. Entendo que a HP usa suas patentes como arma contra empresas de recarga de cartuchos; talvez alguém já tenha patenteado uma solução mais simples e precisou criar essa solução mais complexa para ser único.
Neste gráfico, feito por mim em um analisador lógico, não é difícil encontrar os sinais descritos na patente:
Além de controlar os bicos, o cartucho também precisa de um sinal (csync) para ir para o próximo grupo de bicos ou para redefinir e retornar ao primeiro grupo. Ele pode ser visto na imagem do analisador lógico: mostra o penúltimo e último grupo de 14 e o sinal csync tem uma forma reconhecível no último grupo; ele executa uma "redefinição" do cartucho para que o primeiro grupo receba os dados a seguir. Este sinal também pode ser usado para desviar grupos de bicos na ordem inversa; isso é útil quando a cabeça de impressão se move da esquerda para a direita e da direita para a esquerda. Embora a segunda patente descreva como isso funciona, eu decidi simplesmente codificar a transição para o próximo grupo e redefinir os sinais mostrados em minhas imagens pela linha csync.
Observe que tudo isso acontece a uma velocidade bastante alta; o atraso entre as duas bordas principais do sinal DCLK é de aproximadamente 0,4 µs e a distância entre os grupos é de aproximadamente 4 µs.
Agora sabemos que cada bit desses três barramentos de 14 bytes contém um comando de operação para um bico. Se o bit for 0, o bico correspondente será acionado; se for igual a 1, o bico não funcionará. O que não sabemos é a correspondência entre bits e bocais. Se você assistiu à apresentação, sabe como consegui descobrir: imprimi um padrão conhecido em uma impressora em funcionamento, interceptando os sinais usando um analisador lógico e depois descobri qual deveria ser a ordem dos sinais para decodificar os sinais de volta à imagem original
.
Infelizmente, a correspondência de bits com bicos parece bastante constante, mas não completamente lógica. Parece que isso se deve principalmente à necessidade de mover fisicamente os bicos simultaneamente a uma distância suficiente (para evitar superaquecimento ou ocorrência de vácuo local no tanque de tinta). Além disso, também achei que a facilidade de encaminhar sinais em um cartucho pode tornar a correspondência de bits e bicos bastante confusa. No meu firmware, eu simplesmente implementei esse mapeamento como um conjunto de tabelas de pesquisa.
Eletrônicos
Agora que sabemos como os sinais funcionam, podemos controlar o cartucho da impressora com um simples microcontrolador, certo? Bem, não imediatamente. O cartucho da impressora não usa lógica simples de 5 V ou 3,3 V. Os barramentos de dados são controlados por 16 V ou 9 V. Os barramentos de energia também são controlados por 16 V e, de fato, dependendo do número de bocais acionados, eles podem ser puxados para a corrente da fonte de alimentação . Precisamos realizar uma conversão de nível.
Como conversor de nível, eu escolhi o MC14504. Este é um chip de conversão de nível hexadecimal unidirecional antigo que pode aumentar a tensão para 18 V. Embora esse chip também funcione, olhando para trás, posso dizer que essa não foi a melhor escolha: ele só pode produzir alguns mA e possui um atraso de propagação bastante grande. Eu acho que isso atrasa alguns sinais de saída, dependendo do cartucho e da carga aplicada às saídas do chip. Eu tenho pelo menos um cartucho que precisa de um pequeno ajuste de tempo para que os sinais funcionem, e acho que esse é o motivo. Infelizmente, os conversores de nível de 16V já não estão tão acessíveis hoje, então não posso substituí-lo por algo melhor. No entanto, este chip clássico com um pequeno ajuste é suficiente.
Com os ônibus elétricos, as coisas são um pouco mais complicadas. Além do fato de que esses contatos recebem uma grande parte da corrente, eles também são conectados diretamente aos resistores dos bocais incluídos: se por algum motivo a energia for fornecida por muito tempo, esses minúsculos resistores queimarão e o bico falhará completamente. Além disso, esse "tempo demais" é bastante simples de conseguir: basta ligar os bicos por apenas alguns microssegundos e, se você fornecer energia por apenas um milissegundo, eles simplesmente evaporarão, quebrando completamente o bico. Para evitar que isso aconteça devido a um erro de software ou a uma conexão incorreta, adicionei uma lógica de hardware que garante que o pulso seja limitado a um pequeno múltiplo de 10 μs.

No primeiro protótipo, deixei vários conversores de nível e não sabia como o software funcionaria, então resolvi o problema com um multivibrador real de ciclo único. Nesse circuito, dois multivibradores são usados no 74HC123, gerando pulsos, cuja largura é definida pela combinação de R / C conectado ao pino RCExt. O pulso resultante é gerado apenas com um sinal de entrada crescente; portanto, um sinal constantemente alto não levará a nada além de um pulso de saída definido com precisão, mas falso. Depois disso, o canal MC14504 é usado como um conversor de nível para aumentar a tensão para +16 V, e o transistor MOS do canal P fornece a corrente necessária.

Na segunda placa de circuito impresso, percebi que se eu mudar a lógica dos contatos de potência para que eles não usem dois canais do circuito de mudança de nível, apenas dois chips MC14504 serão suficientes. Agora eu tenho controle programático suficientemente bom sobre a largura do pulso, mas ainda quero ter proteção contra um sinal de contato de entrada constantemente alto. Aqui está o diagrama que eu vim. Funciona assim: no estado normal com um sinal baixo PWRB_IN, o capacitor C28 está vazio, porque qualquer tensão nele flui lentamente ao longo de R20 e R21: a porta do transistor Q4 é alta e PWRB_OUT é desconectado do barramento de potência de 16 V. Assim que PWRB_IN alto aparecer alto sinal, Q6 aterrou uma extremidade de C28; uma vez que a voltagem é de 0 V, inicialmente isso também diminui o outro lado, que está conectado ao portão Q4. Puxar o obturador Q4 para baixo o torna condutor e isso permite que a corrente flua de +16 V para PWRB_OUT. No estado normal, PWRB_IN volta ao estado baixo com rapidez suficiente, fechando o portão Q4 e interrompendo a corrente. No entanto, enquanto PWRB_IN estiver baixo, o C28 está carregando lentamente: um lado está aterrado no Q6 e o outro está conectado a 16 V via R21 e R31. Quando o capacitor está suficientemente carregado, o Q4 “vê” um nível alto em sua porta e desliga a corrente em PWRB_OUT, mesmo se PWRB_IN ainda estiver em um estado de sinal alto. Esse mecanismo garante que PWRB_OUT forneça energia apenas por um período limitado de tempo.
O circuito também possui um pequeno resistor conectado em série ao barramento de força de 16 V (R31), além de um pequeno capacitor conectado em paralelo ao sinal de saída (C15). Eles são necessários para "aliviar a tensão" do sinal de energia: sem eles, um Q4 acentuado liga e desliga induz um monte de interferência eletromagnética, distorcendo os sinais transmitidos ao cartucho.
Além dessa lógica, nada mais é necessário. Obviamente, são necessários conversores de nível de +9 V e +16 V. A fonte de alimentação de +9 V. deve ser bastante modesta: eu não percebi que esses barramentos geralmente usavam mais do que alguns mA. Como alimenta os resistores do bico, a fonte de 16 V deve ser um pouco mais forte: eu fiz isso para que a mina pudesse fornecer pelo menos 400 mA continuamente e também adicionei bastante capacitância de desacoplamento.
Finalmente, o ônus mais importante do processamento de imagem e geração de sinal recai sobre o microcontrolador. Para esse propósito, escolhi o ESP32, principalmente porque tirei algumas peças do trabalho, mas também porque ele possui um controlador I2S bastante poderoso que usa um modo paralelo muito conveniente: na verdade, podemos definir a frequência do relógio, especifique a área de memória para o controlador I2S e ele produzirá esses bytes em paralelo. Graças a isso, é ideal para gerar os sinais de controle necessários; O fato de possuir dois núcleos poderosos de 240 MHz também ajuda no processamento de imagens.
Protótipo
Obviamente, vários conversores e transistores MOS sozinhos não podem se tornar um controlador de cartucho de impressora em funcionamento. Portanto, criei um dispositivo separado, concebido como uma plataforma para experimentar um cartucho e seus recursos. Possui um módulo ESP32, a lógica necessária para controlar o cartucho e várias fontes de alimentação para trabalhar a partir de uma célula de íons de lítio. Também é equipado com vários sensores projetados para compensar movimentos imperfeitos das mãos de uma pessoa, além de botões e uma tela que fornece feedback sobre as imagens impressas. Vamos dar uma olhada nos componentes, talvez para alguém se torne uma inspiração para a invasão de cartuchos:
Vamos começar com a fonte de energia. A energia é fornecida a partir de uma célula de íons de lítio e convertida em 3,3 V, 16 V e 9 V. É necessária uma tensão de 3,3 V para sensores e ESP32; é gerado usando um simples regulador LD78 HT7833.
Tensões de 9 V e 16 V são geradas por dois conversores de impulso baseados no chip conversor de impulso XR2203. Observe que uma fonte de alimentação de 16 V deve trabalhar muito mais do que uma fonte de alimentação de 9 V; o cartucho consome de 9 V apenas alguns miliamperes. Dois conversores de impulso foram criados no mesmo chip simplesmente porque bastava comprar um tipo de componente para ambos.Como todo o dispositivo é alimentado por uma célula de íons de lítio, precisamos carregá-lo de alguma forma. Como tenho pouco espaço, adicionei um carregador de bateria de íon de lítio baseado em TP4056 para recarregar a bateria de qualquer fonte de alimentação USB.A inteligência do dispositivo é fornecida pelo módulo ESP-Wrover32. Usei a opção com 8 MiB de memória flash e 8 MiB de RAM SPI; o suficiente para executar um processamento de imagem complexo. O módulo também possui um conector de 5 pinos que permite programar e depurar o firmware, além de dois botões que podem ser usados para selecionar opções e iniciar a renderização quando o firmware estiver em execução.As opções selecionadas são exibidas em uma pequena tela LCD colorida de 160x80. A tela possui uma conexão SPI e pode ser controlada diretamente por um dos conectores SPI periféricos disponíveis no ESP32.Essa é a interface do cartucho. Como afirmado acima, não é particularmente complicado. O nível de todos os sinais é convertido pelo par MC14504, um para sinais de 9 V e outro para sinais de V. V. Também no diagrama há um circuito de mudança de nível / proteção que controla os barramentos de energia dupla.


Aqui estão três tipos de sensores que eu usei. Todos eles são conectados usando um barramento I2C, ou seja, no ESP32 eles ocupam apenas dois GPIOs. Este é um bloco de sensores inerciais MPU9250 (acelerômetro, giroscópio e bússola digital) para medir o movimento, três sensores de distância a laser VL53L0X (apenas um é mostrado), direcionados para cima, esquerda e direita. A idéia é que, combinando essas informações, é teoricamente possível determinar a posição absoluta do cartucho. Isso é útil, por exemplo, ao desenhar imagens grandes com um movimento da mão livre. Este último é o sensor de cores TCS3472. O sensor de cor está localizado próximo ao LED branco; pode ser usado para "copiar" a cor do objeto ou para compensar a cor da mídia na qual imprimimos.
Como eu precisava de GPIOs adicionais, conectei um expansor GPIO ao barramento. Ele controla os barramentos de redefinição para os três sensores de distância, o barramento de redefinição para a tela LCD, a inclusão de um conversor de reforço e dois transistores MOS (não mostrados) que controlam o LED branco usado para iluminar o alvo do sensor de cor e a luz de fundo da tela LCD. Os sensores de distância precisam de um barramento de redefinição separado, porque ligam no mesmo endereço I2C. No entanto, eles possuem um comando que altera o endereço I2C após a ativação. Ao ativá-los e movê-los um a um para endereços I2C diferentes, eu posso controlar todos os três no mesmo barramento I2C.
Aqui está a placa de circuito que eu projetei com base no circuito. Sua forma é estranha, pois deve ser dividida em quatro placas separadas e "circundar" o cartucho da impressora. Eles estão conectados eletricamente e fisicamente; a vantagem disso é que os fabricantes de placas de circuito impresso não consideram esse circuito quatro placas separadas e você só precisa pagar por uma.Outra vantagem é que posso montar a placa como um elemento e testá-la quando todos os componentes estiverem no mesmo plano. Isso me permite não equilibrar cuidadosamente o dispositivo montado durante a depuração. Uma pequena observação: os sensores VL53L0X usam um raio laser infravermelho; Parece que é forte o suficiente para romper o filtro de proteção contra radiação infravermelha no meu “espelho” e aparece no quadro como pequenos pontos roxos de luz.E qual será o resultado final após a montagem. Observe que quando as placas foram separadas, as conexões entre elas foram interrompidas. As placas possuem pequenas almofadas de solda nas quais você pode soldar um pequeno pedaço de arame e dobrá-lo. Obviamente, para o nível de produção, você precisará usar tecnologias como PCB FPC ou PCB flexível, mas para um protótipo barato isso funcionará.Se você deseja usar esse protótipo para referência ou experimentar, pode fazer o download dos arquivos do projeto KiCad (também existem diagramas em pdf e gerber no mesmo local) e montá-lo você mesmo, ou usar seus subsistemas.Como este é um protótipo, o software é bastante ... heterogêneo. Vou dar um link para o repositório em que foi desenvolvido, mas lembre-se de que este é um instantâneo de quase todo o ciclo de desenvolvimento, portanto contém tudo em ordem, desde gravações de sinais por um analisador lógico até Nyancat e Mona Lisa impressos. Infelizmente, portanto, o código é um caos quase não documentado, com caminhos incompletos e remanescentes do código antigo. Se você ainda deseja aprender, pode clonar este URL no git .No entanto, se você estiver mais interessado em software que possa controlar facilmente o cartucho da impressora usando o ESP32 (e contenha procedimentos úteis para controlá-lo através de outro microcontrolador), continue lendo.Versão de trabalho mínima
Para facilitar a utilização de cartuchos de impressora por outros artesãos, também criei uma versão mínima do driver. Falta suporte para todos os periféricos e hacks do código do protótipo, mas a arquitetura é limpa e, portanto, pode se tornar uma base sólida para desenvolvimento adicional. O driver possui um exemplo simples de um programa que imprime quando o botão HELLO! cartucho colorido ou preto.Não criei equipamentos especializados para isso, mas na verdade você pode reutilizar o hardware da seção anterior: basta usar uma fonte de alimentação , ESP32e conversores de nívele aplicá-los em seu próprio esquema. Você também pode usar totalmente o protótipo descrito na seção anterior: basta fornecer um sinal alto constante BOOST_EN para que os conversores de 9 V / 16 V estejam sempre ligados. (Dessa maneira, depurei o código.)O código em si pode ser encontrado no Github , está estruturado de maneira padrão para o projeto ESP-IDF. O código principal do driver está em components / printcart ; código do botão de ler e decidir quando deve ligar o bico, bem como o código de inicialização contidas no main / main.c . No exemplo, os dados do bico são lidos a partir da imagem rgb incorporada.O sistema possui a seguinte arquitetura: printcart_i2s.ccontém um driver simples para o modo paralelo dos conectores periféricos I2S do controlador ESP32. Ele seleciona dois buffers e transfere das palavras de 16 bits dos buffers com uma frequência de 3,3 MHz para os contatos GPIO (máximo de 16 contatos). (Aqui, esses pinos GPIO são conectados aos conversores de nível que controlam o cartucho.) Cada vez que o buffer está vazio, o driver executa um manipulador de eventos para preencher o buffer.O manipulador de eventos está localizado em printcart_buffer_filler.c . Ele recebe dados dos bicos da fila de dados dos bicos e os passa para uma função em printcart_genwaveform.c , que por modelo converte esses dados dos bicos em sinais. O modelo depende do tipo de cartucho (colorido ou preto) e você pode alterá-lo carregando tools / waveform_editor.html no navegador .Por outro lado, a fila de dados do bico é o procedimento de loop em main.c. Ele espera que um botão seja pressionado e, quando pressionado, gera dados de bico analisando um arquivo de imagem simples convertido em dados rgb brutos e incorporado em um arquivo binário costurado, digitalizando os dados da esquerda para a direita. Graças a isso, você pode pressionar o botão, varrendo o cartucho sobre o papel e imprimir o conteúdo da imagem na forma de uma tira de tinta.O resultado final é mais ou menos assim:É muito perceptível aqui que o cartucho preto imprime aproximadamente o dobro da altura da cor (0,7 cm e 1,5 cm); portanto, se você não precisa de cores e precisa de boa visibilidade, é melhor escolher um cartucho preto. Também é importante notar que em main.c é definido que alterna entre dois cartuchos; código pode funcionar com ambos. Não está totalmente claro por que existem linhas borradas na imagem em preto: talvez haja um erro no meu sinal ou talvez o cartucho esteja um pouco cansado de testar. Seja como for, os dados impressos são bonitos e bem reconhecíveis.Em conclusão
A engenharia reversa desses cartuchos de impressora foi uma longa aventura, mas no final meu trabalho foi proveitoso; embora restem alguns quebra-cabeças (por exemplo: o que o contato com ID faz?), acho que entendi bem os enigmas dos sinais usados no cartucho. Espero que, ao publicar o código e os diagramas deste projeto, adicione o uso de cartuchos de impressora ao kit de ferramentas de artesãos, hackers e criadores. Mal posso esperar para ver exemplos interessantes de uso que a comunidade apresentará. Se você conseguir fazer algo interessante com o meu trabalho, não deixe de me enviar uma mensagem .Quanto à minha intenção de criar arte ... umm ... isso pode ser chamado assim?