Arduino – Servidor web Sinatra controlando servomotor

http://meetarduino.wordpress.com

 

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:

 

01 #include <Servo.h>
02
03 Servo myservo; // create servo object to control a servo
04  // a maximum of eight servo objects can be created
05
06 int posE = 175;
07 int posD = 0; // variable to store the servo position
08 int pos = 90;
09
10 void setup()
11 {
12  Serial.begin(9600);
13  myservo.attach(9); // attaches the servo on pin 9 to the servo object
14  myservo.write(pos);
15 }
16
17 void loop() {
18
19  if(Serial.available() > 0)
20  {
21  int entrada = Serial.read();
22
23  switch (entrada){
24  case 'D':
25  direita();
26  break;
27
28  case 'E':
29  esquerda();
30  break;
31
32  case 'R':
33  centro();
34  break;
35
36  }
37  }
38 }
39 void centro(){
40  myservo.write(pos);
41 }
42  void direita(){
43  myservo.write(posD);
44 }
45 void esquerda(){
46  myservo.write(posE);
47 }

 

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.

 

01 # vamos adigionar as gens que vamos utilizar
02 %w[rubygems sinatra haml serialport].each{ |gem| require gem }
03
04 # parametros da serialport
05 port_str = "/dev/cu.usbmodem621" #varia de acordo com seus dispositivos
06 baud_rate = 9600
07 data_bits = 8
08 stop_bits = 1
09 parity = SerialPort::NONE
10
11 sp = SerialPort.new(port_str, baud_rate, data_bits, stop_bits, parity)
12
13 get '/' do
14  haml :index
15 end
16
17 post '/envia' do
18  command = params[:cmd]
19  sp.write(command +"\r\n")
20 end

 

 js/script.js
01 $(document).ready(function(){
02  $(document).keypress(function(e){
03  switch(e.charCode){
04  case 119:
05  Envia('R');
06  break;
07  case 100:
08  Envia('D');
09  break;
10  case 97:
11  Envia('E');
12  break;
13  }
14  })
15  $('.btn').click(function() {
16  Envia($(this).text())
17  })
18 });
19
20 function Envia(command) {
21  $.ajax({
22  url: '/envia',
23  type: 'POST',
24  data: { cmd: command },
25  error: function(){},
26  success: function() {}
27  })
28 }

 

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.

Exibições: 346

Responder esta

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço