질문게시판 > 수위센서 솔벨브 제어 관련 질문드리겠습니다.

TODAY1,108 TOTAL2,176,416
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | 질문게시판 | 수위센서 솔벨브 제어 관련 질문드리겠습니다.

페이지 정보

작성자 자카르타정 작성일2020-04-04 01:48 조회70,428회 댓글12건

본문

	

안녕하세요 아두이노 초보 입니다.

 

인도네시아 저소득층을 위해 현재 무상으로 정수기 설치 사업을 하고 있습니다.

 

어린 친구들이 정수된 물을 받아가기 위해  통에 물을 받는데

 

딱히 자동으로 급수하는 시스템이 없어 물을 다 받을때 까지 하염없이 기다려야 되는 상황입니다.

 

잠깐 한눈을 팔면 정수된 물이 넘쳐서 버리게 됩니다.ㅜㅜ

 

 

급하게 배워 여기 저기 붙혀넣기로 코딩을 했는데

 

푸시 버튼을 누르면 릴레이 동작, 솔벨브 on

 

수위센서에 물이 감지되면 릴레이 off  솔벨브 off

 

문제는 중간에 푸시버튼을 한 번 더 누르면 수위센서와 상관없이

물이 멈추게 하고 싶은데

 

아무리 해도 되질 않네요ㅠㅠ

 

그리고 물을 다 받고 수위 센서를 제거하면 바로 릴레이가 동작해 솔벨브가 열립니다.

 

물이 다 차서 수위센서가 감지되면

다시 푸시 버튼을 누를때 까지 릴레이가 멈출 수 있을까요?

 

전문가 분들의 도움을 부탁드리겠습니다.

 

우노보드 하나 가지고 릴레이 2개 솔벨브 2개 수위센서 2개도 동시에 제어가 가능한가요?

 

너무 초보적인 질문이라 죄송합니다. 50이 넘어서 처음으로 배우고 하다보니 많이 서툽니다

 

감사합니다. 좋은 저녁 되시고 건강한 하루 되십시오

 

 

  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글 12

조회수 70,428

master님의 댓글

master 작성일

아두이노는 초등학생과 주부님도 합니다.
따라서 나이는 상관없고요...얼마나 공부했는지에 따라서 결과가 달라지게 됩니다.

그동안 작성했던 소스를 첨부하셔야지 도움을 드립니다.
전체 소스를 작성 해달라고 하신다면 무료가 아닌 유료로만 가능합니다.

자카르타정님의 댓글

자카르타정 작성일

아 네 죄송합니다 잘 몰랐습니다.
만들었던 소스 첨부드립니다. 감사합니다

int analogPin_01 = 0;    // 1번 수위센서
/*
int analogPin_02 = 1;    // 1번 수위센서
int analogPin_03 = 2;    // 1번 수위센서
*/

int val = 0;          // 전류변화 변수
int Relaypin_01 = 3;    // 1번 릴레이
/*
int Relaypin_02 = 4;    // 2번 릴레이
int Relaypin_03 = 5;    // 3번 릴레이
*/
int Switch_01 = 9;  // 1번 스위치
/*
int Switch_02 = 10; // 2번 스위치
int Switch_03 = 11; // 3번 스위치
*/
 
void setup()
{
  pinMode(Relaypin_01,OUTPUT);        // 1번 릴레이를 출력
  pinMode(Switch_01,INPUT_PULLUP);    // 1번 스위치 입력
 /* pinMode(Switch_02,INPUT_PULLUP);    // 2번 스위치를 입력
  pinMode(Switch_03,INPUT_PULLUP);    // 3번 스위치를 입력

Serial.begin (9600);          // 시리얼모니터 설정*/
}
 




 
void loop()
{
  if(digitalRead(Switch_01)==LOW)      // 1번 버튼 스위치를 누르면
 {
    digitalWrite(Relaypin_01,HIGH);    // 1채널 릴레이 ON

    }
{
  val = analogRead(analogPin_01);  // analogPin 의 변화값(전류값)을 읽음

  if (val > 100)                // val 값이 100이 넘으면 (전류가 100이 넘으면)
  {
    digitalWrite(Relaypin_01,LOW);    // 1채널 릴레이 off
   
  }
  }
  }

자카르타정님의 댓글

자카르타정 작성일

참 그리고 유료 의뢰를 하면 비용이 얼마정도들지 알 수 있을까요?

4004님의 댓글

4004 작성일

KOICA로 계신가 보군요.
로직이 어려워보이지는 않는데요.
1개의 버튼, 솔밸브, 릴레이, 수위센서
이렇게 됩니까?
솔밸브와 릴레이의 관계는 어떻게 되나요?
1) 버튼은 시작과 다시누르면 멈추는 기능을 동시에가져야 할듯하고
2) 버튼을 한번 누르면 릴레이가 작동하여 솔밸브를 열고, 다시누르면 멈춰야 하며
3) 버튼을 눌러 물이 나오는 상황(릴레이작동 및 솔밸브열림)에서 센서값이 100이상이면 무조건 멈추어야 하나요?

자카르타정님의 댓글

자카르타정 댓글의 댓글 작성일

네 버튼 1개인데 3개 정도로 가능하면 늘이고 싶습니다.
중간에 버튼을 누르면 수위 센서와 상관 없이 물이 멈추게 하고 싶습니다.
릴레이가 on 되면 솔벨브는 열리게 되어있습니다.

그리고 지금 문제는 뚜껑에 수위센서를 달아 놓았는데 물이 다 차서 멈추는 것 까진 됩니다
그런데 뚜껑을 제거하면 다시 물이 쏟아져 나옵니다. 그래서 물을 수동으로 잠그고 뚜껑을 제거합니다

4004님의 댓글

4004 댓글의 댓글 작성일

생각좀 해보구요.
아나로그 입력이 3개, 디지털 입력/출력이 각 3개네요
아두이노 우노 1개로 가능할것 같습니다.
문제는 로직인데, 제가 로직을 뚝딱만들수 있는 능력은 아니라서, 시간을 좀 주세요.
그리고 다른분이 도움을 바로 주실 수도 있을 겁니다.
수위센서값이 100이상이면 멈추는 것이죠?

4004님의 댓글

4004 작성일

int analogPin_01 = 0;    // 1번 수위센서
int analogPin_02 = 1;    // 1번 수위센서
int analogPin_03 = 2;    // 1번 수위센서

int Relaypin_01 = 3;    // 1번 릴레이
int Relaypin_02 = 4;    // 2번 릴레이
int Relaypin_03 = 5;    // 3번 릴레이

int val1 = 0;          // 전류변화 변수
int val2 = 0;          // 전류변화 변수
int val3 = 0;          // 전류변화 변수

int Switch_01 = 9;  // 1번 스위치
int Switch_02 = 10; // 2번 스위치
int Switch_03 = 11; // 3번 스위치
bool Switch_01TF = false;  // 1번 스위치 설정값
bool Switch_02TF = false;  // 1번 스위치 설정값
bool Switch_03TF = false;  // 1번 스위치 설정값
 
void setup() {
  pinMode(Relaypin_01,OUTPUT);        // 1번 릴레이를 출력
  pinMode(Relaypin_02,OUTPUT);        // 1번 릴레이를 출력
  pinMode(Relaypin_03,OUTPUT);        // 1번 릴레이를 출력
  pinMode(Switch_01,INPUT_PULLUP);    // 1번 스위치 입력
  pinMode(Switch_02,INPUT_PULLUP);    // 2번 스위치를 입력
  pinMode(Switch_03,INPUT_PULLUP);    // 3번 스위치를 입력

  Serial.begin (9600);          // 시리얼모니터 설정*/
}
 
void loop() {
  if(digitalRead(Switch_01)==LOW) {
    Switch_01TF =!Switch_01TF;
    if(Switch_01TF == true ) digitalWrite(Relaypin_01,HIGH);    // 1채널 릴레이 ON
    else                    digitalWrite(Relaypin_01,LOW);    // 1채널 릴레이 OFF
  }
  if(digitalRead(Switch_02)==LOW) {
    Switch_02TF =!Switch_02TF;
    if(Switch_02TF == true ) digitalWrite(Relaypin_02,HIGH);    // 1채널 릴레이 ON
    else                    digitalWrite(Relaypin_02,LOW);    // 1채널 릴레이 OFF
  }
  if(digitalRead(Switch_03)==LOW) {
    Switch_03TF =!Switch_03TF;
    if(Switch_03TF == true ) digitalWrite(Relaypin_03,HIGH);    // 1채널 릴레이 ON
    else                    digitalWrite(Relaypin_03,LOW);    // 1채널 릴레이 OFF
  }

  val1 = analogRead(analogPin_01);  // analogPin 의 변화값(전류값)을 읽음
  val2 = analogRead(analogPin_02);  // analogPin 의 변화값(전류값)을 읽음
  val3 = analogRead(analogPin_03);  // analogPin 의 변화값(전류값)을 읽음

  if (val1 > 100) {
    digitalWrite(Relaypin_01,LOW);    // 1채널 릴레이 off
    Switch_01TF = false;
  }
  if (val2 > 100) {
    digitalWrite(Relaypin_02,LOW);    // 1채널 릴레이 off
    Switch_02TF = false;
  }
  if (val3 > 100) {
    digitalWrite(Relaypin_03,LOW);    // 1채널 릴레이 off
    Switch_03TF = false;
  }
}

버튼바운스 문제가 있긴 한데, 우선 해 보세요.
버튼은 한번 누르면 솔밸브 온, 한번 더 누르면 오프입니다.

자카르타정님의 댓글

자카르타정 작성일

아 정말 감사드립니다!!!!!!
적용해보겠습니다.!!!
감사합니다!!
감사합니다!!

자카르타정님의 댓글

자카르타정 작성일

네 결과 보고 드리겠습니다
1번 릴레이는 전원 켜자마자 on 버튼 및 수위센서 상관 없이 계속 ON
2번, 3번 릴레이는 전원 켜고 0,5초 뒤에 on 2번 버튼을 누를 시 off 떼면 바로 다시 on 버튼을 연타하면 꺼지고, 또 연타 하면 꺼짐 일정치 않음
수위센서는 123 전체 동작하지 않음
이상입니다

4004님의 댓글

4004 댓글의 댓글 작성일

안녕하세요?
지금 제가드린 프로그램은, loop()함수가 빨리돌면 릴레이동작이 켜졌다 꺼졌다가 할수 있어서, 문제가 있습니다.
master님이 주신 코드를 해보시고 잘 안되면 제거를 다시 수정해 드리겠습니다.
그리고 LED하고 220ohm이나 330ohm저항을 가지고 계시면 릴레이 동작시 LED불들어오게 하면 사용자가 확인하기 쉬울것 같네요.

4004님의 댓글

4004 댓글의 댓글 작성일

실재 확인해 보고 다시 작성한것을 보내 드립니다.
스위치가 문제인데, 릴레이 출력버튼에다 LED를 달아서 상태를 확인하는게 가장 좋아 보입니다.
그렇지 않으면 릴레이(연습은 LED)가 켜진상태인지 꺼진상태인지 확인하기가 힘드네요..
수위센서 A0가 1번, A1이 2번, A3가 3번
릴레이 D3이 1번, D4가 2번, D5가 3번,
스위치 D9가 1번, D10이 2번, D11이 3번 입니다.
스위치에다 10kohm저항은 다셨죠?

소스에서 debounceDelay는 스위치 안정될 때 까지 기다리는 것인데, 상황에 맞게 수정해 보세요..
debounce함수는 아두이노쿡북, 2nd판의 196p에서 차용한것입니다.


소스
const int debounceDelay = 50; // 안정된 상태가 될 때까지 기다리는 시간(밀리초)
int analogPin_01 = A0;    // 1번 수위센서
int analogPin_02 = A1;    // 2번 수위센서
int analogPin_03 = A2;    // 3번 수위센서

int Relaypin_01 = 3;    // 1번 릴레이
int Relaypin_02 = 4;    // 2번 릴레이
int Relaypin_03 = 5;    // 3번 릴레이

int val1 = 0;          // 전류변화 변수
int val2 = 0;          // 전류변화 변수
int val3 = 0;          // 전류변화 변수

int Switch_01 = 9;  // 1번 스위치
int Switch_02 = 10; // 2번 스위치
int Switch_03 = 11; // 3번 스위치
bool Switch_01TF = false;  // 1번 스위치 설정값
bool Switch_02TF = false;  // 1번 스위치 설정값
bool Switch_03TF = false;  // 1번 스위치 설정값
 
void setup() {
  pinMode(Relaypin_01,OUTPUT);        // 1번 릴레이를 출력
  pinMode(Relaypin_02,OUTPUT);        // 1번 릴레이를 출력
  pinMode(Relaypin_03,OUTPUT);        // 1번 릴레이를 출력
  pinMode(Switch_01,INPUT_PULLUP);    // 1번 스위치 입력
  pinMode(Switch_02,INPUT_PULLUP);    // 2번 스위치를 입력
  pinMode(Switch_03,INPUT_PULLUP);    // 3번 스위치를 입력

  Serial.begin (9600);          // 시리얼모니터 설정*/
}
 
void loop() {
  if(debounce(Switch_01)) {
    Switch_01TF =!Switch_01TF;
    if(Switch_01TF == true ) digitalWrite(Relaypin_01,HIGH);    // 1채널 릴레이 ON
    else                    digitalWrite(Relaypin_01,LOW);    // 1채널 릴레이 OFF
  }
  if(debounce(Switch_02)) {
    Switch_02TF =!Switch_02TF;
    if(Switch_02TF == true ) digitalWrite(Relaypin_02,HIGH);    // 1채널 릴레이 ON
    else                    digitalWrite(Relaypin_02,LOW);    // 1채널 릴레이 OFF
  }
  if(debounce(Switch_03)) {
    Switch_03TF =!Switch_03TF;
    if(Switch_03TF == true ) digitalWrite(Relaypin_03,HIGH);    // 1채널 릴레이 ON
    else                    digitalWrite(Relaypin_03,LOW);    // 1채널 릴레이 OFF
  }

  val1 = analogRead(analogPin_01);  // analogPin 의 변화값(전류값)을 읽음
  val2 = analogRead(analogPin_02);  // analogPin 의 변화값(전류값)을 읽음
  val3 = analogRead(analogPin_03);  // analogPin 의 변화값(전류값)을 읽음

  if (val1 > 100) {
    digitalWrite(Relaypin_01,LOW);    // 1채널 릴레이 off
    Switch_01TF = false;
  }
  if (val2 > 100) {
    digitalWrite(Relaypin_02,LOW);    // 1채널 릴레이 off
    Switch_02TF = false;
  }
  if (val3 > 100) {
    digitalWrite(Relaypin_03,LOW);    // 1채널 릴레이 off
    Switch_03TF = false;
  }

  Serial.print("val1 : ");
  Serial.print(val1, DEC);
  Serial.print("  val2 : ");
  Serial.print(val2, DEC);
  Serial.print("  val3 : ");
  Serial.println(val3, DEC);
}

boolean debounce(int pin)
{
  boolean state;
  boolean previousState;
  previousState = digitalRead(pin);          // store switch state
  for (int counter=0; counter < debounceDelay; counter++)
  {
      delay(1);                  // wait for 1 millisecond
      state = digitalRead(pin);  // read the pin
      if (state != previousState)
      {
        counter = 0; // reset the counter if the state changes
        previousState = state;  // and save the current state
      }
  }
  // here when the switch state has been stable longer than the debounce period
  if(state == LOW)
    return true;
  else
    return false;
}

자카르타정님의 댓글

자카르타정 작성일

감사합니다. 마스터님이 일단 주신 코드를 적용시켜 매우 잘 동작하고 있습니다.
이렇게 큰 도움 주셔서 정말 감사드립니다.
건강한 하루 되십시오!!

정말 다시한번 감사드립니다

질문게시판HOME > 질문게시판 목록

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은 질문게시판에서만 작성 가능합니다. 스태프 19-01-15 9703
공지 사이트 이용 안내댓글[24] master 17-10-29 29870
질문 아두이노 모터 질문 새글첨부파일 todd33671 17:51 12
질문 압력센서 질문있습니다.댓글[3] 새글 브레이크 14:17 18
질문 아두이노 코딩 질문댓글[1] 이미지새글 에도이누 14:05 21
질문 esp32를 이용한 피에조부저댓글[1] 이미지새글 ejdog 22-05-27 18
질문 아두이노 서보모터 무한회전 문제 해결을 어떻게 해야할까요 새글 GinGer 22-05-27 22
답변 답변글 답변 : 아두이노 서보모터 무한회전 문제 해결을 어떻게 해야할까요댓글[5] 새글 master 22-05-27 37
질문 모터 엔코더 제어 질문드립니다. 새글 oreoreo 22-05-27 21
답변 답변글 답변 : 모터 엔코더 제어 질문드립니다. 새글 master 22-05-27 16
질문 아두이노 RF무선통신 관련 질문입니다.댓글[2] 새글 메론맛드링크 22-05-27 20
질문 아두이노 속도측정, 속도를 LCD에 표시, 가까워지면 부저 새글 wgtjdwls 22-05-27 23
답변 답변글 답변 : 아두이노 속도측정, 속도를 LCD에 표시, 가까워지면 부저 새글 master 22-05-27 21
질문 블루투스 관련 코드 도와주세요 새글 scape 22-05-27 21
답변 답변글 답변 : 블루투스 관련 코드 도와주세요 새글 master 22-05-27 19
질문 ATmega128 1602A LCD 출력 질문입니다.댓글[2] 새글 444222a 22-05-27 43
질문 ATmega128 스위치 채터링 관련 질문드립니다댓글[3] 새글 yeon 22-05-27 53
질문 마이크로칩 스튜디오 코드 해석 새글 최선을다하자 22-05-27 25
답변 답변글 답변 : 마이크로칩 스튜디오 코드 해석 새글 master 22-05-27 28
질문 적외선 거리 센서로 블루투스 알람 설정 코딩...댓글[1] 새글 ededed 22-05-26 28
질문 아두이노 api 질문댓글[1] 첨부파일 리니어 22-05-26 23
질문 atmega128 키패드 입력 오류에 대하여 질문 있습니다.댓글[2] 마프하나 22-05-26 62
질문 초음파센싱을 통한 리니어벨트 (스텝모터사용) 조건문댓글[1] 아두이노대학 22-05-26 38
질문 아트메가128/ srf05 초음파센서를 이용한 타이머 인터럽트 질문입니다 아트메가넘어려워 22-05-26 36
답변 답변글 답변 : 아트메가128/ srf05 초음파센서를 이용한 타이머 인터럽트 질문입니다 master 22-05-26 41
질문 atmega128에서 스위치1개는LED, 스위치 1개는 세그먼트의 동작하게 하려는데.. aasdw 22-05-26 69
답변 답변글 답변 : atmega128에서 스위치1개는LED, 스위치 1개는 세그먼트의 동작하게 하려는데..댓글[1] master 22-05-26 60
질문 Atmega128 블루투스 오류 질문 yhj2644 22-05-26 66
답변 답변글 답변 : Atmega128 블루투스 오류 질문 master 22-05-26 45
질문 아두이노 간단한 프로그램 행복지수업 22-05-25 54
게시물 검색

2022년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기