makibot - робот телеприсутствия на скорую руку

makibot - робот телеприсутствия на скорую руку
Здесь уже не раз рассматривались различные роботы телеприсутсвия, но этот робот — makibot — самый суровый (и шумный).
Priit Hansen собрал его на день рождения подруги, чтобы их знакомые, которые не смогли присутствовать — могли поздороваться через Skype и виртуально поприсутстваовать на вечеринке.
Главным минусом робота является слишком громкая работа его двигателей, но в то же время — это не позволит вашим абонентам Skype подкрасться к вам незаметно :)

Команды управления роботом передаются через Интернет, используя комбинацию Ajax и PHP (используется php-serial class).
AJAX, Ajax (Asynchronous Javascript and XML — «асинхронный JavaScript и XML») — подход к построению интерактивных пользовательских интерфейсов веб-приложений, заключающийся в «фоновом» обмене данными браузера с веб-сервером. В результате, при обновлении данных, веб-страница не перезагружается полностью, и веб-приложения становятся более быстрыми и удобными.

Команды принимает контроллер Arduino, который через пару автомобильных реле (12V 40A) управляет питанием двух шуруповёртов (от их же аккумуляторных батарей), в патроне которых зажаты колёса.
makibot - робот телеприсутствия на скорую руку
makibot - робот телеприсутствия на скорую руку
makibot - робот телеприсутствия на скорую руку

видео работы:



Код



HTML & CSS
<html>
<head>
	<style type="text/css">
	.nupud {
		-moz-box-shadow:inset 0px 1px 0px 0px #ffffff;
		-webkit-box-shadow:inset 0px 1px 0px 0px #ffffff;
		box-shadow:inset 0px 1px 0px 0px #ffffff;
		background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #ededed), color-stop(1, #dfdfdf) );
		background:-moz-linear-gradient( center top, #ededed 5%, #dfdfdf 100% );
		filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed', endColorstr='#dfdfdf');
		background-color:#ededed;
		-moz-border-radius:6px;
		-webkit-border-radius:6px;
		border-radius:6px;
		border:1px solid #dcdcdc;
		display:inline-block;
		color:#777777;
		font-family:Verdana;
		font-size:15px;
		font-weight:bold;
		padding:32px 19px;
		text-decoration:none;
		text-shadow:1px 1px 0px #ffffff;
		-webkit-user-select: none;
		-khtml-user-select: none;
		-moz-user-select: none;
		-o-user-select: none;
		user-select: none;
	}.nupud:hover {
		background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #dfdfdf), color-stop(1, #ededed) );
		background:-moz-linear-gradient( center top, #dfdfdf 5%, #ededed 100% );
		filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#dfdfdf', endColorstr='#ededed');
		background-color:#dfdfdf;
	}.nupud:active {
		position:relative;
		top:1px;
	}
	/* This imageless css button was generated by CSSButtonGenerator.com */
	</style>
<script type="text/javascript">


function command(where)
{
	
	xmlhttp=new XMLHttpRequest();
 	xmlhttp.open("GET","serial.php?go="+where);
	xmlhttp.send();
}
</script>
</head>
<body>
<div class="nupud" style="position: absolute; top: 20px; left: 120px;" onMouseDown="command('e')" onMouseUp="command('s')" onMouseOut="command('s')">Edasi</div>
<div class="nupud" style="position: absolute; top: 130px; left: 30px;" onMouseDown="command('v')" onMouseUp="command('s')" onMouseOut="command('s')">Vasakule</div>
<div class="nupud" style="position: absolute; top: 130px; left: 170px;" onMouseDown="command('p')" onMouseUp="command('s')" onMouseOut="command('s')">Paremale</div>
</body>
</html>


скетч Arduino
boolean stringComplete = false;  // whether the string is complete
String inputString = "";

void setup() {
  // test pin
  pinMode(10, OUTPUT); // Vasakule
  pinMode(9, OUTPUT); // Paremale
 
  // initialize serial:
  Serial.begin(9600);

}

void loop() {
  // print the string when a newline arrives:
  if (stringComplete) {

    if (inputString == "e") {
      digitalWrite(10, HIGH);
       digitalWrite(9, HIGH);
    }
   if (inputString == "v") {
      digitalWrite(10, HIGH);
    }
   if (inputString == "p") {
      digitalWrite(9, HIGH);
    }
    
    if (inputString == "s") {
      digitalWrite(10, LOW);
      digitalWrite(9, LOW);
    }
    
    inputString = "";
    stringComplete = false;
  }
}

/*
  SerialEvent occurs whenever a new data comes in the
 hardware serial RX.  This routine is run between each
 time loop() runs, so using delay inside loop can delay
 response.  Multiple bytes of data may be available.
 */
 
void serialEvent() {
  while (Serial.available()) {
    // get the new byte:
    char suund = (char)Serial.read(); 
    inputString += suund;
    stringComplete = true;
     
    } 
}


PHP
<?php
include "php_serial.class.php";

$go = $_GET["go"];

// Let's start the class
$serial = new phpSerial;

// First we must specify the device. This works on both linux and windows (if
// your linux serial device is /dev/ttyS0 for COM1, etc)
$serial->deviceSet("/dev/cu.usbserial-A4007mX9");

// We can change the baud rate, parity, length, stop bits, flow control
$serial->confBaudRate(9600);
$serial->confParity("none");
$serial->confCharacterLength(8);
$serial->confStopBits(1);
$serial->confFlowControl("none");

// Then we need to open it
$serial->deviceOpen();

// To write into
$serial->sendMessage($go);


// Or to read from
//$read = $serial->readPort();

// If you want to change the configuration, the device must be closed
$serial->deviceClose();


?>


Ссылки:
Skype got legs
php-serial — PHP-класс для работы с последовательным портом

По теме:
Собрать робота для телеприсутствия за 500 долларов
Oculus — недорогой робот телеприсутствия
Робот телеприсутствия для контроля домашних животных
  • +2
  • 31 марта 2012, 09:09
  • admin

Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.