앱인벤터: 5버튼 RC카 조종 앱 코딩하기

Поделиться
HTML-код
  • Опубликовано: 3 янв 2025

Комментарии • 6

  • @박벌룬
    @박벌룬 Год назад

    안녕하세요!!!!!!!!!!! 알씨카장인님!! 블루투스 연결까지는 되는데 알씨카가 조작이 안돼요 ㅜㅜㅠ 뭐가 문제일까요 ㅠㅠ 살려주세요

    • @gyungun
      @gyungun  Год назад

      댓글 감사합니다.
      코드 오류일 가능성이 있고, 조립 오류일 수도 있습니다. 간혹 부품이 불량이거나 고장난 경우도 있습니다.
      먼저 코드 오류 부터 살펴 보세요. 특히 스마트폰에서 보낸 값과 아두이노에서 받아서 처리하는 값이 같은지 확인해 보세요. 스마트폰에서 "2c"를 보냈다면 아두이노에서도 ms = mySerial.readStringUntil('c'); 이런식으로 받아야 합니다. 두 군데 모두 소문자 c 이어야 합니다. 한 곳은 대문자, 한 곳은 소문자이면 원하는 문자열이 오지 않았다고 판단하여 실행되지 않습니다. 그 밖에 코드도 확인해 주세요. 특히 아두이노 코드는 제가 올려 놓은 것으로 사용해 보세요.
      다음은 조립이 잘 되었는지 살펴 보세요. 전원을 on 했을 때 아두이노와 L298N, 그리고 블루투스 모듈에 불이 들어와야 합니다. 만약 불이 안들어오는 것이 있다면 부품 불량이거나 연결이 잘 안된 것입니다.
      위를 모두 확인했는데도 안된다면 바퀴를 하나만 연결하고 스마트폰으로 블루투스 연결하여 바퀴를 회전시켜보는 동영상(제 채널에 있습니다)을 따라해 보시기 바랍니다.
      또는 제 채널의 대부분 알씨카 조종앱은 "앱인벤터: 9버튼 RC카 조종 스마트폰 앱 제작( ruclips.net/video/UNFiVKJJaC0/видео.html )" 동영상에서 제작한 것입니다. 5버튼 조종앱은 초기 버전이므로 아두이노 코드와 스마트폰앱 코드가 맞지 않을 수 있습니다. 9버튼 조종 앱 동영상을 보시길 바랍니다.
      성공하세요!!!

  • @shitsunaiki
    @shitsunaiki 2 года назад

    아두이노 쪽 코드는 어떻게 되나요?

    • @gyungun
      @gyungun  2 года назад +1

      맨 아래 코딩과 같습니다. 블루투스 모듈의 TXD를 아두이노의 8, RXD를 9에 연결했을 때 코딩입니다.
      그런데 제가 요즘에는 이렇게 사용하지 않습니다. 두 자리수 이상을 보낼 때는
      if(mySerial.available()){
      char a=mySerial.read();
      위와 같이 읽는 것이 이상하기 때문입니다.
      그래서 요즘에 저는 앱인벤터로 코딩할 때 무조건 숫자 뒤에 소문자 c를 붙여서 보냅니다.
      그리고 읽어 들일 때는
      void loop() {
      if(mySerial.available()){
      a=mySerial.readStringUntil('c');
      이런 식으로 읽어 들입니다. 그러면 c 앞에까지 읽어서 a에 넣습니다. 한 자리수 뿐만아니라 두자리수 이상도 정확히 수신할 수 있습니다.
      물론 이때 a는 문자열 변수로 미리 선언해 두어야 합니다.
      이와 같은 알씨카 조종앱 코딩은 저의 채널 중
      앱인벤터: 9버튼 RC카 조종 스마트폰 앱 제작 ( ruclips.net/video/UNFiVKJJaC0/видео.html ) 동영상에 자세히 나와 있습니다.
      ===========================================================
      #include
      SoftwareSerial mySerial(8,9);
      void setup() {
      mySerial.begin(9600);
      }
      void loop() {
      if(mySerial.available()){
      char a=mySerial.read();
      if (a == '1'){
      // 앞으로 가는 코딩 추가, 사용한 모터 드라이버 종류나 상황에 따라 다름
      }else if(a == '7'){
      // 오른쪽으로 가는 코딩 추가, 사용한 모터 드라이버 종류나 상황에 따라 다름
      }else if(a == '2'){
      // 뒤로 가는 코딩 추가, 사용한 모터 드라이버 종류나 상황에 따라 다름
      }else if(a == '6'){
      // 왼쪽으로 가는 코딩 추가, 사용한 모터 드라이버 종류나 상황에 따라 다름
      }else if(a == '3'){
      // 정지하는 코딩 추가, 사용한 모터 드라이버 종류나 상황에 따라 다름
      }
      }
      }
      ==============================================================

    • @shitsunaiki
      @shitsunaiki 2 года назад

      @@gyungun
      감사합니다!

    • @gyungun
      @gyungun  4 месяца назад +1

      댓글 감사합니다.
      아두이노쪽 코드는 없습니다. 영상을 제작하지 않고 만들어 두었던 RC카가 있었습니다. 이 동영상은 동아리 활동 초반에 학생들의 흥미를 높이기 위해 조종앱 만들기를 먼저 했고 그때 안내용으로 만든 것이기 때문입니다.
      그 후 이 동영상과 거의 유사하지만 조종 능력이 뛰어난 9버튼 조종앱을 만들었고, 그것으로 조종할 수 있는 RC카들을 여러 가지 만들었습니다. 그 방법을 모두 모두 제 채널에 영상으로 올려 놓았습니다. 영상은 아래와 같습니다. 9버튼 조종앱은 아래 두 RC카를 모두 조종할 수 있습니다.
      1. 앱인벤터: 9버튼 RC카 조종 스마트폰 앱 제작( ruclips.net/video/UNFiVKJJaC0/видео.html )
      2. 아두이노: L298N 모터드라이버로 RC카 제작하기 ( ruclips.net/video/Inf-lJYKbbs/видео.html )
      3. 아두이노: L293D 모터쉴드로 RC카 제작하기( ruclips.net/video/le7ygfxk7jA/видео.html )
      위 RC카 제작 동영상에 링크가 있지만, 코드를 요청하셨기에 유사한 코드라도 보여 드리기 위해, "L298N 모터드라이버로 만든 RC카"에서 아두이노 보드에 업로드한 코드를 아래에 추가합니다.
      앱에서 단순히 숫자만 보내지 않고 숫자 뒤에 알파벳 소문자 c를 붙여서 보내도록 하였고, 아두이노 코드에서는 "c"전까지 읽어서 얻은 숫자에 따라서 RC카가 움직이도록 하였습니다. 이렇게 하면 앱에서 두자리 이상의 숫자를 보내도 한 자리 숫자를 보낼 때와 동일한 코드로 처리할 수 있다는 장점이 있습니다.
      #include
      SoftwareSerial mySerial(2, 3);
      String ms = "";
      int sp=100;
      int a;
      int num=5;
      void setup() {
      mySerial.begin(9600);
      pinMode(6,OUTPUT);
      pinMode(7,OUTPUT);
      pinMode(8,OUTPUT);
      pinMode(9,OUTPUT);
      pinMode(10,OUTPUT);
      pinMode(11,OUTPUT);
      }
      void loop() {
      if(mySerial.available()){
      ms = mySerial.readStringUntil('c');
      a=ms.toInt();
      if(a>9){
      sp=a;
      }else{
      num=a;
      }
      if(num==1){
      analogWrite(11,sp);
      digitalWrite(10,HIGH);
      digitalWrite(9,HIGH);
      digitalWrite(8,HIGH);
      digitalWrite(7,LOW);
      analogWrite(6,sp);
      }else if(num==2){
      analogWrite(11,sp);
      digitalWrite(10,HIGH);
      digitalWrite(9,LOW);
      digitalWrite(8,HIGH);
      digitalWrite(7,LOW);
      analogWrite(6,sp);
      }else if(num==3){
      analogWrite(11,sp);
      digitalWrite(10,HIGH);
      digitalWrite(9,LOW);
      digitalWrite(8,HIGH);
      digitalWrite(7,HIGH);
      analogWrite(6,sp);
      }else if(num==4){
      analogWrite(11,sp);
      digitalWrite(10,LOW);
      digitalWrite(9,HIGH);
      digitalWrite(8,HIGH);
      digitalWrite(7,LOW);
      analogWrite(6,sp);
      }else if(num==5){
      analogWrite(11,sp);
      digitalWrite(10,HIGH);
      digitalWrite(9,HIGH);
      digitalWrite(8,HIGH);
      digitalWrite(7,HIGH);
      analogWrite(6,sp);
      }else if(num==6){
      analogWrite(11,sp);
      digitalWrite(10,HIGH);
      digitalWrite(9,LOW);
      digitalWrite(8,LOW);
      digitalWrite(7,HIGH);
      analogWrite(6,sp);
      }else if(num==7){
      analogWrite(11,sp);
      digitalWrite(10,HIGH);
      digitalWrite(9,HIGH);
      digitalWrite(8,LOW);
      digitalWrite(7,HIGH);
      analogWrite(6,sp);
      }else if(num==8){
      analogWrite(11,sp);
      digitalWrite(10,LOW);
      digitalWrite(9,HIGH);
      digitalWrite(8,LOW);
      digitalWrite(7,HIGH);
      analogWrite(6,sp);
      }else if(num==9){
      analogWrite(11,sp);
      digitalWrite(10,LOW);
      digitalWrite(9,HIGH);
      digitalWrite(8,HIGH);
      digitalWrite(7,HIGH);
      analogWrite(6,sp);
      }
      }
      }