회로

인터넷으로 제어되는 화성 탐사선을 만드는 법 : 4 단계 (그림 포함)

다각화되는 요즘 무선 환경의 '3대 트렌드'

다각화되는 요즘 무선 환경의 '3대 트렌드'

차례:

Anonim

이 Instructable은 모든 지형 로봇을 인터넷으로 제어하기 위해 알아야 할 모든 것을 설명합니다. 이것은 화성 호기심 탐사선에서 모델링 된 것입니다. 이 로봇은 인터넷이 가능한 모든 장치에서 제어 할 수 있으므로 행성 (또는 인터넷 만있는 경우에는 화성)의 다른 쪽에서이 장치를 제어 할 수 있습니다. 이 프로젝트는 모두 놀라운 Electric Imp (인터넷에 연결할 수있는 SD 카드 크기의 장치)와 Arduino가 제공합니다.
이 프로젝트는 Dundee의 Product Design Research Studio에서 Michael Shorter, Tom Metcalfe, Jon Rogers 및 Ali Napier가 작성했습니다.

필요한 것 :
6WD Wild Thumper Arduino Chassis - http://robosavvy.com/store/product_info.php/products_id/1167?osCsid=5e99bbe12a25938cbf4267ea6bc497ea
Wild Thumper Arduino Controller - http://robosavvy.com/store/product_info.php/products_id/1168
LiPo 배터리 - 7.2V 5000mAh
3mm 아크릴
5mm 아크릴
직경 10cm의 배수관
지름 35mm 파이프
알루미늄 봉
전기 임프
전기 Imp 브레이크 아웃 보드
일부 점퍼 케이블
스케이트 보드 그립 테이프

용품:

1 단계 : 배회 자 건설

첨부 된 Adobe Illustrator 파일을 사용하면 필요한 모든 부분을 레이저로 잘라낼 수 있습니다. 총 3 개의 파일이 있습니다. 두께가 3mm 인 모든 부품에 대해 하나의 파일, 두께가 5mm 인 부품 및 그립 테이프 부품 용 파일.
바라건대 아래 이미지는 Wild Thumper 6WD 용 새 섀시를 함께 붙이는 방법에 대한 좋은 아이디어를 제공합니다.
Arduino에 전기 Impress의 배선은 쉽습니다 :
임프 핀 1 - Arduino 핀 10
임프 핀 2 - Arduino 핀 9
임팩트 핀 8 - Arduino 핀 12
임프 핀 9 - Arduino 핀 2
Electric Imp는 또한 접지뿐만 아니라 브레이크 아웃 보드에 따라 5V 또는 3.3V 중 하나가 필요합니다.
나는 쉽게 켜고 끌 수 있도록 배터리에 맞춰 토글 스위치를 연결하기로 결정했습니다.

2 단계 : 웹 사이드

여기에 몇 가지 코드가 있습니다.
다람쥐 흉터 (내가 더 이상 찾을 수없는 온라인 소스에서 적응 …) :
================================================
server.show ( "");
// 로버의 원격 제어
ledState <- 0;
function blink ()
{
// 상태를 변경합니다.
ledState = ledState? 0 : 1;
server.log ( "ledState val :"+ ledState);
// 핀에 상태 반영
hardware.pin9.write (ledState);
}
// LED 제어 채널에 대한 입력 클래스
InputHTTP는 InputPort를 확장합니다.
{
이름 = "전원 제어"
type = "number"
함수 세트 (httpVal)
{
server.log ( "받은 val :"+ httpVal);
if (httpVal == 1) {
hardware.pin9.write (1);
imp.sleep (0.1);
hardware.pin9.write (0);
}
else if (httpVal == 2) {
hardware.pin8.write (1);
imp.sleep (0.1);
hardware.pin8.write (0);
}
else if (httpVal == 3) {
hardware.pin2.write (1);
imp.sleep (0.1);
hardware.pin2.write (0);
}
else if (httpVal == 4) {
hardware.pin1.write (1);
imp.sleep (0.1);
hardware.pin1.write (0);
}
그밖에{
;
}
}
}
function watchdog () {
imp.wakeup (60, watchdog);
server.log (httpVal);
}
// 매 60 초마다 watchdog write를 시작한다.
//지키는 개();
// 내부 풀업을 사용하여 핀을 오픈 드레인 출력으로 구성
hardware.pin9.configure (DIGITAL_OUT_OD_PULLUP);
hardware.pin8.configure (DIGITAL_OUT_OD_PULLUP);
hardware.pin2.configure (DIGITAL_OUT_OD_PULLUP);
hardware.pin1.configure (DIGITAL_OUT_OD_PULLUP);
// 서버에 등록
imp.configure ( "Room에 대한 Reomote Control", inputHTTP (), );
================================================


Arduino 코드 (Chris Martin에게 감사드립니다!) …
================================================
/*
AnalogReadSerial
핀 0의 아날로그 입력을 읽어 결과를 직렬 모니터에 인쇄합니다.
전위차계의 중앙 핀을 핀 A0에 연결하고 외부 핀을 + 5V와 접지에 연결하십시오.
이 예제 코드는 공개 도메인에 있습니다.
*/
int pinf = 2;
int pinl = 12;
int pinr = 10;
int pinb = 9;
#define LmotorA 3 // 왼쪽 모터 H 브릿지, 입력 A
#define LmotorB 11 // 왼쪽 모터 H 브릿지, 입력 B
#define RmotorA 5 // 오른쪽 모터 H 브릿지, 입력 A
#define RmotorB 6 // 오른쪽 모터 H 브릿지, 입력 B
#define v 255
#포함
// Servo myservo;
// int led = 12;
int pos = 0;
// 재설정을 누르면 설정 루틴이 한 번 실행됩니다.
void setup () {
//myservo.attach(9);
// pinMode (led, OUTPUT);
pinMode (pinf, 입력); // 초당 9600 비트로 직렬 통신 초기화 :
pinMode (pinl, INPUT);
pinMode (pinr, INPUT);
pinMode (pinb, INPUT);
Serial.begin (9600);
digitalWrite (pinf, LOW);
digitalWrite (pinl, LOW);
digitalWrite (pinr, LOW);
digitalWrite (pinb, LOW);
//288000
// 위 또는 아래에 있는지 확실하지 않은 직렬 모니터에서 다름
// Serial.begin (14400);
}
int lls = 0;
int rls = 0;
int al = 0;
// 루프 루틴이 계속 반복 실행됩니다.
무효 루프 () {
// 아날로그 핀 0의 입력을 읽는다.
int sensorValue1 = digitalRead (pinf);
int sensorValue2 = digitalRead (pinl);
int sensorValue3 = digitalRead (pinr);
int sensorValue4 = digitalRead (pinb);
// 읽은 값을 출력한다.
Serial.print (sensorValue1);
Serial.print ( ":");
Serial.print (sensorValue2);
Serial.print ( ":");
Serial.print (sensorValue3);
Serial.print ( ":");
Serial.println (sensorValue4);
지연 (25); // 안정성을 위해 읽기 간 지연
if (sensorValue1 == 1) {
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 120);
analogWrite (LmotorA, 0);
아날로그 쓰기 (LmotorB, 120);
지연 (500);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
// myservo.write (10);
// 지연 (500);
}
그밖에{
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
}
if (sensorValue2 == 1) {
// digitalWrite (led, HIGH);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 250);
아날로그 쓰기 (LmotorA, 250);
analogWrite (LmotorB, 0);
지연 (100);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
// myservo.write (10);
// 지연 (500);
}
그밖에
{
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
}
if (sensorValue4 == 1) {
// digitalWrite (led, HIGH);
analogWrite (RmotorA, 250);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
아날로그 쓰기 (LmotorB, 250);
지연 (100);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
// myservo.write (10);
// 지연 (500);
}
그밖에
{
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
}
if (sensorValue3 == 1) {
// digitalWrite (led, HIGH);
analogWrite (RmotorA, 120);
analogWrite (RmotorB, 0);
아날로그 쓰기 (LmotorA, 120);
analogWrite (LmotorB, 0);
지연 (500);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
// myservo.write (10);
// 지연 (500);
}
그밖에
{
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
}
}
================================================

이제 사용자 인터페이스. 첨부 된 폴더의 압축을 풉니 다. 필요한 모든 코드가 있어야합니다. 고유 한 Electric Imp API를 적절한 공간의 index.html 파일에 붙여 넣기 만하면됩니다. 파일 안에 이것을 표시했습니다.

3 단계 : 약간의 영상을 보자.

나는 오래된 iPhone을 화성의 영상을 보여주는 헤드 유닛에 넣기로 결정했다. Skype 나 Facetime을 통해 운전하고있는 곳을 볼 수 있으므로 비디오 카메라 일 수도 있습니다.

4 단계 : 로빙을 시작합시다!

다음은 2013 년 SWSW NASA 행사에서 미니 화성 탐사차 (Mini Mars Rover)의 간단한 비디오입니다!

Vimeo의 짧은 마이클에서 SXSW 로버.

이 프로젝트의 가장 큰 장점은 로봇의 동작 또는 인터페이스를 변경하기 위해 코드를 조정하는 것이 쉽다는 것입니다.
즐겨!

결선 진출 자
원격 제어 경연 대회