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

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

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


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

페이지 정보

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

본문

	

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

 

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

 

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

 

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

 

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

 

 

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

 

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

 

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

 

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

물이 멈추게 하고 싶은데

 

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

 

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

 

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

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

 

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

 

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

 

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

 

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

 

 

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

댓글 12

조회수 106,176

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 19665
공지 사이트 이용 안내댓글[28] master 17-10-29 34155
질문 아두이노 리니어 제어 모듈 설계중입니다. 도와주세요 새글 갓비타 23-06-06 15
질문 dc모터 제어 관련 질문 드려요 ㅠㅠ!! 새글 dpwl 23-06-06 15
질문 pixy2 cam 을 이용한 색상인식 모터 제어 새글 가나다라 23-06-05 13
질문 안녕하세요 제품 품목 이름에 대해서 궁금합니다. 이미지새글첨부파일 알려주시면감사합니다 23-06-05 18
질문 Atmega128 온도센서로 led제어 질문드려요 이미지새글첨부파일 얍얍 23-06-05 23
질문 아구이노 코드를 atmega 128 코드로 변환 하고 싶습니다 ㅠㅠ 새글 기로롱 23-06-05 22
질문 atmega128 uart 질문입니다. bme12 23-06-05 23
질문 라즈베리파이에 풀 프레임 이미지센서 활용에 대한 질문이 있습니다. 이미지첨부파일 KYLO 23-06-04 19
질문 아두이노 시리얼 번호를 이용해 led 제어 wnion 23-06-04 21
질문 ATMEGA128 혹시 여기서 왜 인터럽트 기능이 안되는지 알 수 있나요 IEEE 23-06-04 33
질문 stm32f767을 이용해서 자이로가속도 센서의 값 받아오기 rlchwjswk 23-06-03 22
질문 아두이노 모터제어 관련해서 질문드립니다!댓글[1] 이미지첨부파일 아두이노어렵잖아 23-06-03 46
질문 atmega128 디지털조도센서 코드오류댓글[1] 이미지 까미 23-06-02 41
질문 atmega128 디지털 조도 센서댓글[1] 까미 23-06-02 41
질문 적외선리모콘으로 부저를제어 하는방법 질문입니다.댓글[4] Tell 23-06-02 24
질문 lora 무선 모듈에 관한 질문입니다.댓글[1] 로이스10 23-06-01 22
질문 적외선 송수신기 DC모터2개 제어 질문입니다.댓글[5] Tell 23-06-01 40
질문 스텝모터 제어 코드 질문댓글[5] pmh11 23-05-31 46
질문 초음파 센서를 이용한 인원 카운팅댓글[1] 초음파야 23-05-31 38
질문 모터 Hall 스위치 연결 문의댓글[1] 오후 23-05-31 26
질문 아두이노 lcd 문자 스크롤디스플레이 wnion 23-05-31 34
답변 답변글 답변 : 아두이노 lcd 문자 스크롤디스플레이댓글[1] master 23-05-31 34
질문 아두이노 타이머 인터럽트 미ㅏㄴㅇ 23-05-30 48
답변 답변글 답변 : 아두이노 타이머 인터럽트댓글[7] master 23-05-30 55
질문 THC-Soil Sensor with TTL 모듈 아두이노 센서값 받아오기댓글[1] ppiickle 23-05-30 34
질문 stm32 psd센서구동 질문댓글[2] 수포자 23-05-29 31
질문 앱인벤터 아두이노 보드 LCD 글씨 나타내기 질문댓글[7] 이미지 당찬병아리 23-05-29 49
질문 atmega128 led와 fan댓글[3] 이라 23-05-28 56
게시물 검색

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
모바일버전으로보기