기술연구

김경현 2019. 3. 18. 21:53

안녕하세요.


기술이 공유되지 않으면 미래의 사회는 지금보다 더욱 폐쇄적이고 불평등한 사회가 될 것입니다. 카피레프트(copyleft)는 개인의 지적재산권을 중시하는 기존의 카피라이트(copyright)에 대항해 사회적 공유를 강조하는 정신이자 운동입니다. DIY연구소는 카피레프트(copyleft) 정신과 4차 산업기술의 확산을 위하여 연구한 내용을 무료로 배포하고 있습니다. 오늘은 '인벤터로 애니메이션 만들기 (이론)'을 공유다.


 앱인벤터

 앱인벤터로 애니메이션 만들기 (이론)









DIY연구소 김경현 배상 (010 8604 6802)



[교육내용]


☞ 1. 3D프린터 설계제작

☞ 2. 3D프린터 프로그램

☞ 3. 3D프린터 의수제작

☞ 4. Core XY 3D프린터 구동방식과 조립

☞ 5. Prusa i3 3D프린터 조립

☞ 6. Prusa i3 3D프린터 배선

☞ 7. 3D프린터 전기조립 기초

☞ 8. Fun i3 3D프린터 조립

☞ 9. 3D프린터 오픈소스 RepRap

☞ 10. 20만원대 교육용 3D프린터 개발

☞ 11. 3D프린터 전기자전거 개발

☞ 12. 원노즐 듀얼 3D프린터 개발

☞ 13. 3D프린터 모델링 프로그램 라이노(Rhino)

☞ 14. 3D프린터로 나만의 조명 만들기

☞ 15. 3D프린터로 홀로그램 만들기

☞ 16. 3D프린터 설계제작 공유

☞ 17. 3D프린터로 드론 만들

☞ 18. 스크래치 프로그램 (코딩)

☞ 19. 콘크리트 3D프린터 (대형) 개발

☞ 20. 3D프린터로 애완동물 사료 자동급식기 만들기

☞ 21. 3D프린터 아두이노 기초

☞ 22. 3D프린터 안드로이드 앱 프로그래밍 기초

☞ 23. 3D프린터 동물보호 방안

☞ 24. 3D프린터로 인공지능 로봇 만들기

☞ 25. 3D프린터로 에어콘 만들기

☞ 26. 3D프린터로 4차산업 설계제작






☞ 앱인벤터


[앱인벤터로 애니메이션 만들기]


애니메이션 (스마트폰) : 런닝맨





















■ 애니메이션 (스마트폰 + 아두이노 + 블루투스)


 응용 프로그램 빌드 - 예 1 : LED 제어







 Arduino 코드


다음은 해당 코드의 간단한 개요입니다. 따라서 직렬 포트를 통해 스마트 폰에서 들어오는 데이터를 수신하고 '상태'변수에 저장합니다. 'LED : OFF'버튼을 눌렀을 때 스마트 폰에서 보낸 문자 '0'을 받으면 LED를 끄고 "LED : OFF"문자열을 다시 스마트 폰으로 보냅니다. 반면에 문자 '1'을 받으면 LED를 켜고 문자열 "LED : on"을 되돌려 보냅니다.



/* Arduino and HC-05 Bluetooth Module Tutorial
 * 
 * by Dejan Nedelkovski, www.HowToMechatronics.com
 * 
 */
 
#define ledPin 7
int state = 0;
void setup() {
 pinMode(ledPin, OUTPUT);
 digitalWrite(ledPin, LOW);
 Serial.begin(38400); // Default communication rate of the Bluetooth module
}
void loop() {
 if(Serial.available() > 0){ // Checks whether data is comming from the serial port
 state = Serial.read(); // Reads the data from the serial port
 }
 if (state == '0') {
 digitalWrite(ledPin, LOW); // Turn LED OFF
 Serial.println("LED: OFF"); // Send back, to the phone, the String "LED: on"
 state = 0;
 }
 else if (state == '1') {
 digitalWrite(ledPin, HIGH);
 Serial.println("LED: on");;
 state = 0;
 } 
}

이제 우리는 Arduino에서 들어오는 Strings를받을뿐만 아니라 특정 버튼을 눌렀을 때 '0'과 '1'문자를 보낼 맞춤형 Android 애플리케이션을 만들어야합니다.


MIT App Inventor  웹 사이트 에서 "Create apps!" 버튼을 클릭하여 온라인 빌딩 어플리케이션에 로그인해야 합니다. 로그인하려면 Gmail 계정이 있어야합니다. 일단 우리가 로그인하면 우리는 첫 번째 프로젝트를 만들 수 있습니다. 디자인 윈도우가 어떻게 보이는지 이제 우리는 어플리케이션을 빌드 할 수 있습니다.


하지만 그렇게하기 전에 스마트 폰을이 프로젝트에 연결하여 앱이 스마트 폰에서 어떻게 실시간으로 직접 형성되는지 확인할 수 있습니다. 먼저 Play 스토어에서 MIT AI2 Companion 앱을 다운로드하여 스마트 폰에 설치해야합니다. 그런 다음 온라인 편집기의 연결 메뉴에서 AI Companion을 선택하면 바코드가 표시되어 스캔하거나 코드를 스마트 폰 응용 프로그램에 삽입하면 온라인 편집기와 스마트 폰 응용 프로그램 간의 연결이 설정됩니다.



예를 들어, 온라인 편집기의 화면에 버튼을 삽입하면 버튼이 스마트 폰에서도 실시간으로 표시됩니다. 이와 마찬가지로 앱을 만들 때 스마트 폰을 사용하고 싶지 않은 경우 Android Emulator를 컴퓨터에 설치하고 같은 방식으로 사용할 수 있습니다. 웹 사이트에서 에뮬레이터를 설정하는 방법에 대한 자세한 내용을 확인할 수 있습니다.


이제 첫 번째 예를 만들 준비가 되었습니다. 우리는 프로그램의 레이아웃부터 시작할 것입니다. 먼저 레이아웃 팔레트에서 HorizontalArrangements를 추가하고 높이, 너비 및 정렬과 같은 속성을 원하는 프로그램과 일치하도록 설정합니다. 그런 다음 UserInterface 팔레트에서 ListPicker를 추가하고 이미지를 첨부합니다. ListPicker는 스마트 폰이 연결할 Bluetooth 장치를 선택하는 데 사용됩니다.



다음으로 우리는 Label을 배치 할 다른 HorizontalArrangements를 추가 할 것입니다. 이 라벨은 스마트 폰이 블루투스 모듈에 연결되어 있는지 여부를 나타냅니다. 따라서이 라벨의 초기 텍스트를 '연결되지 않음'으로 설정합니다. 다음 레이블은 꺼져 있든 켜져 있든 상관없이 LED 상태를 표시하는 데 사용됩니다. 초기 상태는 "LED : 꺼짐"입니다. 다음으로 LED 제어를 위해 'Turn on'과 'Turn Off'두 개의 버튼을 추가 할 것입니다. 이 시점에서 구성 요소의 이름을 변경하여 나중에 블록 편집기에서 쉽게 인식하고 사용할 수 있습니다. 이제 남은 것은 보이지 않는 구성 요소 인 BluetoothClient와 연결 상태의 실시간 표시에 사용될 시계를 추가하는 것입니다.













































 블록 편집기


Blocks 에디터에서 우리는 프로그램에 생명을 불어 넣을 준비가되었습니다. 왼쪽에서 이전에 추가 된 구성 요소와 관련된 모든 블록과 기능을 얻었습니다.



BluetoothList ListPicker부터 시작하겠습니다. 거기에서 먼저 'BeforePicking'블록을 추가하고 'Bluetooth 요소 설정'블록을 첨부합니다. 그런 다음 BluetoothClient 블록에서 'BluetoothClient AddressesAndNames'블록을 추가합니다. 이 블록 세트가 수행 할 작업은 이미 전화기와 쌍을 이루는 Bluetooth 장치 목록을 설정하는 것이므로 ListPicker "연결 단추"를 클릭하면 모든 쌍으로 연결된 장치 목록이 나타납니다.



다음으로 우리는 특정 블루투스 모듈을 선택하거나 선택하면 어떻게 될지를 설정해야합니다. BluetoothClient 블록에서 'call BluetoothClient .Connect address'블록을 추가하고 'BluetoothList Selection'블록을 추가합니다. 즉, 이전에 선택한 Bluetooth 주소로 전화가 연결됩니다.



다음으로 Clock 블록에서 ".Timer"블록을 추가합니다. 이 블록 내에서 우리는 전화가 "Connected"레이블의 "텍스트 세트"블록을 사용하여 Bluetooth 모듈에 연결되었는지 여부를 실시간으로 표시합니다.



다음으로 우리는 두 개의 버튼에 생명을 불어 넣을 필요가 있습니다. 따라서 "TurnOn_Button"을 클릭하면 Bluetooth 클라이언트 기능인 "Send1ByteNumber"를 사용하여 Arduino Bluetooth 모듈에 번호를 보냅니다. 여기서는 ASCII 테이블에 따라 '1'문자에 해당하는 숫자 49가 나오고 LED가 켜집니다. 바로 그 다음에 "ReceiveText"BluetoothClient 함수를 사용하여 Arduino에서 전화로 되돌아 오는 수신 String을 수신합니다. 이 문자열은 "LED_Status"레이블로 설정됩니다.



동일한 절차가 "TurnOff_Button"에 대해 진행되며 여기서 송신 번호는 문자 '0'에 해당하는 48으로 변경되어야합니다. 지금 남은 것은 스마트 폰에 프로그램을 다운로드하여 설치하는 것입니다. 우리는 그것을 "컴퓨터"에 저장하고 우리의 전화로 전송하거나 프로그램의 온라인 다운로드를 위해 QR 코드를 스캔함으로써 "Build"메뉴에서 할 수 있습니다. 다음은 예제의 데모입니다. 위의 MIT App Inventor 프로젝트의 다운로드 파일은 다음과 같습니다. 


BluetoothTest.aia 5.16 KB



 응용 프로그램 빌드 - 예 2 : 모터 제어






두 번째 예제의 Arduino 코드는 다음과 같습니다. 


/*  Stepper Motor Control via HC-05 Bluetooth Module
 *      
 *  by Dejan Nedelkovski, www.HowToMechatronics.com
 *  
 */
// Defining variables
const int stepPin = 7; 
const int dirPin = 6;
String state = ""; 
int currentHeading=0;
int currentAngle=0;
int lastAngle=0;
int angle=0;
int rotate=0;
int runContinuously=0;
String mode = "Manual";
boolean dirRotation = HIGH;
int rotSpeed = 1500;
 
void setup() {
  // Sets the two pins as Outputs
  pinMode(stepPin,OUTPUT); 
  pinMode(dirPin,OUTPUT);
  Serial.begin(38400); // Default communication rate of the Bluetooth module
}
void loop() {
  delayMicroseconds(1);
  if(Serial.available() > 0){ // Checks whether data is comming from the serial port
    state = Serial.readString(); // Reads the data from the serial port
 }
 // When Auto Button is pressed
 if (mode == "Auto") {
  if (state == "Reverse") {
    delay(10);
    if (dirRotation == HIGH) {
      dirRotation = LOW;
    }
    else {
      dirRotation = HIGH;
    }  
    digitalWrite(dirPin,dirRotation);
    delay(10);
    state = "";
  }
  rotSpeed = state.toInt();
  if (rotSpeed >= 300 && rotSpeed <= 3000) {
  digitalWrite(stepPin,HIGH); 
  delayMicroseconds(rotSpeed); 
  digitalWrite(stepPin,LOW); 
  delayMicroseconds(rotSpeed);
  }
  else {
  digitalWrite(stepPin,HIGH); 
  delayMicroseconds(1500); 
  digitalWrite(stepPin,LOW); 
  delayMicroseconds(1500);
  }
  
  if (state == "Manual"){
    mode = state;
  }
 }
 // When Program is in Manual mode
 else if (mode == "Manual"){ 
 currentHeading = state.toInt();
 //Serial.println(angle);
 //Serial.println(state);
 if (currentHeading < 0 ){
  currentHeading = 360+currentHeading;
 }
 currentAngle = map(currentHeading,0,359,0,200);
 digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction
  // Makes 200 pulses for making one full cycle rotation
  if (currentAngle != lastAngle){
    if(currentAngle > lastAngle){  
      rotate = currentAngle - lastAngle;  
      for(int x = 0; x < rotate; x++) {
      digitalWrite(stepPin,HIGH); 
      delayMicroseconds(500); 
      digitalWrite(stepPin,LOW); 
      delayMicroseconds(500); 
      }
    }
    if(currentAngle < lastAngle){  
      rotate = lastAngle - currentAngle; 
      digitalWrite(dirPin,LOW); //Changes the rotations direction
      for(int x = 0; x < rotate; x++) {
      digitalWrite(stepPin,HIGH); 
      delayMicroseconds(500); 
      digitalWrite(stepPin,LOW); 
      delayMicroseconds(500); 
      }
    }
  }
  lastAngle = currentAngle;
  if (state == "Auto"){
    mode = state;
  }
 }
}








이제 스테퍼 모터를 제어하는 ​​두 번째 예제를 살펴 보겠습니다. 화면 상단에는 이전 예제와 동일한 Bluetooth 연결 구성 요소가 있습니다. 다음으로 우리는 이미지 그리기 및 삽입에 사용되는 Canvas 구성 요소를 가지고 있습니다. 이전에 그린 두 개의 투명한 이미지를 삽입했습니다. 첫 번째 이미지는 고정 될 게이지의 이미지이고 두 번째 이미지는 회전 할 포인터의 이미지입니다. 다음으로 수동 및 자동 또는 연속 실행 모드 간을 전환하기위한 확인 버튼과 회전 방향을 변경하기위한 버튼이 있습니다. 버튼에는 스테퍼 모터의 회전 속도를 변경하기위한 슬라이더가 있습니다.


다음은이 예제 뒤에있는 블록과 Arduino 코드입니다. 따라서 블록 편집기에서 이전 예제와 동일한 Bluetooth 연결 블록을 다시 사용할 수 있습니다.


이제 포인터 이미지를 회전시키기 위해 ImageSprite 함수 ".PointInDirection"을 사용합니다.이 함수는 0도 위치에서 Canvas가 터치 된 X 및 Y 좌표로 이미지를 회전시킵니다. 동시에 회전 된 ImageSprite 제목을 위의 텍스트 레이블로 설정합니다. 그 다음에 우리는 주문 제작 절차 또는 실제로 10m 초 지연 기능을 호출합니다. 마지막으로 "SendText"블루투스 기능을 사용하여 제목 값을 Arduino에 텍스트로 보냅니다. 이 값은 Arduino에서 허용되며 이에 따라 스테퍼 ​​모터가 회전합니다.


다음은 CheckBox 블록입니다. 따라서 CheckBox를 선택하면 Arduino에 "Auto"텍스트가 전송되어 스테퍼 모터가 계속 회전합니다. "Reverse"버튼을 누르면이 모드에있는 동안 Arduino에 텍스트 "Reverse"를 보내어 모터의 회전 방향을 바꿀 것입니다. 또한이 모드에있는 동안 회전 속도를 변경할 수 있습니다. 슬라이더의 위치를 ​​변경하면 슬라이더 위치의 현재 값이 Arduino로 전송되어 스테퍼의 회전 속도가 변경됩니다. CheckBox의 선택을 해제하면 수동 모드로 돌아갑니다. 다음은 예제의 데모입니다.



위의 MIT App Inventor 프로젝트의 다운로드 파일과 프로젝트에서 사용 된 두 개의 이미지는 다음과 같습니다.


☞ StepperMotorTest.aia

☞ Stepper Motor Gauge and Pointer Images






사업자 정보 표시
| | | 사업자 등록번호 : -- | TEL : -- | 사이버몰의 이용약관 바로가기