Archivi per la categoria ‘Elettronica’

La base del braccio

martedì, 21 aprile 2009




  • Google Plus
  • Twitter
  • Facebook
  • Reddit
  • RSS

Il mio primo pensiero riguardo la realizzazione del braccio meccanico era quello di progettare la base rotante su cui esso sarebbe stato montato.

Motoriduttore con trasduttore di posizione angolare

La rotazione della base, similmente ad una “spalla” biologica, doveva essere controllata e calibrata dal computer in modo tale che il braccio si potesse orientare in qualsiasi direzione. C’erano due possibili soluzioni: optare per un motore passo passo oppure utilizzare un motoriduttore accoppiato ad un encoder.

(continua…)

Prima interfaccia con la porta parallela

martedì, 7 aprile 2009




  • Google Plus
  • Twitter
  • Facebook
  • Reddit
  • RSS

I sistemi operativi Gnu/Linux forniscono un set completo di funzioni C per la gestione dell’hardware.

Per controllare la porta parallela saranno sufficienti solo tre funzioni:

  • int ioperm( unsigned long port, unsigned long num, int on_off ) : modifica i permessi di accesso alla porta.
  • short int inb( short int port ) : legge i dati dalla porta.
  • void outb ( short int val, int port ) : scrive i dati sulla porta.

Ricordiamoci inoltre di verificare se i permessi dell’utente consentono l’accesso alla porta e se necessario reimpostiamoli.

La porta parallela ci consente di trasmettere fino a un byte di dati per volta.
Possiamo trovare il suo indirizzo all’interno della nostra macchina controllando il file /proc/ioports, alla voce lp o parport.

/*
    Title: Esempio di gestione della porta parallela - porta_parallela.cpp
    Author: "Giacomo Trudu" aka "Wicker25" - wicker25[at]gmail[dot]com
    Site: http://www.hackyourmind.org/
    License: GNU General Public License (GPL)
    Description: An example of parallel port interfacing
*/

#include <iostream>
#include <cstdio>
#include <sys/io.h>

#define PARPORT_ADDRESS 0x378           // L'indirizzo della porta
#define DATA PARPORT_ADDRESS + 0        // Registro dei dati
#define STATUS PARPORT_ADDRESS + 1      // Registro di stato (sola lettura)
#define CONTROL PARPORT_ADDRESS + 2     // Registro di controllo (sola scrittura)

using namespace std;

int main( ) {

    // Ricavo l'user id ...
    int uid = geteuid();

    // ... e se ce ne bisogno imposto i privilegi di root
    if (uid) setreuid( 0, 0 ); 

    // Abilito la porta parallela
    if ( ioperm( DATA, 3, 1 ) < 0 ) {

        cout << "Impossibile abilitare la porta." << endl;
        return 1;
    }

    // Revoco i permessi di root
    setreuid( uid, uid );

    // Scrivo nella porta (0000 0011)
    outb( 0x03, DATA );
    // Leggo dalla porta
    inb( STATUS );
    // Scrivo nella porta (0000 0011)
    outb( 0x00, DATA );

    return 0;
}

Come potete vedere ognuno dei suoi tre registri ha un utilizzo differenze.

Maggiori informazioni sulla porta

Verso l’automazione

domenica, 5 aprile 2009




  • Google Plus
  • Twitter
  • Facebook
  • Reddit
  • RSS

Agli inizi di quest’anno decisi che avrei finalmente iniziato a lavorare con gli automi: in particolare era mio interesse dedicarmi alla robotica, scienza che mi ha sempre incuriosito ed appassionato fin da quand’ero bambino.

Adesso ho la possibilità di avvicinarmi a questa nuova e stimolante materia (come potete vedere nel video sottostante)..

Servomotore via porta parallela

Ho già in mente un progetto che mi aiuterà a fondere le mie conoscenze informatiche con le nuove acquisite nell’ambito dell’elettronica.

Nei prossimi giorni, quindi, pubblicherò video, schemi e sorgenti relativi al mio nuovo lavoro che avrà come obiettivo la realizzazione di un arto controllato tramite porta parallela, in grado di giocare ad un gioco da tavolo (probabilmente dama).

Comincio subito con un progetto tanto ambizioso quanto stimolante che avrà un suo preciso contenuto didattico: progetterò l’hardware e il software, un gradino alla volta, analizzando e risolvendo ogni singolo problema che mi si porrà davanti.

Ed ora.. al lavoro.. :D



Powered by Linux   Powered by Apache   Powered by MYSQL   Powered by PHP   Viewable With Any Browser   Hacker Culture   Creative Commons Licensed