Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Умный мультиплексор зарядного устройства с умным дисплеем

Компоненты и расходные материалы

Arduino UNO
× 1
Arduino Proto Shield
× 1
Ультразвуковой датчик - HC-SR04 (общий)
× 1
Adafruit MCP-3008 8-канальный 10-битный Adc
× 1
Реле 5 В - 2-канальный оптрон
× 3
LM2596 Модуль источника питания DC / DC BUCK 3A, регулируемый
× 1
Резистор 1 кОм
× 12
6-позиционная клеммная колодка
Проверьте изображение - можно использовать практически любой тип системы подключения.
× 1

Необходимые инструменты и машины

Паяльник (общий)

Об этом проекте

Если вы живете на северо-востоке, если у вас есть старая машина или лодка, газонокосилка или другое транспортное средство, которое запускается от аккумулятора, который вы не водите или не используете в плохую погоду (некоторые называют это зимой), вы должны решить, что делать. с батареями каждый сезон. Если у вас есть один или два, это довольно просто - вы можете получить зарядное устройство для постоянного тока. Самые дешевые простые стоят менее 15 долларов, но они просты - без обратной связи от батареи или мониторинга, они просто подают на батарею чуть более 13 вольт. Лучшим выбором будет одно из интеллектуальных зарядных устройств - у них обычно есть обычная более высокая / быстрая зарядка и снег или капельная зарядка, которая регулирует выходную мощность в зависимости от напряжения и состояния аккумулятора. Они работают очень хорошо - у Harbour Freight есть один за 39 долларов - конечно, 29 долларов в продаже, что почти всегда.

Если бы я повесился, у меня был мой MGB 1975 года (с 3,5-литровым Oldsmobile V8), пикап Toyota 1981 года, лодка и генератор - все с 12-вольтовыми батареями. А потом, если мы уезжаем зимой, мы оставляем здесь одну из машин, чтобы была другая батарея. Что ж, мне нужно купить 5 батарейных автоматов - 150 долларов, если я куплю HF в продаже.

Размышляя об этом, я подумал, что беру по одному на каждую батарею, ставлю ее, она доводит батареи до уровня, а затем просто отслеживает и подзаряжает их все остальное время. И мне пришла в голову идея - почему бы мне не подключить его к каждой батарее по несколько часов в день - разве это не сработает? Тогда, если бы я мог автоматически переключаться между ними?

Что ж, я могу. Я взял один из своих Arduinos и написал программу, которая делает именно это - а затем я увлекся и добавил несколько дополнительных функций. Итак, здесь я представляю подробности того, что у меня получилось. Эта версия рассчитана на 6 батарей с автоматическим определением.

Работает от 1 до 6 батареек. Первая батарея должна быть подключена к точке номер 1 - это соединение связано с регулятором напряжения, который питает Arduino и другую электронику. Затем 2-й и выше можно подключать в любом порядке. Когда вы подключаете батарею, напряжение измеряется функцией Read_Show_Volts, и эта батарея добавляется в цикл зарядки.

Как работает - хотел разместить 6 батареек. С Arduino UNO A4 и A5 необходимы аналоговые входы для 2-проводного управления ЖК-дисплеем, поэтому 4 аналоговых входа слишком мало. Итак, я подключил 8-канальные аналоговые входы MCP-3008. Я использую 2 резистора 1 кОм в качестве делителя напряжения для каждого входа MCP-3008.

В программе вызываются в основном 4 функции.

  • Функция read_show_volts проверяет каждое соединение, чтобы увидеть, подключена ли батарея, проверяя наличие доступного напряжения более 8 В. Если напряжение 8 В или больше, это соединение добавляется к зарядному контуру.
  • Функция check_relays проверяет счетчик таймера и, когда он достигает максимума, перемещает зарядное устройство к следующему реле в очереди.
  • Функция update_display делает именно это - обновляет дисплей. Сначала он показывает напряжение на соединениях 1, 2 на линии 1 и напряжение на соединениях 3 и 4 на линии 2. Затем, когда таймер сообщает ему, он изменяется и отображает напряжение соединений 5 и 6 на строке 1, и потому что у меня было два Дополнительные аналоговые входы Я показываю напряжение системы (надеюсь 5 вольт) и напряжение iref - 3,3 вольта. Эти показания не нужны, но там была пустая строка, и я не знал, что еще показать - я открыт для идей.
  • Последняя функция - read_distance_update . . Это интересно, и с ним очень весело играть. Я подключил ультразвуковой дальномер HC-SR04. Я хотел, чтобы ЖК-дисплей контролировал напряжение, но я почти никогда не стою там и смотрю на ЖК-дисплей - большую часть времени его можно было выключить. Я мог бы поставить выключатель - легкий выход, - но я вставил HC-SR04 и через столько секунд выключил ЖК-дисплей. Затем, когда я провожу рукой близко к HC-SR04, я снова включаю ЖК-дисплей на x секунд.

Есть переменные почти для всего, поэтому вы можете адаптировать их под свои нужды. Я установил таймер зарядки на 1 час на каждую батарею. Таким образом, если подключены две батареи, каждая из них будет заряжаться по 1 часу 12 раз в день. С 4 батареями это будет 1 час 6 раз в день и так далее.

Пока у меня был HC-SR04, я добавил процедуру, которая изменяет цикл таймера на более короткое время - несколько секунд на каждую батарею. Причина, по которой я сделал это, заключалась в том, что я мог видеть, что он переключается между батареями в порядке, и мне не пришлось ждать час, чтобы увидеть, как он переключился. Если вы подержите руку над HC-SR04 на несколько секунд, он включит и выключит подсветку ЖК-дисплея, так что вы знаете, что он включился. Вы будете слышать, как реле переключаются каждые несколько секунд. Снова держите руку над HC-SR04, и он вернется в исходное положение.

Вот почтовый индекс кода:BatteryMultiplexer

Код

  • Код Arduino мультиплексора батарей
Батарейный мультиплексор Arduino Code Arduino
Я использовал Arduino Uno.
 #include  #include  // Использование версии 1.2.1 # include  #include  auto timer =timer_create_default (); // создать таймер с настройками по умолчанию // Конструктор ЖК-дисплея - показанный адрес 0x27 - может или не может быть правильным для вашего // Также на основе YWRobot LCM1602 IIC V1LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7, 3, ПОЛОЖИТЕЛЬНО); int zcnt =0; int acnt =0; // общая цель прямо сейчасint chargeTime =(10 * 1000); // сколько времени тратить на каждую батарею int charge_time_counter =59; // сколько времени зарядки прошло? int charge_time_max =60; // сколько времени зарядки прошло? int relay1 =3; // каждое реле на своем собственном pinint relay2 =4; int relay3 =5; int relay4 =6; int current_relay =0; // какое реле сейчас включено? int max_relays =3; // сколько реле - на основе 0. Начните рассчитывать все три. Float Volts1; // какое напряжение у каждой батареи float volts2; float volts3; int min_volts =1; // какое минимальное напряжение должно быть при зарядке аккумуляторной батареи int volts_update_count =5; // как часто обновлять показания напряжения в секундах int volts_update_counter =0; // отслеживаем количество прошедших секунд int volts_update =(500); int read_distance_update =(500); // обновляем дистанционный считыватель каждые миллисинт time_on_counter =0; // счетчик включения / выключения отображения int time_on_count =100; // секунд будет onint heart_beat =0; // измените это значение с 0 на 1 на 0, чтобы отобразить сердцебиениеUltraSonicDistanceSensor distanceSensor (11, 12); // Инициализируем датчик, который использует цифровые выводы 13 и 12. int distance; int relays [] ={relay1, relay2, relay3}; int is_live [] ={0, 0, 0}; // 1 если жив, 0 если нет. У меня всего 3int debug =5; // установите уровень отладочных сообщений для перехода к последовательному принтеруvoid all_change_to (int which) {// измените все реле на HIGH или LOW, вы скажете мне, какие :) digitalWrite (relay1, which); digitalWrite (relay2, который); digitalWrite (relay3, который);} void toggle_relays (int whichOne) {lcd.setCursor (0, 0); // показать текущее реле на lcd.print ("Relay on:"); lcd.print (current_relay + 1); // current_relay отсчитывается от нуля all_change_to (HIGH); // выключаем все сначала digitalWrite (реле [current_relay], LOW); // и устанавливаем тот, который должен быть включен на acnt ++; // просто счетчик, показывающий, что он работает lcd.print (""); lcd.print (acnt);} void checkRelays () {// перемещаем current_relay на следующее реле // если мы достигли максимума, начнем с 0 // пока вы здесь, вызовите toggle_relays, чтобы убедиться, что мы не зарядить пустой или мертвый charge_time_counter ++; если (счетчик_времени_зарядки> =макс_время_зарядки) {текущее_реле ++; если (current_relay> =max_relays) {current_relay =0; } toggle_relays (текущее_реле); charge_time_counter =0; }} void read_distance () {// считать расстояние до чего-либо от HC-S204 // если это что-то в пределах 80 см, тогда включите дисплей и сбросьте показания счетчика // если счетчик достигнут, то ничего не находится в пределах 80 см, поэтому выключить отображение distance =distanceSensor.measureDistanceCm (); // раскомментируйте их, чтобы увидеть фактическое измеренное расстояние // Serial.print ("Distance in CM:"); // Serial.println (расстояние); if (distance <80) {// может быть меньше 200 для моей системы, раскомментируйте выше и проверьте свою lcd.backlight (); // включаем отображение time_on_counter =0; } else {// может уйти? time_on_counter ++; если (time_on_counter> time_on_count) {time_on_counter =0; lcd.noBacklight (); }}} void read_show_volts () {// считываем вольт на каждом входе батареи // тогда, если меньше min_volts, там нет ничего стоящего, пропустите это соединение // это вызывается снова и снова, поэтому, если провод будет сбит или // чего не будет в контуре заряда volts1 =analogRead (0); вольт1 =(вольт1 * 0,016); lcd.setCursor (0, 1); lcd.print (""); // очищаем строку lcd.setCursor (11, 0); lcd.print (вольт1); volts2 =analogRead (1); вольт2 =(вольт2 * 0,0164); lcd.setCursor (4, 1); lcd.print (вольт2); volts3 =analogRead (2); вольт3 =(вольт3 * 0,0166); lcd.setCursor (11, 1); lcd.print (вольт3); // теперь проверим напряжения. Если меньше 10, то предположим, что батарея разряжена / неисправна или отсутствует // поэтому вынимаем ее из вращения // начнем с очистки всех реле int temp_cnt =0; // устанавливаем все массивы в 0 - реле выключено [0] =0; реле [1] =0; реле [2] =0; если (volts1> min_volts) {реле [temp_cnt] =relay1; // реле 1 в порядке temp_cnt ++; } если (вольт2> мин_вольт) {реле [temp_cnt] =реле2; // реле 2 в порядке temp_cnt ++; } если (volts3> min_volts) {реле [temp_cnt] =relay3; // реле 3 в порядке temp_cnt ++; } max_relays =temp_cnt; // это ставка на жк-дисплей - просто показывает, что он работает lcd.setCursor (0, 1); если (heart_beat ==1) {lcd.print ("<>"); heart_beat =0; } еще {lcd.print ("> <"); heart_beat =1; } lcd.print (charge_time_counter); read_distance ();} установка void () {Serial.begin (19200); Serial.println («Запуск»); lcd.begin (16, 2); // шестнадцать символов в ширину - 2 строки lcd.backlight (); pinMode (реле1, ВЫХОД); pinMode (реле2, ВЫХОД); pinMode (реле3, ВЫХОД); all_change_to (ВЫСОКИЙ); // настраиваем таймеры. 3 таймера - время включения зарядного устройства на каждой батарее, // как часто показывать обновление напряжения // и как часто проверять считанное расстояние для включения дисплея read_show_volts (); // делаем в первый раз, поэтому нам не нужно ждать таймера. checkRelays (); timer.every (chargeTime, checkRelays); timer.every (volts_update, read_show_volts);} недействительный цикл () {timer.tick (); // отметим таймер} 

Схема

Схема мультиплексора

Производственный процесс

  1. Умные жалюзи
  2. Управление монетоприемником с помощью Arduino
  3. Arduino Temp. Монитор и часы реального времени с дисплеем 3.2
  4. Arduino с Bluetooth для управления светодиодом!
  5. Arduino Power
  6. Игра с дисплеем Nextion
  7. DIY вольтметр с Arduino и дисплеем Nokia 5110
  8. Учебная платформа Arduino
  9. Создайте приложение Fridgeye с дисплеем Nextion
  10. Измерение солнечной радиации с помощью Arduino