5635

What happens when a VEVOR ultrasonic cleaner goes silent? I decided to bring it back to life, not by fixing it, but by hacking it. In this project, I replaced the dead STC 8H1K24 microcontroller with a trusty ATmega328P running at 16MHz, and reused the original control panel (buttons + display) to build a fully working system again. A deep dive into reverse engineering, firmware rebuilding, and hardware hacking, Arduino47 style !

A friend dropped by with a broken device, an ultrasonic cleaner that had suddenly stopped working. Being technically savvy himself, he had already diagnosed the issue : a dead control board. 
Since he needed the tool quickly, he bought a new unit.
Before tossing the faulty one in the trash, he offered it to me. 
I accepted, and after a quick check, confirmed that the control board was indeed completely unresponsive. 
It turned out that the control board was quite unusual  I couldn’t find any documentation or references for it online.
This summer was particularly hot, so I stayed indoors most of the time, looking for a project to dive into. That’s when I pulled out the broken ultrasonic cleaner again and decided to take it on as a challenge.
After some analysis and reverse engineering, I laid out a clear set of functional goals for the new controller:
 -- 4 cleaning modes:
28 kHz – continuous
28 kHz – pulsed (2s ON / 2s OFF)
40 kHz – continuous
40 kHz – pulsed (2s ON / 2s OFF)
 
Timer control : from 0 to 30 minutes
Temperature control: using a PID loop, from ambient up to 80°C
 
With these specs in mind, I began designing a new control system based on the ATmega328P, reusing the original panel with its buttons and display.
 
As always, I believe in giving credit where credit is due — so let’s call this part Cézar1 & Cézar2, in honor of those who made key discoveries before me.

 Cézar1 – Display Handling (Mother Board Reverse Engineering)
The original control board used a TM1640B to drive 9 seven-segment displays. I decided to keep the existing display module and reuse it with the new controller. Thankfully, someone had already cracked the communication protocol!
The functions I used for interfacing with the TM1640B came from this excellent blog post:
https://skyduino.wordpress.com/2012/05/16/arduino-afficheur-7-segments-16-digits-base-tm1640/
 
Cézar2 – Reading the NTC Thermistor
Temperature management was also on the to-do list. The original board used a standard NTC thermistor, so I needed to implement proper analog reading and conversion to Celsius.
The formulas and approach I followed are nicely explained here:
https://arduino-france.site/thermistance/


Lien vidéo de test
https://youtu.be/sUoeD4W6efY 
 
 //FR
 Un ami est venu me voir avec un appareil en panne, un nettoyeur à ultrasons qui avait soudainement cessé de fonctionner. Étant lui-même un expert en technologie, il avait déjà diagnostiqué le problème : une carte de commande défectueuse. 
 Comme il avait besoin de l'appareil rapidement, il en a acheté un nouveau. Avant de jeter l'appareil défectueux à la poubelle, il me l'a proposé. 
 J'ai accepté et, après une rapide vérification, j'ai confirmé que la carte de commande ne répondait effectivement plus du tout. Il s'est avéré que la carte de commande était assez inhabituelle, je n'ai trouvé aucune documentation ni référence en ligne. 
 Cet été étant particulièrement chaud, je suis resté la plupart du temps à l'intérieur, à la recherche d'un projet à réaliser pour m'occuper.
 C'est alors que j'ai ressorti le nettoyeur à ultrasons en panne et que j'ai décidé de  relever comme un défi de le remettre en service. 
 Après quelques analyses et rétro-ingénierie, j'ai défini des objectifs fonctionnels clairs pour le nouveau contrôleur : 
 -- 4 modes de nettoyage : 
 28 kHz – continu 
 28 kHz – pulsé (2 s ON / 2 s OFF) 
 40 kHz – continu 
 40 kHz – pulsé (2 s ON / 2 s OFF) 
 Contrôle de la minuterie : de 0 à 30 minutes 
 Contrôle de la température : par boucle PID, de la température ambiante à 80 °C
 
 Ces spécifications étant prises en compte, j'ai commencé à concevoir un nouveau système de contrôle basé sur l'ATmega328P, en réutilisant le panneau d'origine avec ses boutons et son écran. 
 
 Comme toujours, je suis convaincu qu'il faut rendre à César ce qui appartient à César ; appelons donc cette partie Cézar1 et Cézar2, en hommage à ceux qui ont fait des découvertes clés avant moi. 
 
 Cézar1 – Gestion de l'affichage (rétro-ingénierie de la carte mère)
 La carte de contrôle d'origine utilisait un TM1640B pour piloter 9 afficheurs à sept segments. J'ai décidé de conserver le module d'affichage existant et de le réutiliser avec le nouveau contrôleur. Heureusement, quelqu'un avait déjà déchiffré le protocole de communication ! Les fonctions que j'ai utilisées pour l'interface avec le TM1640B proviennent de cet excellent article de blog : https://skyduino.wordpress.com/2012/05/16/arduino-afficheur-7-segments-16-digits-base-tm1640/ 
 
 Cézar2 – Lecture de la thermistance CTN La gestion de la température était également au programme. La carte d'origine utilisait une thermistance CTN standard ; il me fallait donc implémenter une lecture analogique et une conversion en degrés Celsius correctes. Les formules et la méthode que j'ai suivies sont bien expliquées ici : https://arduino-france.site/thermistance/