Arduino – Servidor web Sinatra controlando servomotor

Bom pessoal cada dia os projetos vão ficando mais interessantes, este próximo projeto pode dar inicio a robotica, ou seja, braços mecânicos, mini-robos entre outras coisas que podemos criar.

Agora que sabemos controlar o servomotor pelo potenciômetro sem muito esforço, vamos remover o potenciômetro e fazer com que o nosso computador envie comandos para o arduino controlar o que o servomotor deve fazer.

Concluindo esta etapa podemos criar um servidor Web utilizando Ruby e o Sinatra que vimos nos post anteriores para controlar via internet nosso servomotor.

O que vamos utilizar neste projeto:

– Arduino Uno

– Protoboard

– Servomotor

Vamos utilizar a biblioteca do servomotor (servo.h) vamos utilizar a serialport, além do ruby e do sinatra.

Fritzing:

Código:


#include

Servo myservo; // create servo object to control a servo
 // a maximum of eight servo objects can be created

int posE = 175;
int posD = 0; // variable to store the servo position
int pos = 90;

void setup()
{
 Serial.begin(9600);
 myservo.attach(9); // attaches the servo on pin 9 to the servo object
 myservo.write(pos);
}

void loop() {

 if(Serial.available() > 0)
 {
 int entrada = Serial.read();

 switch (entrada){
 case 'D':
 direita();
 break;

 case 'E':
 esquerda();
 break;

 case 'R':
 centro();
 break;

 }
 }
}
void centro(){
 myservo.write(pos);
}
 void direita(){
 myservo.write(posD);
}
void esquerda(){
 myservo.write(posE);
}

application.rb

Neste código ruby vamos adicionar todas as gems que nosso projeto ira precisar, carregando a index em Haml para receber os dados de quando cada botão for pressionado o javascript se encarrega da função de identificar cada tecla.

# vamos adigionar as gens que vamos utilizar
%w[rubygems sinatra haml serialport].each{ |gem| require gem }

# parametros da serialport
port_str = "/dev/cu.usbmodem621" #varia de acordo com seus dispositivos
baud_rate = 9600
data_bits = 8
stop_bits = 1
parity = SerialPort::NONE

sp = SerialPort.new(port_str, baud_rate, data_bits, stop_bits, parity)

get '/' do
 haml :index
end

post '/envia' do
 command = params[:cmd]
 sp.write(command +"\r\n")
end
 js/script.js
$(document).ready(function(){
 $(document).keypress(function(e){
 switch(e.charCode){
 case 119:
 Envia('R');
 break;
 case 100:
 Envia('D');
 break;
 case 97:
 Envia('E');
 break;
 }
 })
 $('.btn').click(function() {
 Envia($(this).text())
 })
});

function Envia(command) {
 $.ajax({
 url: '/envia',
 type: 'POST',
 data: { cmd: command },
 error: function(){},
 success: function() {}
 })
}

Criei uma interface, um layout básico utilizando o twitterbootstrap 

Com o ambiente corretamente instalado, podemos inicializar o application.rb com o comando:

ruby application.rb

O servidor vai iniciar, e temos uma aplicação sinatra e ruby controlando o arduino.

Você pode baixar todo código do projeto clicando aqui.

Resultado final:

Anúncios
Esse post foi publicado em Arduino, Motores, Ruby, Sinatra. Bookmark o link permanente.

4 respostas para Arduino – Servidor web Sinatra controlando servomotor

  1. Pingback: Arduino – Carro robo controlado pela internet (CI L293B) | meetArduino

  2. Heitor disse:

    Como que vc fez para criar esse joystick????

  3. Anderson disse:

    Cara boa noite, gostei!!! Eu preciso que alguém me ajude, pois controlo meus servos por um programa na tela é xatooooooo, queria controlar no mínimo uns dois pega web, tenho placa UNO R3 e Ethernet, mais não sei programar.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s