Show Posts
Pages: 1 ... 3 4 [5] 6
61  Using Arduino / Motors, Mechanics, and Power / Re: Really simple robot arm on: May 09, 2011, 06:13:36 pm
I've done a simple drawing in case my thing wasn't too clear...
62  Using Arduino / Motors, Mechanics, and Power / Re: Really simple robot arm on: May 09, 2011, 12:44:02 pm
Thanks to everyone for your answers.

Even if it's a simple project I really need accuracy in the movement, especially it must be really slow as what the arm will do is to move around trying to pick up another arm under (hopefully using the electromagnet). The second arm it's in fact a turntable arm.
All this is to move a turntable arm in specif points of a record.... Maybe now it will make more sense! : )

Thanks for the links as well, but I've just received a ladyada motor shield so I think I will try to use that to drive a stepper (need to buy one) or a 360 servo which I used for a previous project (which as far as i know it's going far too fast).

Any easier way it's very welcome!!

thanks

63  Topics / Home Automation and Networked Objects / Re: Controlling lights over Ethernet with PowerDriver on: May 09, 2011, 10:42:22 am
But I figured out that you can use the USB-cable as a serial interface when your not programming it, so I'm simply going to use this instead


What do you mean? How this is going to affect your problem?
Let us know your developments, it's going to be interesting.

64  Using Arduino / Motors, Mechanics, and Power / Really simple robot arm on: May 08, 2011, 08:14:32 pm
Hello,

I need to build a really really simple motor arm (crane?) that will do just a rotation movement at the base, and that will use an electromagnet to pick up different objects.
I need to be really really slow and precise, and as I said... as simple as possible. What kind of motor should I use and how should I attach it? I will attach two silly drawings I made to explain a bit better. Basically I will have objects on a plan and the arm will move above them and pick them up (or leave them down) with the magnet.

Do you think this is doable?

Thanks a lot!
65  International / Generale / Physical Computing Workshop Toscana on: April 06, 2011, 10:12:24 am
Physical Computing Workshop @ Nub (PI) 22-23 aprile (http://associazioneculturalenub.wordpress.com/2011/03/06/aperte-le-iscrizioni-al-workshop-physical-computing/)

Il workshop è pensato sia per chi si avvicina al campo del physical computing per la prima volta ed è interessato ad acquisirne le conoscenze di base, sia per chi, avendo già esperienza, è interessato ad approfondire aspetti più specifici legati ai propri progetti.
---
I computer diventano sempre più veloci ma nella maggior parte dei casi continuiamo ad utilizzarli con le solite interfacce: monitor, mouse, tastiera, speaker. Con pochi rudimenti di elettronica e programmazione possiamo creare nuove forme di interazione tra il mondo fisico e quello virtuale. Che si tratti di installazioni interattive, interfacce di controllo per la musica elettronica, robot autonomi o semplicemente di interfacciare un’elettrodomestico al computer, il campo che si è aperto con la diffusione del physical computing permette ad artisti, designer e agli appassionati del fai da te più in generale, di realizzare progetti prima difficilmente abbordabili senza una laurea in ingegneria.
Nel workshop saranno introdotti i microcontrollori Arduino, i sensori e gli attuatori più comuni e saranno fornite alcune basi di programmazione in ambiente Processing e Max/Msp. Si vedranno esempi tratti dai territori della media art, della sound art, della musica elettroacustica e dell’interaction design. Saranno discussi i limiti delle interfacce convenzionali e sarà richiesto ai partecipanti, singoli o in gruppi, di proporre un progetto che metta in discussione il modo in cui si interagisce con il computer abitualmente.


Durata:

Il workshop ha una durata di due giorni a tempo pieno. Venerdì 22: 10-13/14-19 Sabato 23: 10-13/14-19
Si alterneranno in maniera informale lezione teorica, discussione di gruppo ed esercitazioni pratiche. Saranno forniti i materiali con cui lavorare, ma essendo le disponibilità limitate si consiglia ai partecipanti di contribuire con propri strumenti e componenti.
Numero di partecipanti: minimo 10 - massimo 15  (http://associazioneculturalenub.wordpress.com/2011/03/06/aperte-le-iscrizioni-al-workshop-physical-computing/)
66  Community / Workshops and Events / Physical Computing Workshop Toscana on: April 06, 2011, 10:11:10 am
Physical Computing Workshop @ Nub (PI) 22-23 aprile (http://associazioneculturalenub.wordpress.com/2011/03/06/aperte-le-iscrizioni-al-workshop-physical-computing/)

Il workshop è pensato sia per chi si avvicina al campo del physical computing per la prima volta ed è interessato ad acquisirne le conoscenze di base, sia per chi, avendo già esperienza, è interessato ad approfondire aspetti più specifici legati ai propri progetti.
---
I computer diventano sempre più veloci ma nella maggior parte dei casi continuiamo ad utilizzarli con le solite interfacce: monitor, mouse, tastiera, speaker. Con pochi rudimenti di elettronica e programmazione possiamo creare nuove forme di interazione tra il mondo fisico e quello virtuale. Che si tratti di installazioni interattive, interfacce di controllo per la musica elettronica, robot autonomi o semplicemente di interfacciare un’elettrodomestico al computer, il campo che si è aperto con la diffusione del physical computing permette ad artisti, designer e agli appassionati del fai da te più in generale, di realizzare progetti prima difficilmente abbordabili senza una laurea in ingegneria.
Nel workshop saranno introdotti i microcontrollori Arduino, i sensori e gli attuatori più comuni e saranno fornite alcune basi di programmazione in ambiente Processing e Max/Msp. Si vedranno esempi tratti dai territori della media art, della sound art, della musica elettroacustica e dell’interaction design. Saranno discussi i limiti delle interfacce convenzionali e sarà richiesto ai partecipanti, singoli o in gruppi, di proporre un progetto che metta in discussione il modo in cui si interagisce con il computer abitualmente.


Durata:

Il workshop ha una durata di due giorni a tempo pieno. Venerdì 22: 10-13/14-19 Sabato 23: 10-13/14-19
Si alterneranno in maniera informale lezione teorica, discussione di gruppo ed esercitazioni pratiche. Saranno forniti i materiali con cui lavorare, ma essendo le disponibilità limitate si consiglia ai partecipanti di contribuire con propri strumenti e componenti.
Numero di partecipanti: minimo 10 - massimo 15  (http://associazioneculturalenub.wordpress.com/2011/03/06/aperte-le-iscrizioni-al-workshop-physical-computing/)
67  Forum 2005-2010 (read only) / Italiano / Re: Giradischi, googlemaps, javascript, microfoni (!?) on: June 05, 2010, 02:26:12 pm
Grazie mille per gli utilissimi consigli.

Ho rielaborato un po' tutto il progetto e credo che cercherò di far muovere il braccio anche in su e in giù ogni volta, in modo da non distruggere la puntina e il disco. Devo ancora capire come posizionare i motori (anche per il problema che sottolineavi tu), ma spero troverò un modo.

Per quanto riguarda l'audio, cosa intendi per due processi analogici? una sorta di conversione? fammi capire meglio se hai un minuto..

grazie ancora
68  Forum 2005-2010 (read only) / Italiano / Giradischi, googlemaps, javascript, microfoni (!?) on: June 02, 2010, 10:57:55 am

Ho deciso di creare qualcosa che avesse a che fare con mappe, strade, percorsi e al tempo stesso dischi in vinile. Una macchina per creare percorsi (Derive, dalla psicogeografia di Debord...) a seconda del disco che scegli (e dello spazio in cui lo vai ad ascoltare).

Mentre il giradischi suonerà il vinile scelto, un microfono analizzerà lo spettro sonoro di ciò che sta suonando. Questo spettro verrà commutato in due variabili (X, Y), diciamo per esempio che prenderemo in esame il volume e il pitch. Queste due variabili verrano usate per aggiungere un punto di coordinate X, Y sulla mappa che stiamo creando. Al tempo stesso, la mappa conterrà un terzo tipo di informazioni (variabile Z), del tipo altitudine o densità di popolazione. Quindi per ogni valore di X, Y avremmo un valore di Z. Quest'ultimo verrà rimandato indietro al giradischi e servirà per decidere il movimento del braccio dove alloggia la puntina. In pratica il braccio del giradischi sarà comandato da un motore (che si dovrà muovere in due sensi). I valori di questo motore (Z1) andranno ad esempio da 0 a 100 (corrispettivamente: inizio - fine del disco). Per ogni valore di Z, ad esempio (altitudine 450 metri su Via Cavour 42) avremo un corrispondente Z1, ad esempio 86.. che farà muovere il braccio del giradischi. Questo farà si che ascolteremo un altro pezzo del vinile che - ricominciando il processo da capo - darà luogo ad un altra coordinata. (Ah, quasi dimenticavo... la puntina non si dovrà alzare per cambiare posizione ma semplicemente strascicarsi fino alla nuova posizione creando un po' scratch nel passaggio.)

Sarebbe molto carino poter usare questa API di google maps, che ti permette di mettere punti a caso su una mappa e poi (pigiando "get directions"), "normalizzare" il percorso creando una strana vera, non passando sui palazzi. http://gmaps-samples-v3.googlecode.com/svn/trunk/drivingdirections/directions-optimized.html
Il problema è integrare ciò che il microfono riceve (processing, max?) con javascripit,,,

Poi devo decidere quale motore usare, mi serve qualcosa di piuttosto piccolo e  preciso e che vada in due direzioni ovviamente... Stavo guardando gli stepper su sparkfun, mi sa che ordino qualcosa da lì (?)

Grazie mille a tutti, Giulio
69  Forum 2005-2010 (read only) / Italiano / Re: Keypad, problemi con le resistenze on: April 29, 2010, 12:22:34 pm
OK! Grazie mille per gli aiuti! Funziona tutto alla perfezione! Ho usato lo sketch di prova e tutti i pin mi danno la risposta corretta leggendo sul serial monitor!
Adesso mi rimane solo di integrare questo sketch all'interno del mio precedente software per triggerare gli mp3? qualche idea?



// plays the stdintro menu as long as the receiver is lifted (pin #14 open)

#include <FatReader.h>
#include <SdReader.h>
#include <avr/pgmspace.h>
#include "WaveUtil.h"
#include "WaveHC.h"


SdReader card;    // This object holds the information for the card
FatVolume vol;    // This holds the information for the partition on the card
FatReader root;   // This holds the information for the filesystem on the card
FatReader f;      // This holds the information for the file we're play

WaveHC wave;      // This is the only wave (audio) object, since we will only play one at a time

#define DEBOUNCE 4000  // button debouncer

// this handy function will return the number of bytes currently free in RAM, great for debugging!  
int freeRam(void)
{
  extern int  __bss_end;
  extern int  *__brkval;
  int free_memory;
  if((int)__brkval == 0) {
    free_memory = ((int)&free_memory) - ((int)&__bss_end);
  }
  else {
    free_memory = ((int)&free_memory) - ((int)__brkval);
  }
  return free_memory;
}

void sdErrorCheck(void)
{
  if (!card.errorCode()) return;
  putstring("\n\rSD I/O error: ");
  Serial.print(card.errorCode(), HEX);
  putstring(", ");
  Serial.println(card.errorData(), HEX);
  while(1);
}

void setup() {
  // set up serial port
  Serial.begin(9600);
  putstring_nl("WaveHC with 6 buttons");
  
   putstring("Free RAM: ");       // This can help with debugging, running out of RAM is bad
  Serial.println(freeRam());      // if this is under 150 bytes it may spell trouble!
  
  // Set the output pins for the DAC control. This pins are defined in the library
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
 
  // pin13 LED
  pinMode(13, OUTPUT);
 
  // enable pull-up resistors on switch pins (analog inputs)
  digitalWrite(14, HIGH);
  digitalWrite(15, HIGH);
  digitalWrite(16, HIGH);
  digitalWrite(17, HIGH);
  digitalWrite(18, HIGH);
  digitalWrite(19, HIGH);
 
  //  if (!card.init(true)) { //play with 4 MHz spi if 8MHz isn't working for you
  if (!card.init()) {         //play with 8 MHz spi (default faster!)  
    putstring_nl("Card init. failed!");  // Something went wrong, lets print out why
    sdErrorCheck();
    while(1);                            // then 'halt' - do nothing!
  }
  
  // enable optimize read - some cards may timeout. Disable if you're having problems
  card.partialBlockRead(true);
 
// Now we will look for a FAT partition!
  uint8_t part;
  for (part = 0; part < 5; part++) {     // we have up to 5 slots to look in
    if (vol.init(card, part))
      break;                             // we found one, lets bail
  }
  if (part == 5) {                       // if we ended up not finding one  smiley-sad
    putstring_nl("No valid FAT partition!");
    sdErrorCheck();      // Something went wrong, lets print out why
    while(1);                            // then 'halt' - do nothing!
  }
  
  // Lets tell the user about what we found
  putstring("Using partition ");
  Serial.print(part, DEC);
  putstring(", type is FAT");
  Serial.println(vol.fatType(),DEC);     // FAT16 or FAT32?
  
  // Try to open the root directory
  if (!root.openRoot(vol)) {
    putstring_nl("Can't open root dir!"); // Something went wrong,
    while(1);                             // then 'halt' - do nothing!
  }
  
  // Whew! We got past the tough parts.
  putstring_nl("Ready!");
}

int thetrack = 0;
int playpoem = 0;
int buttonpressed = 0;

// ----------------- LOOP ----------------- LOOP ----------------- LOOP ----------------- LOOP -----------------
void loop() {
putstring_nl("loop");


  while (digitalRead(14) == HIGH) { // check if the receiver id lifted
      
      buttonpressed = (check_switches());
      
      if (buttonpressed != 0 ) { // if buttons has been pressed
             putstring("button pressed:"); Serial.println(buttonpressed);
             if (thetrack == 0) { // check in witch menu we are
                 putstring_nl("button pressed on stdintro");
                 wave.stop();
                 thetrack = 1;
             }
              
             else if (thetrack == 1) { // check in witch menu we are
                 putstring_nl("button pressed on menu");
                 playpoem = 1;
                 switch (buttonpressed) {
                   case 1:
                     wave.stop();
                     thetrack = 2; // plays poem #1 (thetrack -1)
                     break;
                   case 2:
                     wave.stop();
                     thetrack = 3;
                     break;
                   case 3:
                     wave.stop();
                     thetrack = 4;
                     break;
                   case 4:
                     wave.stop();
                     thetrack = 5;
                     break;
                 }
             }
                
             else {  // if we are playing a poem
                 putstring_nl("button pressed on poems");
                 wave.stop();
                 thetrack = 0; // torna al menu principale
             }    
        }
        
    if (!wave.isplaying) {
      if (thetrack <= 1) {
        playtrack (thetrack);
      }
      else if (thetrack > 1) {
          if (playpoem == 0) {
          thetrack = 0;
          playtrack (thetrack);
          }
          else if (playpoem == 1) {
          playtrack (thetrack);
          playpoem = 0;
          }
      }  
    }
    
      
    // playloop (thetrack);
    }
  
   putstring_nl("phoneoff_wave_stopped");
   wave.stop();
}
// ----------------- ENDLOOP -----------------

/*
// Plays a track in loop
void playloop (byte trackID) {
     if (!wave.isplaying) {
      playtrack (trackID);    
  }
}
*/

// Translates file index to files name
/*
WAVE FILES INDEX:
0 STDINTRO.WAV
1 MENU.WAV
... add below if needed
*/
void playtrack (byte track) {
    switch (track) {
      case 0:
       playfile("STDINTRO.WAV");
       break;
      case 1:
       playfile("MENU.WAV");
       break;
      case 2:
       playfile("POEM1.WAV");
       break;
      case 3:
       playfile("POEM2.WAV");
       break;  
  }
}

// Plays files and print their name
void playfile(char *name) {
  // see if the wave object is currently doing something
  if (wave.isplaying) {// already playing something, so stop it!
    wave.stop(); // stop it
  }
  // look in the root directory and open the file
  if (!f.open(root, name)) {
    putstring("Couldn't open file "); Serial.print(name); return;
  }
  // OK read the file and turn it into a wave object
  if (!wave.create(f)) {
    putstring_nl("Not a valid WAV"); return;
  }
  
  // ok time to play! start playback
  putstring("Playing file: "); Serial.println(name);
  wave.play();
}

int check_switches()
{
  static byte previous[5];
  static long time[5];
  byte reading;
  byte pressed;
  byte index;
  pressed = 0;

  for (byte index = 0; index < 5; ++index) {
    reading = digitalRead(15 + index);
    if (reading == LOW && previous[index] == HIGH && millis() - time[index] > DEBOUNCE)
    {
      // switch pressed
      time[index] = millis();
      pressed = index + 1;
      break;
    }
    previous[index] = reading;
  }
  // return switch number (0 - 5)
  return (pressed);
}



e questo è lo sketch di prova che sto usando per il keypad
/*  Keypadtest.pde
 *
 *  Demonstrate the simplest use of the  keypad library.
 *
 *  The first step is to connect your keypad to the
 *  Arduino  using the pin numbers listed below in
 *  rowPins[] and colPins[]. If you want to use different
 *  pins then  you  can  change  the  numbers below to
 *  match your setup.
 *
 *  Note: Make sure to use pullup resistors on each of
 *  the rowPins.
 */
#include <Keypad.h>

const byte ROWS = 4; // Four rows
const byte COLS = 3; // Three columns
// Define the Keymap
char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'#','0','*'}
};
// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte rowPins[ROWS] = { 9, 8, 7, 6 };
// Connect keypad COL0, COL1 and COL2 to these Arduino pins.
byte colPins[COLS] = { 12, 11, 10 };

// Create the Keypad
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

#define ledpin 13

void setup()
{
  digitalWrite(ledpin, HIGH);
  Serial.begin(9600);
}

void loop()
{
  char key = kpd.getKey();
  if(key)  // same as if(key != NO_KEY)
  {
    switch (key)
    {
      case '*':
        digitalWrite(ledpin, LOW);
        break;
      case '#':
        digitalWrite(ledpin, HIGH);
        break;
      default:
        Serial.println(key);
    }
  }
}

70  Forum 2005-2010 (read only) / Italiano / Re: Keypad, problemi con le resistenze on: April 28, 2010, 04:09:58 pm
Ciao Uwe e grazie della risposta,

il mio problema è che non ho capito dove devo posizionare le resistenze e quali devo usare. Sul tutorial dice: "You will need pullup resistors, somewhere between 2k to 10k, on each of the row pins."

betwenn 2k to 10k.. Da cosa dipende quindi?

E poi per il resto ti sembra corretto il mio ragionamento dei pin?

Grazie mille!!!
71  Forum 2005-2010 (read only) / Italiano / Keypad, problemi con le resistenze on: April 28, 2010, 12:38:59 pm
(L'ho postato anche in inglese, spero di non inquinare troppo)

Ciao a tutti,

sto cercando di collegare questo keypad di un vecchio telefono (  ) ad Arduino, per triggerare dei suoni tramite wave shield. Il mio programma di wave shield funziona correttamente ed è finito, ma adesso è il momento del keypad!

Ho letto questo tutorial: http://www.arduino.cc/playground/Main/KeypadTutorial

questo è la mia keypad: http://yfrog.com/1q74485607j

e credo che queste siano i numeri (IN ROSSO) di uscita giusti per il mio keypad (Che usa 10 pin invece che 7):http://yfrog.com/11keypadpindiagramj


Qualche idea?
GRAZIE MILLE
72  Forum 2005-2010 (read only) / Italiano / Re: Wave shield: problemi con la SD on: April 02, 2010, 05:29:23 pm
SD normale! Macché cretina!!! Io spero che sia un problema del genere.. semplice da risolvere. Perché se così non fosse vuol dire che è un problema dell'hardware.. Però boh mi sembrerebbe strano!
DANNAZIONE!
c'è qualcuno che l'ha usata con il mac?
73  Forum 2005-2010 (read only) / Italiano / Re: Wave shield: problemi con la SD on: April 02, 2010, 02:24:31 pm
Sì Mac. Comunque ho letto un tutorial la libreria è ok... Lo sketch sta leggendo i file nella libreria e sta girando correttamente... finché non incontra questo problema della SD!!!
Ho trovato un'altra persona con lo stesso problema ( http://forums.adafruit.com/viewtopic.php?f=31&p=70526 )... Però non dava soluzione. Ora gli ho scritto, spero che mi risponda!

A te ti funziona tutto ok? Che sd usi? Con cosa l'hai formattata?
74  Forum 2005-2010 (read only) / Italiano / Re: Wave shield: problemi con la SD on: April 02, 2010, 01:25:32 pm
ok, ho provato con la libreria che mi hai consigliato... e questo è quello che mi è venuto fuori nel serial monitor!

card.init failed
SD error
errorCode: 1
errorData: 0

Stessa storia mi sa! Mi sa che sto sbagliando qualcosa. La libreria penso di averla installata correttamente sennò mi dovrebbe dare l'errore all'itnerno dell'IDE invece lì sembra tutto ok...
se hai un minuto fammi sapere.. gRAZIEEE
75  Forum 2005-2010 (read only) / Italiano / Re: Wave shield: problemi con la SD on: April 02, 2010, 01:09:26 pm
Che idolo! Grazie mille della risposta!
sto usando anche io un arduino 2009 (non modificato)! Avevo pensato che fosse il problema della ram, ma nelle spiegazioni dice di controllare che sia almeno 100 e la mia è oltre i 600.
comunque stavo usando un'altra libreria che a quanto pare è successiva alla tua.. ma probabilmente funziona peggio non so! Ora provo con quella che mi hai linkato.
(visto che ci sono ti chiedo conferma: per installare una libreria ho copiato la cartella dentro /Applications/Arduino.app/Contents/Resources/Java/Libraries.. è giusto?)

Grazie mille!
Pages: 1 ... 3 4 [5] 6