mercoledì 16 novembre 2011

rep rap, arduino e stampante 3d oltre la cnc con arduino


Investigando su come costruire una fresa a controllo numerico con arduino mi sono  chiesto quale software usare per trasformare un disegno 3d in realtà.
In pratica che formato devono avere i disegni e come dico all'arduino via seriale come deve muovere i motori sugli assi x y e z?
Questo progetto risponde in parte alle mie domande e non solo, apre letteralmente a nuovi mondi.
La fresa che vorrei costruire  parte da un solido per ottenere un oggetto per sottrazione.
Quello proposto da rep rap è una vera e propria stampante 3d con arduino.
 Ma qui viene il bello, come nei migliori film di fantascienza la macchina replica se stessa!!!!
Una macchina reprap è in grado di generare i pezzi necessari a costruire una macchina reprap!
Vi consiglio vivamente di perdervi in questo favoloso sito e se vi è possibile partecipare al progetto che ha del mistico... 
La nascita dei siloni è sempre più vicina : )


mercoledì 2 novembre 2011

auto radiocomandata controllata da iphone via webapp



Finalmente qualcosa di utile... :)

Qualche mese fa in soffitta ho ritrovato la macchinina radiocomandata di quando ero pischello.
Non ho pero' ritrovato il radiocomando.

Ho pensato allora di fare qualcosina di divertente e  "contemporaneo". Cercando dapprima un modo di controllare la macchina radiocomandata da pc via bluetooth grazie al modulo blueSMirf di cui ho già parlato. Poi ho pensato che scegliendo di controllare il tutto da una web application avrei potuto controllare la macchinina radiocomandata anche dall'iphone, dall'android, dal blackberry, dal nokia, dal fax, e dal pallottoliere...   A render possibile il tutto ovviamente ARDUINO!!!!

Sostanzialmente il progetto è composto da:
- Arduino (nel mio caso boarduino)
- Un doppio ponte H (L298)
- un laptop macbook (mi vergogno un po') su cui c'è linux (ubuntu 10.4)
- Apache
- php
- la libreria php_serial_class.php
- jqueryMobile

E funziona pressapoco così:
Apache ha i permessi di scrivere sulla seriale (rfcomm)
L'iphone, o chi per esso, visita una pagina sul server (in rete locale) dove ci sono 6 button.
Ogni button ha in query string appeso un valore diverso (tipo http://192.168.x.x/car.php?a=49)
in ajax viene chiamata una pagina php che va a scrivere sulla seriale bluetooth (nel mio caso rfcomm0) il valore della variabile passata in get
arduino ascolta i valori della seriale e in base al valore aziona uno dei 2 ponti H uno per lo sterzo e l'altro per i motori.


Di seguito il file rf.php che è la pagina visualizzata dall'iphone (abbastanza quick e soprattutto dirty):
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a2/jquery.mobile-1.0a2.min.css" />
<script src="http://code.jquery.com/jquery-1.4.4.min.js"></script>
<script src="http://code.jquery.com/mobile/1.0a2/jquery.mobile-1.0a2.min.js"></script>
<script>
jQuery(document).bind(
   "mobileinit", function(){
   jQuery.extend( jQuery.mobile, { hashListeningEnabled: false });
   });
 $(function() {
            $(".boton").click(function(e) {
e.preventDefault();     
                    $.ajax({
                      type: "GET",
                      url: $(this).attr('href'),
                      //data: ({'a': $(this).attr('href')}),
                      cache: false,
                      dataType: "text",
                      success: onSuccess
                    })
            });
            $("#resultLog").ajaxError(function(event, request, settings, exception) {
              $("#resultLog").html("Error Calling: " + settings.url + "<br />HTPP Code: " + request.status);
            });
            function onSuccess(data)
            {
$.mobile.loadingMessage = false;
                $("#resultLog").html("Result: " + data);
            }
        });
</script>
</head>
<body>
<div data-role="page" id="foo"> 
        <div data-role="header"> 
             <h1>Header</h1> 
        </div>
<div data-role="content"> 
<div data-role="controlgroup" style="width:30%; float:left;" >
<div class="boton" href="car.php?a=49" data-role="button" data-icon="arrow-u">FW</div>
<div class="boton" href="car.php?a=51" data-role="button" data-icon="delete">ALT</div>
<div class="boton" href="car.php?a=50" data-role="button" data-icon="arrow-d">BW</div>
</div>
<div data-role="controlgroup" data-type="horizontal"  style="width:60%; float:right;" >
<div class="boton" href="car.php?a=52" data-role="button" data-icon="arrow-l">L</div>
<div class="boton" href="car.php?a=53" data-role="button" data-icon="delete">C</div>
<div class="boton" href="car.php?a=54" data-role="button" data-icon="arrow-r">R</div>
</div>
</div>
<div style="clear:both"></div>
<div id="resultLog"></div>
<div data-role="footer"> 
<h4>Footer</h4> 
</div>
</div>
</body>
</html>


Questo è il php chiamato in ajax:

<?php
$a=$_GET['a'];
ini_set('display_errors',1);
require_once("php_serial.class.php");
// 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/ttyUSB0");
$serial->deviceSet("/dev/rfcomm0");
 //Set the serial port parameters. The documentation says 9600 8-N-1, so
    $serial->confBaudRate(115200); //Baud rate: 9600
    $serial->confParity("none");  //Parity (this is the "N" in "8-N-1")

// Then we need to open it
$serial->deviceOpen();
// To write into
$serial->sendMessage(chr($a));
// Or to read from
//$read = $serial->readPort();
//var_dump($read);
// If you want to change the configuration, the device must be closed
$serial->deviceClose();
die($a);

?>
Questo è lo sketch per arduino:

int seriale=0;
/*
  AnalogReadSerial
 Reads an analog input on pin 0, prints the result to the serial monitor 
 This example code is in the public domain.
 */

void setup() {
  Serial.begin(115200);
  pinMode(8,OUTPUT);
  pinMode(9,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(11,OUTPUT);
  pinMode(13,OUTPUT);
}

void loop() {
  if (Serial.available()>0)
  {
    seriale=Serial.read();
    digitalWrite(13,HIGH);
    
    switch(seriale){
    
    case 49:
            Serial.println("UNO");
            digitalWrite(8,HIGH);
            digitalWrite(9,LOW);
            
            break;
    case 50:
            Serial.println("DUE");
            digitalWrite(9,HIGH);
            digitalWrite(8,LOW);
            break;
    case 51:
            Serial.println("STOP");
            digitalWrite(8,LOW);
            digitalWrite(9,LOW);
            break;
     case 52:
           Serial.println("LEFT");
            digitalWrite(10,HIGH);
            digitalWrite(11,LOW);
            break;
     case 53:
            Serial.println("CENTER");
            digitalWrite(11,LOW);
            digitalWrite(10,LOW);
            break;
     case 54:
            Serial.println("RIGHT");
            digitalWrite(11,HIGH);
            digitalWrite(10,LOW);
            break;
            
    }
    Serial.println(seriale);
    
  }
    else
    {
    digitalWrite(13,LOW);
    }
       

      
      //Serial.flush();
   
  
  
}







Ecco un video delle prime prove con il circuito su breadboard col mitico Ricci come pilota:



E questa è una foto del gioiellino finito:




Boarduino e BlueSMirf sono montati su strips femmine in modo da poterli estrarre


Per il momento mi fermo qui se vi interessa commentate  : )



giovedì 27 ottobre 2011

UNA CNC "ECONOMICA" ARDUINO + CNCPROJECT


Che questo sia il mio prossimo progetto?

http://www.cncproject.net/index.php?option=com_content&view=article&id=46:nuovo-progetto-fresa-a-3-assi-a4&catid=1:progetti&Itemid=2

Interessantissimo il progetto, bellissimo che puoi scaricarti i file autocad e tutto il resto.
resterà da capire come interfacciarla ad arduino.
Amo chi condivide grazie ragazzi!

martedì 25 ottobre 2011

una risorsa interessante


Segnalo questo sito pieno zeppo di idee interessanti e di pdf molto succosi.
Purtroppo, per chi come me parla a fatica l'italiano, il sito è in Spagnolo ma con google translate si riesca a capire almeno il senso.
Sembrerebbe avere più senso la traduzione inglese che quella italiana... ma forse è solo un'impressione.
Altro grosso neo i circuiti presentati fanno riferimento ad un uso con stripboard che il mio commerciante di fiducia da per defunta!!!
In ogni caso i pdf presentati sono davvero interessanti e con un po' di pazienza si possono convertire gli schemi forniti in un circuito per basetta millefori o breadboard.
Penso che splucero' spesso ...

lunedì 24 ottobre 2011

arduino e blueSMirf: connettere arduino via bluetooth


Nel post precedente ho introdotto il primo progetto di questo blog : un cercapersone bluetooth realizzato con arduino blueSMiRF e Ubuntu 10.4. In questo post vedremo come collegare Ubuntu 10.04 ad arduino via bluetooth. Nel prossimo come visualizzare la strinfìga su un display LCD.

Cominciamo, ma prima  è doveroso introdurre un paio di concetti.

Solitamente Aduino viene collegato al pc con un cavo usb con il quale si alimenta la scheda e si comunicano dati.
In realtà Arduino "parla" con il pc attraverso una porta seriale.
Nel caso di boarduino e di altri cloni miniaturizzati si ha la necessità di passare attraverso un adattatore usb2serial come questo al prezzo più che onesto di 10,00 EURO. 
Detto questo a volte risulta utile poter staccarsi dal pc e instaurare una comunicazione wireless.
E' questo il caso del progetto "un cerca persona bluetooth".
Ci sono alcune alternative come (Xbee, Wi-fi shield..) ma tra tutte il bluetooth mi è sembrata quella più economica visto che di fatto il computer con cui scrivo (come ormai quasi tutti i portatili) ha già in dotazione il bluetooth e che quindi i costi si riducono di circa la metà!
Non ho ancora esplorato soluzioni DIY tipo hack di chiavette Bluetooth perchè non ne ho sottomano neanche una da sacrificare per la scienza, motivo  per cui sono andato su robot-italy e ho comprato il modem bluetooth più economico che ho trovato. Rimanderò ad un secondo momento le sperimentazioni in modo da aver già fatto un po' di esperienza.
In effetti non tutti i passaggi sono stati proprio naturali per un novizio come me.

Premesso questo, si stappa una birra e si comincia.

PROBLEMA 1: Alimentare Boarduino con alimentazione esterna.
Il primo problema che si manifesta quando si stacca arduino dal pc è quello di capire come alimentare la scheda.
Non ho usato Arduino per questo progetto ma un suo clone: "Boarduino". Di norma non dovrebbe cambiare molto ma vi ho avvisati : )
In boarduino c'è un jumper che dice alla scheda dove prendere l'alimentazione, se da usb o da fonte esterna, bisogna mettere la selezione su ext
Ho usato una batteria da 9V per l'alimentazione collegando il polo positivo  al pin Vin e il negativo a GND .

PROBLEMA 2: Collegare il modulo BlueSMirf Silver all'arduino
Innanzitutto ho saldato degli stripes sulla scheda del modem bluetooth in modo da poterlo comodamente alloggiare sulla breadboard e in modo da poterlo, al limite, collegare ad un futuro circuito tramite adattatori femmina rendendolo in qualche modo riutilizzabile.
Il modem ha i seguenti pin:

- CTS-I
- VCC
- GND
- TX-0
- RX-I
- RTS-0

In alcuni blog dicono di collegare assieme i pin CTS-I e RTS-0. Se lo consigliano un motivo buono ci sarà, per la cronaca io non l'ho fatto e funziona lo stesso. Mi sono promesso di approfondire la questione i un prossimo futuro.

Vcc è la corente in ingresso che va collegata all'uscita a 5v dell'arduino.
GND va collegata a tutte le altre GND
TX-0 va collegata a RX dell'arduino
RX-I va collegata al TXdell'arduino

Dalla foto non si capisce un granchè ma di meglio non sono riuscito a fare : (


Fatto questo dovrebbe accendersi un led intermittente rosso sul BlueSMiRF. Vuol dire che la scheda è alimentata e (almeno si spera) funzionante.

PROBLEMONE 3: Connettere BlueSMiRF ad ubuntu 10.4
Ho avuto non poche difficoltà a fare il pairing di BlueSMiRF con ubuntu.

La via più semplice.
La via più semplice è forse è questa (inizialmente scartata perchè sconsigliata da un post sul sito di arduino per ubuntu 9.x ma funzionante in ubuntu 10.4):
- Scaricate dai repositori di ubuntu "blueman"
- Lanciatelo
- cliccate sul pulsante "cerca"
- dovrebbe comparire la scheda (Nel mio caso si chiama RN42-92F2)
- cliccate sul pulsantino con le chiavi
- si dovrebbe aprire un dialog in cui inserite la stringa "1234"
- se si connette cliccate con il tasto destro sopra il nome della scheda e scegliete dal menu contestuale SPP
- Se tutto va bene dovrebbe comparire un alert in cui dice che la connessione seriale è stata inizializzata e dovrebbe dirvi come si chiama.  Nella stragrande maggioranza dei casi è /dev/rfcomm0 . Si accende un led fisso verde e abbiamo quasi fatto.

Se siete dei maniaci della shell o per qualche motivo blueman vi tradisce (c'è chi dice si impossessi della vostra anima...) provate così:
- Aprite un terminale
- lanciate
hcitool scan
- dovrebe riportarvi una lista delle periferiche disponibili con relativo indirizzo
- aprite con un editor di teso (gedit, vi, pico, nano..) il seguente file  /etc/bluetooth/rfcomm.conf
es
sudo  nano /etc/bluetooth/rfcomm.conf
- decommentate un po' quello che trovate come esempio in modo che assomigli a qualcosa del genere
 -------------
rfcomm0 {
#       # Automatically bind the device at startup
        bind no;
#
#       # Bluetooth address of the device
        device [indirizzo che avete trovato prima]
#
#       # RFCOMM channel for the connection
        channel 1;
#
#       # Description of the connection
        comment "Arduino BT";
}
--------------------------
NB abbiate l'accortezza di modificare [indirizzo che avete trovato prima] con l'indirizzo che avete trovato prima.... senza le parentesi quadre ; )

- Salvate
- lanciate
sudo rfcomm connect rfcomm0


PROBLEMA 4: Scrivere e leggere dalla seriale.
In teoria adesso dovreste avere la connessione funzionante e dovreste essere in grado di scrivere e leggere sulla seriale.
Per testare che tutto funzioni scrivete uno schetch di test semplicissimo tipo :

void setup() {
  Serial.begin(115200);  //IMPORTANTISSIMO!!!!
  pinMode(13,OUTPUT);  
}

void loop() {
  if (Serial.available()>0)
  {
    char seriale=Serial.read();
    digitalWrite(13,HIGH);
    Serial.println(seriale);
    }
    else
    {
    digitalWrite(13,LOW);
   }   
  }
  
NB: Scollegate momentaneamente i cavi rx e tx dal bluetooth all'arduino e fate l'upload dello sketch con l'USB.
Poi scollegate il cavo usb.
In pratica Arduino sta in ascolto sulla seriale collegata via bluetooth. Se ci sono dati si accende il led integrato e li rimanda indietro sulla seriale "come gli arrivano" in modo che possiate leggerli.
Non sono riuscito ad usare il serial monitor dell'IDE con questa porta. Per cui ho optato per la old fashioned way...

quindi scrivete sul terminale un bel
sudo echo 'ciao' >/dev/rfcomm0
e subito dopo
cat /dev/rfcomm0
che se tutto va bene mi ritorna

c
i
a
o

con un bel blink del led integrato.

Mi raccomando assicuratevi che la boundrate sia a 115200. Ho provato per ore a capire come mai non mi tornassero i dati indietro e questo era il motivo.

Nei prossimi post faremo rispondere ad arduino con una stringa invece che singoli caratteri e poi coroneremo il tutto facendo visualizzare il messaggio su uno schermo lcd C216L01YBW00 o compatibili.










domenica 23 ottobre 2011

arduino e bluetooth: un cerca persona con arduino, bluesmirf e uno schermo lcd


Questo tutorial ha lo scopo di mettere insieme un po' di cose tra cui soprattutto:

- Connettere Arduino via Bluetooth
- Scrivere e ricevere stringhe dalla  seriale da e verso blutooth
- Visualizzare  una stringa su uno schermo lcd

Lo scopo finale è quello di ottenere un dispositivo in grado di visualizzare a distanza messaggi scritti ed inviati da pc.
Una sorta di cercapersone bluetooth, di dubbia utilità certo, ma che consente di fare un po' di pratica con tutta una serie di tecnologie, di impararle e di metterle da parte per più nobili applicazioni.

In questa prima puntata vediamo un po' cosa ci serve e quanto ci costa.



Cosa ci serve:
- Arduino
- BlueSMirf silver
- LCD monitor 16x2
- Breadboard
- Un po' di strips
- Cavetti per le connessioni
- Potenziometro
- Batteria da 9V
- Un disco de Kratwerk (opzionale ma fortemente consigliato)

Quanto mi costa:

Arduino => 12,00 EURO
Per questo progetto ho utilizzato un clone di Arduino pensato appositamente per l'utilizzo su breadboard (basetta sperimentale) .
E' piuttosto economico e potete trovarlo ad esempio ardfruit.com a questo link.
Costa 17,00 $ al cambio attuale circa 12,00 Euro.
Ovviamente quanto descritto dovrebbe funzionare su qualsiasi Arduino (specialmente l'originale italico!!!) .


BlueSMirf silver => 38,00 EURO
E' un modem Bluetooth, il più economico l'ho trovato su robot-italy.com e precisamente qui

LCD monitor C216L01YBW00 =>8.8
Io ho usato questo C216L01YBW00 comprato direttamente in negozio da EPM elettronica di San Donà di Piave . Se volete comprarlo online EPM ha anche un ecommerce e il monitor lo trovate qui.
Trovate LCD compatibili col tutorial anche a molto meno...Ad un mercatino ho comprato 5 monitor AC162BGILY72 a 10 Euro!!! anche se sulla baya li vendono a 12$ l'uno.


Breadboard=>5,85 EURO
Comprata sempre in negozio da epm. Immagino ce ne siano di più economiche ad esempio questa costa circa la metà.

Potenziometro=>0,00
Quello che ho usato è stato vampirizzato da una scheda spazzatura : )

Cavetti=> 0,50 EURO
Vanno benissimo i doppini telefonici. Li trovate anche dalla ferramenta a 0.50 al metro.

Batteria 9V=> 1,50 EURO
Al Supermercato.

Strips=> 0,50 EURO
Li trovate in qualsiasi negozio di elettronica anche a meno, altrimenti sempre da robot-italy.com qui

Riassumendo vi ci vogliono circa 70 euro se dovete comprare tutto.
La cosa più costosa è indubbiamente il modem Bluetooth.
Mi piacerebbe provare a vedere cosa c'è dentro un adattatore bluetooth usb. Al momento non ce l'ho sottomano ma leggendo in qualche forum mi sembra di aver capito che ce ne sono alcuni che hanno un convertitore seriale integrato.
Se tutto cio' fosse possibile con 10 euro passerebbe la paura.


Nei prossimi post vedremo come collegare il modulo bluetooth BlueSMiRFad Arduino con bluemann o con hcitools e rfcomm. Vedremo l'importanza della giusta bound rate che per questo modulo è di 115200. Vedremo poi come scrivere e leggere dati sulla seriale via shell ed infine come visualizzare stringhe su un monitor lcd.





venerdì 21 ottobre 2011

22 Ottobre 2011 è Linux Day

Domani 22 ottobre 2011 ci sarà in tutta Italia il Linux Day. Centinaia di manifestazioni per far conoscere e diffondere il pinguino!!!
In particolare segnalo l'iniziativa all'interno del Linux Day di Castelfranco Veneto che prevede, cito testualmente dal wiki
Dalle 9.00 sarà presente un laboratorio Arduino, a cura del Treviso Arduino User Group.
Ecco un po' di link interessanti:

http://www.linuxday.it/
http://www.montellug.it/wiki/index.php/LinuxDay2011
http://groups.google.com/group/treviso_arduino_user_group