Алгоритм работы моих автодоливов я несколько раз здесь рассказывал. Суть в том, чтобы не тупо включать помпу, если вода ушла, и выключать когда долили до риски. И городить страховки от перелива.
Мой алгоритм, который использую с самого начала уже лет 15 (если не 20) на всех аквариумах:
Имеем только один датчик уровня. Проверяем уровень в сампе 1 раз в, например, 10 минут (задается в программе).
Если воды много - отключаемся на 10 минут и ничего не делаем.
Если воды мало - включаем перистальтик-помпу на 1 минуту (задается в программе) и больше ничего не проверяем.
Все, конец алгоритма. 
И нас не волнует ничего больше, ни колебания воды в шахте, ни проблема перелива, нет необходимости ставить страховочные датчики - перелива не будет даже при коротком замыкании датчика.
По сенсору автодолива.
Две титановые проволочки на две ноги процессора через большие резисторы (на самом деле не обязательно... но мне сказали что лучше с ними, типа защита процессора от напряжений в воде - у меня и без них годами работает, процессоры ни разу не горели).
В норме обе ноги в Z-состоянии (то бишь "оборваны"), на них нет ни 0 ни +5 вольт.
При замере, 1 раз в 10 минут, одну ногу переключаем на вход, на другую подаем слабое напряжение подтяжки (тоже на вход, но с подтяжкой). Ждем 50 микросекунд. Проверяем - если на первой ноге сигнал 1 - значит электроды в воде. А теперь оцените - 1 раз в 10 минут коротенький импульс 50 микросекунд - это вам абсолютная гарантия, что оно ни на что в аквариуме не повлияет.
//--------------------------------------------------------------------------------
unsigned char AuthodolivLevel(){ // вызываем 1 раз в (4...10 минут)
// возвращает 1 если вода ушла и надо включать
// возвращает 0 если электрод в воде
unsigned char result =0;
LEVEL_AUTODOLIV_DDR = 0; //ставим на вход
LEVEL_AUTODOLIV_PORT = 1; //подтяжка
AUTODOLIV_GND_DDR = 1; //ставим на выход
AUTODOLIV_GND_PORT =0; // подаем ноль на выход
delay_us(50);
result = LEVEL_AUTODOLIV_PIN;
//0 на выход, чтобы снять напряжение между электродами
//если оставить на вход - то подается напряжение через резистор 220к
LEVEL_AUTODOLIV_PORT = 0;
LEVEL_AUTODOLIV_DDR = 0;
AUTODOLIV_GND_DDR = 0; //ставим на вход
AUTODOLIV_GND_PORT =0; // Z состояние
return result;
}
//--------------------------------------------------------------------------------