산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

스마트 디스플레이가 있는 스마트 배터리 충전기 멀티플렉서

구성품 및 소모품

Arduino UNO
× 1
Arduino Proto Shield
× 1
초음파 센서 - HC-SR04(일반)
× 1
Adafruit MCP-3008 8 채널 10비트 ADC
× 1
5V 릴레이 - 2채널 광커플러
× 3
LM2596 전원 공급 장치 모듈 DC/DC BUCK 3A 조정 가능
× 1
저항 1k 옴
× 12
6 위치 터미널 스트립
그림을 확인하십시오. 대부분의 모든 유형의 연결 시스템을 사용할 수 있습니다.
× 1

필요한 도구 및 기계

납땜 인두(일반)

이 프로젝트 정보

북동부에 거주하는 경우 운전하지 않거나 악천후(일부는 겨울이라고 함)에 사용하지 않는 배터리로 시동되는 구형 자동차나 보트, 잔디 깎는 기계 또는 기타 차량이 있는 경우 무엇을 해야 할지 결정해야 합니다. 계절마다 배터리와 함께 하나 또는 두 개가 있으면 매우 쉽습니다. 세류 충전기를 얻을 수 있습니다. 저렴한 간단한 제품은 15달러 미만이지만 간단합니다. 배터리 피드백이나 모니터링이 없고 배터리에 13볼트를 넣기만 하면 됩니다. 더 나은 선택은 스마트 충전기 중 하나가 될 것입니다. 일반적으로 더 높거나 빠른 정기적인 충전과 배터리 전압 및 상태에 따라 출력을 조정하는 눈 또는 세류 충전이 있습니다. 그들은 아주 잘 작동합니다. Harbour Freight는 $39에 하나를 가지고 있습니다. 물론 거의 항상 판매되는 $29입니다.

내가 전화를 끊은 것은 1975년 MGB(3.5리터 Oldsmobile V8 포함), 1981년 Toyota 픽업, 보트 및 발전기(모두 12볼트 배터리 포함)를 가지고 있다는 것이었습니다. 그리고 겨울에 여행을 떠나면 자동차 중 하나를 여기에 두고 배터리가 하나 더 있습니다. 음, 5개의 배터리 마인더를 구해야 합니다. HF를 세일 중인 경우 $150입니다.

이것에 대해 생각하는 동안 나는 각 배터리에 대해 하나씩 가지고 있다고 생각했습니다. 배터리를 일정 수준으로 가져온 다음 나머지 시간 동안 모니터링하고 세류 충전합니다. 그래서 아이디어가 떠올랐습니다. 하루에 몇 시간씩 각 배터리에 연결할 수 없는 이유는 무엇일까요? 그런 다음 자동으로 전환되도록 할 수 있다면?

글쎄요. 나는 내 Arduinos 중 하나를 가져 와서 바로 그 작업을 수행하는 프로그램을 작성했습니다. 그리고 나서 나는 마음에 들어 몇 가지 추가 기능을 추가했습니다. 그래서 여기에 내가 끝내는 것에 대한 세부 사항을 제시합니다. 이 버전은 자동 감지 기능이 있는 최대 6개의 배터리에 대해 설정되었습니다.

배터리 1~6개로 작동합니다. 첫 번째 배터리는 1번 지점에 연결해야 합니다. 이 연결은 Arduino 및 기타 전자 장치에 전원을 공급하는 전압 조정기에 연결되어 있습니다. 2nd 이상은 아무 순서로나 연결할 수 있습니다. 배터리를 연결하면 Read_Show_Volts 기능에서 전압이 감지되고 해당 배터리가 충전 주기에 추가됩니다.

작동 원리 – 저는 6개의 배터리를 수용하고 싶었습니다. Arduino UNO를 사용하면 2선식 LCD 제어에 아날로그 입력이 필요하며 4개의 아날로그 입력이 너무 적습니다. 그래서 MCP-3008 8채널 아날로그 입력을 연결했습니다. MCP-3008에 대한 각 입력에 대해 2개의 1k 저항을 전압 분배기로 사용합니다.

프로그램에서 호출되는 함수는 기본적으로 4가지가 있습니다.

<울>
  • read_show_volts 기능 각 연결을 확인하여 사용 가능한 8볼트 이상을 테스트하여 연결된 배터리가 있는지 확인합니다. 8v 이상이면 해당 연결을 충전 루프에 추가합니다.
  • <울>
  • 기능 check_relays 타이머 카운터를 확인하고 최대값에 도달하면 충전기를 라인의 다음 릴레이로 이동합니다.
  • <울>
  • 기능 update_display 디스플레이를 업데이트합니다. 먼저 라인 1의 연결 1, 2의 전압과 라인 2의 연결 3과 4의 전압을 보여줍니다. 그런 다음 타이머가 알려주면 라인 1의 연결 5와 6의 전압이 변경되고 표시됩니다. 추가 아날로그 입력 시스템 전압(5볼트)과 iref 전압(3.3볼트)을 보여줍니다. 그 판독값은 필요하지 않지만 빈 줄이 있었고 무엇을 더 표시해야 할지 몰랐습니다. 저는 아이디어에 열려 있습니다.
  • <울>
  • 최종 기능은 read_distance_update입니다. . 이것은 흥미롭고 가장 재미있게 노는 것입니다. HC-SR04 초음파 소나 거리 측정 장치를 연결했습니다. LCD가 전압을 모니터링하기를 원했지만 LCD를 보면서 거의 서서 LCD를 볼 수 없었습니다. 대부분의 경우 꺼질 수 있습니다. 쉽게 빠져나갈 수 있는 스위치를 넣을 수도 있었지만 HC-SR04를 넣고 몇 초 후에 LCD를 끕니다. 그런 다음 HC-SR04 위로 손을 가까이 가져가면 LCD를 x초 동안 다시 켭니다.
  • 대부분의 모든 것에 변수가 있으므로 필요에 맞게 조정할 수 있습니다. 충전 타이머를 배터리당 1시간으로 설정했습니다. 따라서 두 개의 배터리를 연결하면 하루에 12번, 각각 1시간씩 충전됩니다. 4개의 배터리를 사용하면 하루에 6번 1시간이 소요됩니다.

    HC-SR04가 있는 한 타이머 루프를 배터리당 몇 초 더 짧은 시간으로 변경하는 루틴을 추가했습니다. 내가 이렇게 한 이유는 배터리가 정상으로 전환되는 것을 볼 수 있고 전환되는 것을 보기 위해 한 시간을 기다릴 필요가 없다는 것이었습니다. 몇 초 동안 HC-SR04 위에 손을 대면 LCD 백라이트가 깜박거리면서 전환되었음을 알 수 있습니다. 그러면 몇 초마다 릴레이 스위치가 들립니다. HC-SR04 위에 다시 손을 대면 다시 전환됩니다.

    다음은 코드의 압축입니다. BatteryMultiplexer

    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    <울>
  • 배터리 멀티플렉서 Arduino 코드
  • 배터리 멀티플렉서 Arduino 코드Arduino
    Arduino Uno를 사용했습니다.
    #include #include  // 버전 1.2.1 사용#include #include auto timer =timer_create_default(); // 기본 설정으로 타이머 생성// LCD 생성자 - 표시된 주소는 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 기반. 3가지 모두를 기대하기 시작합니다.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); // millisint time_on_counter =0마다 거리 판독기를 업데이트합니다. // 디스플레이의 카운터 on/offint time_on_count =100; //초가 될 시간 inint heart_beat =0; // 심장 박동을 표시하려면 이것을 0에서 1로 뒤집습니다.UltraSonicDistanceSensor distanceSensor(11, 12); // 디지털 핀 13과 12를 사용하는 센서를 초기화합니다. distance;int relays[] ={ relay1, relay2, relay3 };int is_live[] ={ 0, 0, 0}; // 라이브인 경우 1, 그렇지 않은 경우 0. 나는 3int debug =5 만 가지고 있습니다. // 디버그 메시지 수준으로 설정하여 직렬 프린터로 이동합니다. all_change_to(int which) { // 모든 릴레이를 HIGH 또는 LOW로 변경합니다. digitalWrite(릴레이2, 어느); digitalWrite(relay3, which);} 무효 토글_릴레이(int whichOne) { lcd.setCursor(0, 0); // lcd.print("Relay on:")에서 현재 릴레이가 어느 릴레이인지 표시합니다. lcd.print(현재 릴레이 + 1); // current_relay는 0 기반 all_change_to(HIGH); // 먼저 모두 끄기 digitalWrite(relays[current_relay], LOW); // 그리고 acnt++에서 켜져 있어야 하는 것을 설정합니다. // 작동 중임을 보여주는 카운터일 뿐입니다. lcd.print(" "); lcd.print(acnt);}void checkRelays() { // current_relay를 다음 릴레이로 이동 // 최대값에 도달하면 0에서 시작 // 여기에 있는 동안 toggle_relays를 호출하여 그렇지 않은지 확인 공백 또는 죽은 충전 charge_time_counter++; if (charge_time_counter>=charge_time_max) { current_relay++; if (current_relay>=max_relays) { current_relay =0; } 토글_릴레이(현재_릴레이); Charge_time_counter =0; }}void read_distance() { // HC-S204에서 거리를 읽습니다. // 80cm 이내에 있으면 디스플레이를 켜고 카운터에서 디스플레이를 재설정합니다. // 카운터에 도달하면 80cm 내에 아무것도 없으므로 디스플레이 끄기 거리 =distanceSensor.measureDistanceCm(); // 실제 측정된 거리를 보려면 주석 처리를 제거합니다. // Serial.print("Distance in CM:"); // Serial.println(거리); if (distance <80) { // 위의 주석을 제거하고 확인하십시오 lcd.backlight(); // 디스플레이 켜기 time_on_counter =0; } else { // 아마도 꺼질까요? time_on_counter++; if (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으로 설정 - 꺼져 있습니다. relays[0] =0; 릴레이[1] =0; 릴레이[2] =0; if (volts1> min_volts) { 릴레이[temp_cnt] =릴레이1; // 릴레이 1이 좋습니다. temp_cnt++; } if (volts2> min_volts) { relays[temp_cnt] =relay2; // 릴레이 2가 좋습니다. temp_cnt++; } if (volts3> min_volts) { 릴레이[temp_cnt] =릴레이3; // 릴레이 3이 좋습니다. temp_cnt++; } 최대 릴레이 =temp_cnt; // 이것은 lcd에 대한 하트 베팅입니다. - 실행 중임을 보여줍니다. lcd.setCursor(0, 1); if (heart_beat ==1) { lcd.print("<>"); heart_beat =0; } else { lcd.print("><"); heart_beat =1; } lcd.print(charge_time_counter); read_distance();} 무효 설정(){ Serial.begin(19200); Serial.println("시작"); lcd.begin(16, 2); // 16자 - 2줄 lcd.backlight(); 핀모드(릴레이1, 출력); 핀모드(릴레이2, 출력); 핀모드(릴레이3, 출력); all_change_to(HIGH); // 타이머를 설정합니다. 3 타이머 - 각 배터리의 충전기를 켜는 시간, // 전압 업데이트를 표시하는 빈도 // 및 디스플레이를 켜기 위해 읽기 거리를 확인하는 빈도 read_show_volts(); // 타이머를 기다릴 필요가 없도록 처음으로 수행합니다. 체크릴레이(); timer.every(chargeTime, checkRelays); timer.every(volts_update, read_show_volts);} 무효 루프(){ timer.tick(); // 타이머 틱}

    회로도

    멀티플렉서의 개략도

    제조공정

    1. 스마트 블라인드
    2. Arduino로 코인 억셉터 제어
    3. Arduino Temp. 3.2 디스플레이가 있는 모니터 및 실시간 시계
    4. Bluetooth가 탑재된 Arduino로 LED 제어!
    5. Arduino Power
    6. Nextion 디스플레이로 재생
    7. Arduino 및 Nokia 5110 디스플레이가 있는 DIY 전압계
    8. Arduino 교육 플랫폼
    9. Nextion 디스플레이로 Fridgeye 앱 구축
    10. Arduino로 태양 복사열 측정