정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

아두이노 여러개 동시 측정
종설어어엉 | 2018-05-15

1. 아두이노 오렌지보드오렌지 보드 사용중입니다

 

2. 아두이노 IDE사용중입니다

 

3. HC-SR04

 

4. trig – pin, echo – pin, gnd – gnd, vcc – 5v (이런식으로 5개 동시에 연결했습니다.)

 

5. 


//출력핀(trig)과 입력핀(echo) 연결 설정, 다른 핀을 연결해도 됨.
int trigPin1 = 13;
int echoPin1 = 12;
int trigPin2 = 11;
int echoPin2 = 10;
int trigPin3 = 9;
int echoPin3 = 8;
 int trigPin4 = 7;
int echoPin4 = 6;
 int trigPin5 = 5;
int echoPin5 = 4;
//시리얼 속도설정, trigPin을 출력, echoPin을 입력으로 설정
void setup(){
  Serial.begin(9600);
    pinMode(trigPin1, OUTPUT);
  pinMode(echoPin1, INPUT);
  pinMode(trigPin2, OUTPUT);
  pinMode(echoPin2, INPUT);
  pinMode(trigPin3, OUTPUT);
  pinMode(echoPin3, INPUT);
  pinMode(trigPin4, OUTPUT);
  pinMode(echoPin4, INPUT);
  pinMode(trigPin5, OUTPUT);
  pinMode(echoPin5, INPUT);
  Serial.println("CLEARDATA");
  Serial.println("LABEL,Time,distance1,distance2,distance3,distance4,distance5,rasor");
  
}
 
//초음파를 보낸다. 다 보내면 echo가 HIGH(신호받기) 상태로 대기
void loop(){
   Serial.print("DATA,TIME,");//현재 시간을 출력
  float duration1, distance1,duration2, distance2,duration3, distance3,duration4, distance4,duration5, distance5;
  digitalWrite(trigPin1, HIGH);

  digitalWrite(trigPin1, LOW);
 
  // echoPin 이 HIGH를 유지한 시간을 저장 한다.
  duration1 = pulseIn(echoPin1, HIGH);
  // HIGH 였을 때 시간(초음파가 보냈다가 다시 들어온 시간)을 가지고 거리를 계산 한다.
  // 340은 초당 초음파(소리)의 속도, 10000은 밀리세컨드를 세컨드로, 왕복거리이므로 2로 나눠준다.
  distance1 = ((float)(340 * duration1) / 10000) / 2;
     digitalWrite(trigPin2, HIGH);

  digitalWrite(trigPin2, LOW);
 
  // echoPin 이 HIGH를 유지한 시간을 저장 한다.
  duration2 = pulseIn(echoPin2, HIGH);
  // HIGH 였을 때 시간(초음파가 보냈다가 다시 들어온 시간)을 가지고 거리를 계산 한다.
  // 340은 초당 초음파(소리)의 속도, 10000은 밀리세컨드를 세컨드로, 왕복거리이므로 2로 나눠준다.
  distance2 = ((float)(340 * duration2) / 10000) / 2;

    digitalWrite(trigPin3, HIGH);

  digitalWrite(trigPin3, LOW);
 
  // echoPin 이 HIGH를 유지한 시간을 저장 한다.
  duration3 = pulseIn(echoPin3, HIGH);
  // HIGH 였을 때 시간(초음파가 보냈다가 다시 들어온 시간)을 가지고 거리를 계산 한다.
  // 340은 초당 초음파(소리)의 속도, 10000은 밀리세컨드를 세컨드로, 왕복거리이므로 2로 나눠준다.
  distance3 = ((float)(340 * duration3) / 10000) / 2;

      digitalWrite(trigPin4, HIGH);
 
  digitalWrite(trigPin4, LOW);
 
  // echoPin 이 HIGH를 유지한 시간을 저장 한다.
  duration4 = pulseIn(echoPin4, HIGH);
  // HIGH 였을 때 시간(초음파가 보냈다가 다시 들어온 시간)을 가지고 거리를 계산 한다.
  // 340은 초당 초음파(소리)의 속도, 10000은 밀리세컨드를 세컨드로, 왕복거리이므로 2로 나눠준다.
  distance4 = ((float)(340 * duration4) / 10000) / 2;
      digitalWrite(trigPin5, HIGH);

  digitalWrite(trigPin5, LOW);
 
  // echoPin 이 HIGH를 유지한 시간을 저장 한다.
  duration5 = pulseIn(echoPin5, HIGH);
  // HIGH 였을 때 시간(초음파가 보냈다가 다시 들어온 시간)을 가지고 거리를 계산 한다.
  // 340은 초당 초음파(소리)의 속도, 10000은 밀리세컨드를 세컨드로, 왕복거리이므로 2로 나눠준다.
  distance5 = ((float)(340 * duration4) / 10000) / 2;
   

  Serial.print(distance1);
  Serial.print(",");
   Serial.print(distance2);
  Serial.print(",");
  Serial.print(distance3);
  Serial.print(",");
   Serial.print(distance4);
    Serial.print(",");
   Serial.println(distance5);

}

 

6. 아두이노에서 실제로 센서 사람이 감지되면 렉?이 걸린다고 해야 할까요? 예를 들어 센서에 1초에 10개씩 측정값이 감지가 되었다면 사람이 지나갈 때 값이 바뀌니까 1초에 3개씩 감지가 됩니다.... 저희는 아두이노의 성능에 한계가 있는 것이 아닌가 생각해보고 있습니다. 그래서 생각한 해답이 라즈베리파이를 사용하거나 아두이노 여러 개를 사용하고자 합니다... 아두이노를 여러 개가 연결이 된다면 그렇게 하고 싶습니다.

 

요약하자면 저희가 하고자 하는 것은 동시에 초음파 5개의 측정값을 받아 엑셀에 정리하는 것입니다. 하지만 하나에 5개를 연결하면 렉이 걸립니다. 초음파 센서를 개수를 나누어 (예를 들어 한 아두이노에 2개, 다른 아두이노에 3개) 아두이노 2~3개에서 동시 측정되고 엑셀데이터 정리가 가능할지, 된다면 어떻게 해야하는지 궁금합니다.

이전글   |    서보모터 attach, detach 질문입니다 2018-05-11
다음글   |    MQ-5 가스센서 컴파일 에러 2 2018-05-15