Ciao a tutti
Da qualche giorno mi sono arrivati dei pezzi che non avevo idea di come usare (assieme). Si tratta di un paio di servomotori e un laser.
I servomotori sono dei motori molto intelligenti a cui si può dare tramite Arduino e la libreria Servo una posizione angolare (in un range da 0 a 180 gradi) ed il servomotore stesso si porterà in quella posizione (con i suoi tempi, che dipendono dalla qualità del motore stesso. I servomotori che ho comprato sono tra i più comuni e diffusi, e portano la sigla SG-90.
Un altro simpatico acquisto che avevo fatto è un piccolo laser a luce rossa. Dovrebbe essere uguale a quelli che ci sono in praticamente tutti i puntatori laser a basso costo.
Una piccola nota sulla sicurezza:
Attenzione quando avete a che fare con i laser. Sono pericolosi. Il modo più corretto di trattare con questi oggetti è quello di procurarsi una maschera specifica di protezione contro la specifica lunghezza d'onda dell'oggetto che userete. Il laser, anche a bassa potenza, può provocare cecità definitiva, per cui comunque evitate di usarlo contro superfici riflettenti e di puntarlo direttamente verso gli occhi di chiunque.
In ogni caso il laser è fatto più o meno come quello nella foto seguente.

Le sue caratteristiche principali sono le seguenti:
- luce rossa (650 nm)
- fascio collimato
- Potenza 5 mW
- Tensione di funzionamento 5V
In particolare quest’ultimo dato di funzionamento fa intuire che il laser contenga già al suo interno una resistenza, in quanto altrimenti avrebbe funzionato a tensioni minori.
Il laser non è altro che un diodo, paragonabile ad un LED per il suo funzionamento, per cui quando è attraversato da corrente nella direzione corretta emette luce, in questo caso un raggio laser.
Il problema che mi si poneva adesso era quello di cosa fare con questa roba. Ho pensato quindi di tentare di fare un mini proiettore laser di tipo x-y (in una versione molto molto banale e di scarsa funzionalità). Per intendersi i proiettori laser x-y sono quelli che disegnano strane figure in discoteca, spesso figure geometriche, ma con quelli più complessi si può riuscire anche a fare scritte o figure complesse. Come vedremo in questo progetto il problema principale sono proprio le caratteristiche del servo, anche se nei proiettori laser professionali si trovano altri sistemi (galvo, per esempio).
Detto fatto mi sono ritrovato a progettare un circuitino interessante ed ho tirato fuori quello che vedete di seguito.

In seconda istanza ho eliminato la resistenza sul led proprio perchè ho scoperto che non ce n’era bisogno. Ovviamente ho guadagnato in luminosità.
Lo schema elettrico è quello che segue.

Il risultato è quello che vedete nel video seguente
Di seguito incollo il codice:
// double servo plus laser // Pierluigi Luisi // 20/05/2014 #include <Servo.h> // inizializzo i servomotori Servo myServoX; Servo myServoY; // inizializzo variabili relative a // servomotori, piedini e laser boolean laserStatus; const int laserPin=3; const int servoPinX=9; const int servoPinY=10; int angleX; int angleY; // inizializzo variabili relative a // angoli e temporizzazioni const int mid = 1500; const int minAngleX = 1467; const int maxAngleX = 1533; const int minAngleY = 1445; const int maxAngleY = 1555; const int timing = 90; const int times = 1; void setup(){ // inizializzo il piedino del laser come uscita pinMode(laserPin, OUTPUT); // inizializzo i due servomotori myServoX.attach(servoPinX); myServoY.attach(servoPinY); //inizializzo la seriale Serial.begin(9600); // posiziono i servomotori a metà corsa myServoX.writeMicroseconds(mid); myServoY.writeMicroseconds(mid); // accendo e spengo il laser // per verificarne il corretto funzionamento for ( int x = 0; x < 4; x++) { laserOn(); delay(100); laserOff(); delay (100); } myServoX.writeMicroseconds(minAngleX); myServoY.writeMicroseconds(minAngleY); for ( int x = 0; x < 4; x++) { laserOn(); delay(100); laserOff(); delay (100); } myServoX.writeMicroseconds(maxAngleX); myServoY.writeMicroseconds(maxAngleY); for ( int x = 0; x < 4; x++) { laserOn(); delay(100); laserOff(); delay (100); } } void loop(){ // accendo il laser laserOn(); // disegno un quadrato writeSquare(); } void laserOff(){ // funzione di spegnimento del laser digitalWrite(laserPin, HIGH); // spengo il laser laserStatus = LOW; //immagazzino lo stato del laser } void laserOn(){ // funzione di accensione del laser digitalWrite(laserPin, LOW); // accendo il laser laserStatus = HIGH; //immagazzino lo stato del laser } void writeSquare(){ // funzione disegna quadrato for (int x=0;x<times;x++){ //mi posiziono nell'angolo superiore destro angleX=maxAngleX; myServoX.writeMicroseconds(angleX); angleY = maxAngleY; myServoY.writeMicroseconds(angleY); //delay (timing); // accendo il laser laserOn(); // mi sposto nell'angolo inferiore sinistro angleY = minAngleY; myServoY.writeMicroseconds(angleY); delay (timing); // necessario per consentire // ai servo di compiere lo spostamento // mi sposto nell'angolo inferiore destro angleX = minAngleX; myServoX.writeMicroseconds(angleX); delay (timing); // mi sposto nell'angolo superiore sinistro angleY = maxAngleY; myServoY.writeMicroseconds(angleY); delay (timing); // torno all'angolo superiore sinistro angleX = maxAngleX; myServoX.writeMicroseconds(angleX); delay (timing); laserOff(); } }
One comment