댓글 감사합니다. 안드로이드12 등 최신 안드로이드 버전일 때 보안 정책이 강화되어 그런 것 같습니다. 저는 이 동영상 ( ruclips.net/video/UCJegMEYdJQ/видео.html ) 대로 MIT AI2 앱의 "권한" -> "근처기기" -> 허용 으로 설정을 바꾸었을 때 근처에 있는 블루투스 기기가 검색되고, 또 그 중 하나를 선택했을 때 앱이 정상적으로 실행되었습니다. 한 번 해 보시기 바랍니다.
현재 사용한 블루투스 모듈 HC-06은 1대1 접속만 가능합니다. 따라서 3곳에서 동시에 신호를 받을 수는 없습니다. HC-06 블루투스 모듈을 계속 이용하시려면 한 곳에서 신호를 받고 그것을 다른 방법으로 나머지 두 곳으로 전달하는 방법 밖에는 없습니다. 다른 곳으로 전달하는 방법은 잘 모르겠습니다. 그 방법 말고 아두이노 보드가 아니라 ESP32-CAM 보드를 이용하면 가능합니다. 가격은 1만원 안팎인데 블루투스 통신, 와이파이 모두 지원하여 블루투스 모듈을 구입할 필요가 없습니다. 초음파 센서를 ESP32-CAM 보드에 연결하고 ESP32-CAM 보드를 웹서버로 만들면, 여러 기기가 접속하여 거리값을 받아 볼 수 있습니다. 제 채널의 아래 영상이 그 방법을 소개하고 있습니다. ESP32-CAM: DHT11센서의 온도, 습도 알려주는 웹서버(AsyncWebServer) 구축하기 ( ruclips.net/video/JV1VSj5MMGk/видео.html ) 감사합니다.
댓글 감사합니다. 아두이노 코드에서는 delay(500) 으로 0.5초마다 한번씩 거리를 스마트폰으로 보냅니다. 앱인벤터로 만든 앱에서는 시계에서 타이머 간격을 400으로 0.4초마다 한번씩 블루투스로 온 값을 읽어들이도록 했습니다. 만약 아두이노 코드를 0.1초로 짧게 하면 즉, delay(100)으로 수정하면 0.1초마다 한번씩 거리를 스마트폰으로 보냅니다. 그러면 앱에서 0.4초마다 읽어들일 때는 아두이노에서 4번 보낸 값을 한번에 읽어 들이게 되어 그것들이 모두 한꺼번에 표시됩니다. 말씀 하신 상황은 이 상황인 것 같습니다. 아두이노 코드에서 보내는 시간 간격과 앱에서 읽어들이는 시간 간격이 비슷하거나 앱에서 읽어들이는 간격이 더 짧아야 숫자 여러 개를 한꺼번에 읽어들이는 일이 발생하지 않습니다. 그런데 앱에서 값을 읽어서 표시하는데도 시간이 걸리므로 타이머 간격이 너무 짧으면 앱의 처리 속도가 따라가지 못하여 오류가 발생할 수도 있습니다. 따라서 아두이노와 앱에서 시간 간격을 여러 가지로 바꾸어 보면서 오류가 발생하지 않는 값으로 설정하는 작업이 필요합니다.
댓글 감사합니다. 저도 맥주소 오류를 경험한 적 있습니다. 블루투스 연결 부분 코드에 오류가 있는 듯 합니다. 앱인벤터에서 디자인 마치고 "블록" 클릭하여 블루투스 연결 부분을 먼저 코딩했습니다. 제 영상 중에서 "목록선택버튼1"의 선택 후에 코드를 확인해 주세요. "선택된 항목" 블록이 맨 앞에도 들어가고 맨 뒤에도 들어갑니다. 여기에 "선택된 항목 번호" 블럭을 갖다 놓았을 때 맥주소 오류가 나왔던 기억이 납니다. 확인 바랍니다. 감사합니다.
댓글 감사합니다. 초음파 센서 3개를 하나의 아두이노에 연결하고, 3개의 거리값을 앱으로 받아 보시려고 하는지요? 그렇다면 앱은 1개면 됩니다. 아두이노에서 3개의 거리값을 읽은 후 하나의 문자열로 만들어 한 번에 스마트폰으로 보냅니다. 스마트폰 앱에서는 날아온 값을 분해해서 3개의 거리값을 각각 다른 레이블에 나타냅니다. 아두이노에서 첫번째 거리값(예를 들어 23.4)과 두 번재 거리값(45.5), 세번째 거리값(38.3)을 읽은 후 "f"+String(23.4)+"s"+String(45.5)+"t"+String(38.3) 이라는 하나의 문자열로 만들어서 보냅니다. 앱에서는 이 문자열 전체를 받은 후 f 뒤 문자 4개를 읽어 첫 번째 거리값을 표시하려는 레이블에 나타내고, s 뒤 문자 4개를 읽어 두 번째 거리값을 표시하려는 레이블에 나타내고, t뒤 문자 4개를 읽어서 세 번째 거리값을 표시하려는 레이블에 나타냅니다. 앱인벤터에서 블럭을 클릭하여 코딩할 때 공통 블럭 중 "텍스트"에 보면 "텍스트에서 문자열 추출하기" 등 문자열을 다루는 것들이 여럿 있습니다. 그것들을 이용하면 위와 같이 3개의 거리값으로 분해하여 처리할 수 있습니다. 잘 안되시면 글을 또 올려 주세요. 감사합니다.
댓글 감사합니다. 일단 초음파 센서가 하나 더 있고, 교체하기 쉽다면 초음파 센서만 교체하고 실행해 보세요. 거리값이 제대로 나오면 센서 문제였던 것이고, 제대로 나오지 않으면 센서가 아니라 다른 부분 문제입니다. 센서를 바꾸어도 계속 안된다면 아래와 같이 확인해 봅니다. 블루투스 통신은 연결된 것이 확실하다고 가정하고, 신호가 안 잡힌다는 것을 앱에서 거리값이 공백으로 나타난다는 말씀으로 간주하고 제 생각을 말씀 드리겠습니다. 먼저 아두이노 코드 중 거리값을 보내는 부분을 먼저 확인해 봅니다. 영상의 코드 중에서 아래 부분이 이해 해당합니다. if ( dis < 3000.0){ // 원인모를 오류 제거용 mybt.print(String(dis)); // 거리값을 보내는 부분 } 문법 오류나 누락으로 안 보내는지, 거리값을 보내긴 하는데 그 값이 공백인지, 제대로 된 값을 보내는지를 확인합니다. 이건 Serial 통신으로 확인할 수 있습니다. Serial 통신은 아두이노 코딩할 때 오류를 찾는 매우 유용한 방법입니다. 제 채널의 아래 영상에서 Serial 통신 방법을 소개하고 있습니다. 아두이노: 시리얼(Serial) 통신으로 LED 켜고 끄기( ruclips.net/video/qgIicGahEeI/видео.html ) 만약 안보낸다면 보내도록 코드를 수정합니다. 공백값을 보낸다면 아두이노 코드 중에서 센서값을 얻는 부분을 확인합니다. 이것도 Serial 통신으로 확인할 수 있습니다. 코드 중에서 아래 부분의 dis 값이 공백인지 확인합니다. 또 dur 값도 확인합니다. float dis = ((float)(340*dur)/10000)/2; 이렇게 코드부터 시작해서 하나씩 확인해 갑니다. 일단 해 보시다가 잘 안되시면 글을 또 올려 주세요. 감사합니다. //////////////////////////////// 본 영상의 아두이노 코드를 참고로 올립니다. #include SoftwareSerial mybt(2,3); void setup() { mybt.begin(9600); pinMode(7,OUTPUT); // Trig 핀 pinMode(8,INPUT); // Echo 핀 } void loop() { digitalWrite(7,LOW); digitalWrite(8,LOW); delayMicroseconds(2); digitalWrite(7,HIGH); delayMicroseconds(10); digitalWrite(7,LOW); unsigned long dur = pulseIn(8,HIGH); float dis = ((float)(340*dur)/10000)/2; if ( dis < 3000.0){ // 원인모를 오류 제거용 mybt.print(String(dis)); } delay(500); } ///////////////////////////////////////
댓글 감사합니다. 일단 초음파 센서가 하나 더 있고, 교체하기 쉽다면 초음파 센서만 교체하고 실행해 보세요. 거리값이 제대로 나오면 센서 문제였던 것이고, 제대로 나오지 않으면 센서가 아니라 다른 부분 문제입니다. 센서를 바꾸어도 같은 문제가 계속 발생한다면 아래와 같이 확인해 봅니다. 블루투스 통신은 연결된 것이 확실하다고 가정하고 신호가 안 잡힌다는 표현은 앱에서 거리값이 공백으로 나타난다는 것으로 이해하고 말씀 드리겠습니다. 먼저 아두이노 코드 중 거리값을 보내는 부분을 먼저 확인해 봅니다. 영상의 코드 중에서 아래 부분이 이해 해당합니다. if ( dis < 3000.0){ // 원인모를 오류 제거용 mybt.print(String(dis)); // 거리값을 보내는 부분 } 문법 오류나 누락으로 안 보내는지, 거리값을 보내긴 하는데 그 값이 공백인지, 제대로 된 값을 보내는지를 확인합니다. 이건 Serial 통신으로 확인할 수 있습니다. Serial 통신은 아두이노 코딩할 때 오류를 찾는 매우 유용한 방법입니다. 제 채널의 아래 영상에서 Serial 통신 방법을 소개하고 있습니다. 아두이노: 시리얼(Serial) 통신으로 LED 켜고 끄기( ruclips.net/video/qgIicGahEeI/видео.html ) 만약 안보낸다면 보내도록 코드를 수정합니다. 공백값을 보낸다면 아두이노 코드 중에서 센서값을 얻는 부분을 확인합니다. 영상의 코드 중에서 아래 부분입니다. float dis = ((float)(340*dur)/10000)/2; 이것도 Serial 통신으로 확인할 수 있습니다. 코드 중에서 아래 부분의 dis 값이 공백인지 확인합니다. 또 dur 값도 확인합니다. 이렇게 코드부터 시작해서 하나씩 확인해 갑니다. 일단 확인해 가시다가 계속 안되시면 글을 또 올려 주세요. 감사합니다. //////////////////////////////// 본 영상의 아두이노 코드를 참고로 올립니다. #include SoftwareSerial mybt(2,3); void setup() { mybt.begin(9600); pinMode(7,OUTPUT); // Trig 핀 pinMode(8,INPUT); // Echo 핀 } void loop() { digitalWrite(7,LOW); digitalWrite(8,LOW); delayMicroseconds(2); digitalWrite(7,HIGH); delayMicroseconds(10); digitalWrite(7,LOW); unsigned long dur = pulseIn(8,HIGH); float dis = ((float)(340*dur)/10000)/2; if ( dis < 3000.0){ // 원인모를 오류 제거용 mybt.print(String(dis)); } delay(500); } ///////////////////////////////////////
영상이랑 똑같이 했는데 앱이랑 아두이노랑 연결이 안 돼요. 영상에서처럼 연결 버튼을 누르면 저런 화면이 아니라 검은 화면이 뜨는데 어떻게 해야하나요?
댓글 감사합니다.
안드로이드12 등 최신 안드로이드 버전일 때 보안 정책이 강화되어 그런 것 같습니다. 저는 이 동영상 ( ruclips.net/video/UCJegMEYdJQ/видео.html ) 대로 MIT AI2 앱의 "권한" -> "근처기기" -> 허용 으로 설정을 바꾸었을 때 근처에 있는 블루투스 기기가 검색되고, 또 그 중 하나를 선택했을 때 앱이 정상적으로 실행되었습니다. 한 번 해 보시기 바랍니다.
초음파센서 1개를 하나의 아두이노에 연결하고 이세트 3개를 동시에 신호를 받는 방법이 있는지요?
현재 사용한 블루투스 모듈 HC-06은 1대1 접속만 가능합니다. 따라서 3곳에서 동시에 신호를 받을 수는 없습니다.
HC-06 블루투스 모듈을 계속 이용하시려면 한 곳에서 신호를 받고 그것을 다른 방법으로 나머지 두 곳으로 전달하는 방법 밖에는 없습니다.
다른 곳으로 전달하는 방법은 잘 모르겠습니다.
그 방법 말고
아두이노 보드가 아니라 ESP32-CAM 보드를 이용하면 가능합니다.
가격은 1만원 안팎인데 블루투스 통신, 와이파이 모두 지원하여 블루투스 모듈을 구입할 필요가 없습니다.
초음파 센서를 ESP32-CAM 보드에 연결하고
ESP32-CAM 보드를 웹서버로 만들면, 여러 기기가 접속하여 거리값을 받아 볼 수 있습니다.
제 채널의 아래 영상이 그 방법을 소개하고 있습니다.
ESP32-CAM: DHT11센서의 온도, 습도 알려주는 웹서버(AsyncWebServer) 구축하기 ( ruclips.net/video/JV1VSj5MMGk/видео.html )
감사합니다.
@@gyungun 답변 감사합니다.
딜레이를 짧게 하니 앱 인벤터에서 숫자가 여러개 겹쳐서 나옵니다.
댓글 감사합니다.
아두이노 코드에서는 delay(500) 으로 0.5초마다 한번씩 거리를 스마트폰으로 보냅니다. 앱인벤터로 만든 앱에서는 시계에서 타이머 간격을 400으로 0.4초마다 한번씩 블루투스로 온 값을 읽어들이도록 했습니다. 만약 아두이노 코드를 0.1초로 짧게 하면 즉, delay(100)으로 수정하면 0.1초마다 한번씩 거리를 스마트폰으로 보냅니다. 그러면 앱에서 0.4초마다 읽어들일 때는 아두이노에서 4번 보낸 값을 한번에 읽어 들이게 되어 그것들이 모두 한꺼번에 표시됩니다. 말씀 하신 상황은 이 상황인 것 같습니다.
아두이노 코드에서 보내는 시간 간격과 앱에서 읽어들이는 시간 간격이 비슷하거나 앱에서 읽어들이는 간격이 더 짧아야 숫자 여러 개를 한꺼번에 읽어들이는 일이 발생하지 않습니다.
그런데 앱에서 값을 읽어서 표시하는데도 시간이 걸리므로 타이머 간격이 너무 짧으면 앱의 처리 속도가 따라가지 못하여 오류가 발생할 수도 있습니다. 따라서 아두이노와 앱에서 시간 간격을 여러 가지로 바꾸어 보면서 오류가 발생하지 않는 값으로 설정하는 작업이 필요합니다.
여기에서 일정거리 10하로 가까워지면 휴데폰으로 음성을 출력하고 싶은데 어떤식으로 바꿔야 할까요?
댓글 감사합니다.
앱을 수정해야 합니다. 아두이노로부터 날아온 값을 스마트폰에서 읽어들인 직후에 그 값을 10과 비교합니다. 10보다 작으면 음성 들어간 소리 파일을 실행하도록 앱인벤터 코드를 수정하면 될 것 같습니다.
@@gyungun 감사합니다!
블루투스 연결이 안되는데 뭐가 문제일까요? 맥주소가 틀리다고 나오네요
댓글 감사합니다. 저도 맥주소 오류를 경험한 적 있습니다. 블루투스 연결 부분 코드에 오류가 있는 듯 합니다.
앱인벤터에서 디자인 마치고 "블록" 클릭하여 블루투스 연결 부분을 먼저 코딩했습니다.
제 영상 중에서 "목록선택버튼1"의 선택 후에 코드를 확인해 주세요. "선택된 항목" 블록이 맨 앞에도 들어가고 맨 뒤에도 들어갑니다. 여기에 "선택된 항목 번호" 블럭을 갖다 놓았을 때 맥주소 오류가 나왔던 기억이 납니다. 확인 바랍니다. 감사합니다.
@@gyungun 아 되네요.. 빠른답변 정말 감사드립니다.
@@fs77oss 다행입니다. 감사합니다.
3개 를 연결하려 하는데 앱을 3개를 써야 하나요?
댓글 감사합니다.
초음파 센서 3개를 하나의 아두이노에 연결하고, 3개의 거리값을 앱으로 받아 보시려고 하는지요? 그렇다면 앱은 1개면 됩니다.
아두이노에서 3개의 거리값을 읽은 후 하나의 문자열로 만들어 한 번에 스마트폰으로 보냅니다.
스마트폰 앱에서는 날아온 값을 분해해서 3개의 거리값을 각각 다른 레이블에 나타냅니다.
아두이노에서 첫번째 거리값(예를 들어 23.4)과 두 번재 거리값(45.5), 세번째 거리값(38.3)을 읽은 후 "f"+String(23.4)+"s"+String(45.5)+"t"+String(38.3) 이라는 하나의 문자열로 만들어서 보냅니다.
앱에서는 이 문자열 전체를 받은 후 f 뒤 문자 4개를 읽어 첫 번째 거리값을 표시하려는 레이블에 나타내고, s 뒤 문자 4개를 읽어 두 번째 거리값을 표시하려는 레이블에 나타내고, t뒤 문자 4개를 읽어서 세 번째 거리값을 표시하려는 레이블에 나타냅니다.
앱인벤터에서 블럭을 클릭하여 코딩할 때 공통 블럭 중 "텍스트"에 보면 "텍스트에서 문자열 추출하기" 등 문자열을 다루는 것들이 여럿 있습니다. 그것들을 이용하면 위와 같이 3개의 거리값으로 분해하여 처리할 수 있습니다.
잘 안되시면 글을 또 올려 주세요. 감사합니다.
@@gyungun 초음파센서 1개를 하나의 아두이노에 연결하고 이것을 3개를 한 화면에서 보려고 합니다.
블루투스는 연결은 되는데 거리 신호가 안잡힐때는 초음파 센서 문제 인가요?
댓글 감사합니다.
일단 초음파 센서가 하나 더 있고, 교체하기 쉽다면 초음파 센서만 교체하고 실행해 보세요. 거리값이 제대로 나오면 센서 문제였던 것이고, 제대로 나오지 않으면 센서가 아니라 다른 부분 문제입니다.
센서를 바꾸어도 계속 안된다면 아래와 같이 확인해 봅니다.
블루투스 통신은 연결된 것이 확실하다고 가정하고, 신호가 안 잡힌다는 것을 앱에서 거리값이 공백으로 나타난다는 말씀으로 간주하고 제 생각을 말씀 드리겠습니다.
먼저 아두이노 코드 중 거리값을 보내는 부분을 먼저 확인해 봅니다. 영상의 코드 중에서 아래 부분이 이해 해당합니다.
if ( dis < 3000.0){ // 원인모를 오류 제거용
mybt.print(String(dis)); // 거리값을 보내는 부분
}
문법 오류나 누락으로 안 보내는지, 거리값을 보내긴 하는데 그 값이 공백인지, 제대로 된 값을 보내는지를 확인합니다.
이건 Serial 통신으로 확인할 수 있습니다. Serial 통신은 아두이노 코딩할 때 오류를 찾는 매우 유용한 방법입니다. 제 채널의 아래 영상에서 Serial 통신 방법을 소개하고 있습니다.
아두이노: 시리얼(Serial) 통신으로 LED 켜고 끄기( ruclips.net/video/qgIicGahEeI/видео.html )
만약 안보낸다면 보내도록 코드를 수정합니다.
공백값을 보낸다면 아두이노 코드 중에서 센서값을 얻는 부분을 확인합니다. 이것도 Serial 통신으로 확인할 수 있습니다. 코드 중에서 아래 부분의 dis 값이 공백인지 확인합니다. 또 dur 값도 확인합니다.
float dis = ((float)(340*dur)/10000)/2;
이렇게 코드부터 시작해서 하나씩 확인해 갑니다.
일단 해 보시다가 잘 안되시면 글을 또 올려 주세요. 감사합니다.
////////////////////////////////
본 영상의 아두이노 코드를 참고로 올립니다.
#include
SoftwareSerial mybt(2,3);
void setup() {
mybt.begin(9600);
pinMode(7,OUTPUT); // Trig 핀
pinMode(8,INPUT); // Echo 핀
}
void loop() {
digitalWrite(7,LOW);
digitalWrite(8,LOW);
delayMicroseconds(2);
digitalWrite(7,HIGH);
delayMicroseconds(10);
digitalWrite(7,LOW);
unsigned long dur = pulseIn(8,HIGH);
float dis = ((float)(340*dur)/10000)/2;
if ( dis < 3000.0){ // 원인모를 오류 제거용
mybt.print(String(dis));
}
delay(500);
}
///////////////////////////////////////
댓글 감사합니다. 일단 초음파 센서가 하나 더 있고, 교체하기 쉽다면 초음파 센서만 교체하고 실행해 보세요. 거리값이 제대로 나오면 센서 문제였던 것이고, 제대로 나오지 않으면 센서가 아니라 다른 부분 문제입니다.
센서를 바꾸어도 같은 문제가 계속 발생한다면 아래와 같이 확인해 봅니다. 블루투스 통신은 연결된 것이 확실하다고 가정하고 신호가 안 잡힌다는 표현은 앱에서 거리값이 공백으로 나타난다는 것으로 이해하고 말씀 드리겠습니다.
먼저 아두이노 코드 중 거리값을 보내는 부분을 먼저 확인해 봅니다. 영상의 코드 중에서 아래 부분이 이해 해당합니다.
if ( dis < 3000.0){ // 원인모를 오류 제거용
mybt.print(String(dis)); // 거리값을 보내는 부분
}
문법 오류나 누락으로 안 보내는지, 거리값을 보내긴 하는데 그 값이 공백인지, 제대로 된 값을 보내는지를 확인합니다. 이건 Serial 통신으로 확인할 수 있습니다. Serial 통신은 아두이노 코딩할 때 오류를 찾는 매우 유용한 방법입니다. 제 채널의 아래 영상에서 Serial 통신 방법을 소개하고 있습니다.
아두이노: 시리얼(Serial) 통신으로 LED 켜고 끄기( ruclips.net/video/qgIicGahEeI/видео.html )
만약 안보낸다면 보내도록 코드를 수정합니다.
공백값을 보낸다면 아두이노 코드 중에서 센서값을 얻는 부분을 확인합니다. 영상의 코드 중에서 아래 부분입니다.
float dis = ((float)(340*dur)/10000)/2;
이것도 Serial 통신으로 확인할 수 있습니다. 코드 중에서 아래 부분의 dis 값이 공백인지 확인합니다. 또 dur 값도 확인합니다.
이렇게 코드부터 시작해서 하나씩 확인해 갑니다.
일단 확인해 가시다가 계속 안되시면 글을 또 올려 주세요. 감사합니다.
////////////////////////////////
본 영상의 아두이노 코드를 참고로 올립니다.
#include
SoftwareSerial mybt(2,3);
void setup() {
mybt.begin(9600);
pinMode(7,OUTPUT); // Trig 핀
pinMode(8,INPUT); // Echo 핀
}
void loop() {
digitalWrite(7,LOW);
digitalWrite(8,LOW);
delayMicroseconds(2);
digitalWrite(7,HIGH);
delayMicroseconds(10);
digitalWrite(7,LOW);
unsigned long dur = pulseIn(8,HIGH);
float dis = ((float)(340*dur)/10000)/2;
if ( dis < 3000.0){ // 원인모를 오류 제거용
mybt.print(String(dis));
}
delay(500);
}
///////////////////////////////////////
초음파센서센서 값을 HC-05로 앱인벤터로 보내 앱인벤터에서 그 값을 확인하고 싶은대 값자체를 못받습니다
이와 관련해서 메일로 문의드려도될까요?
네 메일 주세요
Gyungun88@gmail.com