Show Posts
Pages: 1 2 [3] 4 5 ... 45
31  International / Generale / Re: Togliere la corrente al raggiungimento del peso on: July 10, 2014, 01:36:55 pm
ciao
qui
http://forum.arduino.cc/index.php?topic=110686.0
si parla di celle di carico, puoi cominciare con questo

Stefano
32  International / Hardware / Re: come posso migliorare lettura encoder on: July 10, 2014, 12:54:07 pm
ciao
@martinix come sospettavi c'erano problemi di alimentazione con l'alimentatore (il solito cinese) di arduino, le masse sono tutte in comune con lo schermo dei cavi a massa solo da un lato

il tutto è migliorato ma ancora non funziona allego l'onda dell'encoder e l'onda al pin 12 e qualche foto, nello sketch,

Code:
/*
per trapianto_stepper_test_31
 gestisce il segnale dell'encoder
 utilizzo di un encoder NPN
 scheda 7/10
 */
#define encoder_PinA 2
#define motor_Pin 12
#define motor_led 13

volatile long angolo;
long angolo_k;

byte fila;
long k;
long i;

void setup()
{
  Serial.begin(9600);

  pinMode(encoder_PinA, INPUT); 
  attachInterrupt(0, canaleA, RISING); //encoder al pin 2
 
  angolo = 0;
  angolo_k = 100;
 
  fila = 1;
  k = 1;
  i = 1;

  pinMode(motor_Pin, OUTPUT);
  pinMode(motor_led, OUTPUT);

  digitalWrite(motor_Pin, LOW);
  digitalWrite(motor_led, LOW);
  delay(1000);
  //Serial.println("Pronto");
}

void loop()
{
  while(k == i)
  {
    i++;

    switch(fila)
    {
    case 1:
      digitalWrite(motor_Pin, HIGH);
      digitalWrite(motor_led, HIGH);
      //Serial.println(digitalRead(motor_Pin));
      fila = 2;
      break;

    case 2:
      digitalWrite(motor_Pin, LOW);
      digitalWrite(motor_led, LOW);
      fila = 1;
      // Serial.println(digitalRead(motor_Pin));
      break;
    }
    //Serial.print(k);
    //Serial.print('\t');
    //Serial.println(i);
    //Serial.println(angolo);
    //    Serial.println(angolo_1);
  }
}

void canaleA()
{
  angolo++;
 
    if(angolo == angolo_k * k)
  {
    k++;
  }
}
viene continuamente eseguito mentre dovrebbe essere eseguito ogni qualvolta
Code:
angolo == angolo_k * k

grazie
Stefano

33  International / Hardware / Re: come posso migliorare lettura encoder on: July 10, 2014, 06:04:08 am
ciao, grazie per il supporto

dalla rete 220v
+24v alimentatore collegato al V+ del driver
GND alimentatore collegato al GND del driver

dalla rete 220v
+9v alimentatore per il primo e secondo arduino

pull+ del driver collegato al +5v del secondo arduino
pull- del driver collegato al pin 12 del secondo arduino

+5v del primo arduino collegato al V+ dell'encoder e a una estremità di una resistenza da 10k
pin 2 collegato all'altra estremità della resistenza da 10k e al segnale dell'encoder
GND collegato al GND dell'encoder

quello che non capisco è perchè il secondo arduino collegato all'encoder funziona solo con il driver non alimentato

oggi ho acquistato dei cavi schermati vediamo se la cosa migliora

Stefano
34  International / Hardware / Re: come posso migliorare lettura encoder on: July 09, 2014, 12:52:11 pm
@martinix
allego lo schema spero sia comprensibile
35  International / Hardware / Re: aiuto su scelta arduino/hardware on: July 09, 2014, 12:50:24 pm
io per le mie 2 applicazioni ho comprato su ebay, comunichi con la pseudo seriale di arduino con i comandi AT

Stefano
36  International / Hardware / Re: aiuto su scelta arduino/hardware on: July 09, 2014, 11:21:29 am
ciao
come consumi non saprei dirti, ma per incrementare le porte digitali puoi usare anche gli shift register  anche se il programma si complica, ma non in modo insormontabile

Stefano
37  International / Hardware / Re: come posso migliorare lettura encoder on: July 09, 2014, 11:18:32 am
Ho capito bene cosa significa open collector, ho collegato arduino+encoder ma stavolta è il driver dello stepper a dare problemi, in qualche modo interferisce con la scheda

Stefano
38  International / Hardware / Re: come posso migliorare lettura encoder on: July 09, 2014, 02:02:46 am
ciao
ho migliorato, l'uscita dell'opto verso arduino,  mettendo una R2 10k e una R3 tra base e gnd da 1M, adesso ho un problema con lo sketch che, dopo un certo numero di conteggi si ferma, ultriore osservazione è che questo numero è variabile, come al solito chiedo suggerimenti

grazie
Stefano
Code:
/*
 gestisce il segnale dell'encoder
 utilizzo di un encoder NPN
 scheda 7/10
 */
#define encoder_PinA 2
#define motor_Pin 12
#define motor_led 13

volatile long angolo;
long angolo_1;
long angolo_k;

byte fila;
long k;
long i;

void setup()
{
  Serial.begin(9600);

  pinMode(encoder_PinA, INPUT_PULLUP);  
  attachInterrupt(0, canaleA, RISING); //encoder al pin 2
  angolo = 0;
  angolo_1 = 0;
  angolo_k = 70;
  fila = 1;
  k = 1;
  i = 1;
  
  pinMode(motor_Pin, OUTPUT);
  pinMode(motor_led, OUTPUT);

  digitalWrite(motor_Pin, LOW);
  digitalWrite(motor_led, HIGH);
  delay(1000);
  //Serial.println("Pronto");
}

void loop()
{
  while(k == i)
  {
    i++;
    angolo_1 = angolo_k * k;
  
    switch(fila)
    {
    case 1:
      digitalWrite(motor_Pin, HIGH);
      digitalWrite(motor_led, HIGH);
      //Serial.println(digitalRead(motor_Pin));
      fila = 2;
      break;

    case 2:
      digitalWrite(motor_Pin, LOW);
      digitalWrite(motor_led, LOW);
      fila = 1;
      // Serial.println(digitalRead(motor_Pin));
      break;
    }
//    Serial.println(k);
//Serial.println(angolo);
//    Serial.println(angolo_1);
  }

  if(angolo == angolo_1)
  {
    k++;
  }
}

void canaleA()
{
  angolo++;
}
39  International / Hardware / Re: come posso migliorare lettura encoder on: July 08, 2014, 01:21:44 pm
ciao
si vede che ci capisco veramente poco, ho seguito schemi trovati in rete, l'uso del fotoaccopiatore mi piaceva per proteggere l'arduino da problemi a monte.
@matinix il 7414 lo conosco e la velocità non è un problema
@icio ma c'e una tensione minima di 2v, ho provato con lo schema ma non funziona il conteggio degli impulsi

Vi descrivo l'applicazione:
devo fare ruotare un tamburo di un certo angolo, da un lato ho un motore stepper collegato al tamburo con una puleggia, dall'altro questo encoder da 360 impulsi/giro, un arduino è collegato all'encoder per usare la funzione interrupt, mentre un altro arduino è collegato attraverso un driver al motore. Questo è lo sketch.
Code:
/*
per trapianto_stepper_test_31
 gestisce il segnale dell'encoder
 utilizzo di un encoder NPN
 scheda 7/10
 */
#define encoder_PinA 2
#define motor_Pin 12
#define motor_led 13

volatile long angolo;
long angolo_1;
long angolo_k;

byte fila;
long k;
long i;

void setup()
{
  Serial.begin(9600);

  pinMode(encoder_PinA, INPUT_PULLUP); 
  attachInterrupt(0, canaleA, RISING); //encoder al pin 2
  angolo = 0;
  angolo_1 = 0;
  angolo_k = 100;
  fila = 1;
  k = 1;
  i = 1;

  /*  Serial.print("k");
   Serial.print('\t');
   Serial.println("angolo");*/
  pinMode(motor_Pin, OUTPUT);
  pinMode(motor_led, OUTPUT);

  digitalWrite(motor_Pin, LOW);
  digitalWrite(motor_led, HIGH);
  delay(1000);
  //Serial.println("Pronto");
}

void loop()
{
  while(k == i)
  {
    i++;
    angolo_1 = angolo_k * k;

    switch(fila)
    {
    case 1:
      digitalWrite(motor_Pin, LOW);
      digitalWrite(motor_led, LOW);
      //Serial.println(digitalRead(motor_Pin));
      fila = 2;
      break;

    case 2:
      digitalWrite(motor_Pin, HIGH);
      digitalWrite(motor_led, HIGH);
      fila = 1;
      // Serial.println(digitalRead(motor_Pin));
      break;
    }
    Serial.println(k);
    Serial.println(angolo);
    Serial.println(angolo_1);
  }

  if(angolo == angolo_1)
  {
    k++;
  }
}

void canaleA()
{
  angolo++;
}
Stefano
40  International / Hardware / Re: come posso migliorare lettura encoder on: July 08, 2014, 09:07:35 am
ciao
l'encoder può essere alimentato anche a 5v ma nell'applicazione le altre tensioni sono a 12v, era per avere una sola tensione, cerco quello che mi hai indicato.
Grazie
Stefano
41  International / Hardware / come posso migliorare lettura encoder on: July 08, 2014, 06:40:40 am
Ciao
Sono alle prese con una applicazione che prevede la lettura di un encoder allegato tipo CWZ6C, ho un segnale quadrato controllato con oscilloscopio, devo migliorare la forma del segnale in uscita dal fotoaccoppiatore  4N32 che è pessimo, allego l'immagine del segnale e lo schema completo che sto utilizzando.  Il tutto serve a controllare un motore stepper, potrebbe essere il motore a creare i disturbi?

Avete qualche suggerimento?

Stefano
42  International / Generale / Re: [risolto] problema con interrupt on: July 06, 2014, 11:02:37 am
ciao
ho risolto riscrivendo lo sketch
Code:
/*
 DESCRIPTION
 ====================
 Simple example of the bounce library that switches the debug LED when a button is pressed.
 
 CIRCUIT
 ====================
 https://raw.github.com/thomasfredericks/Bounce-Arduino-Wiring/master/Bounce/examples/circuit-bounce-change-duration-retrigger.png
 */

/*
 */
#include <Bounce2.h>

#define sensor_stop_pin 2
#define motorPin        10// digital pin per il driver dello stepper

#define BUTTON_PIN      11
#define LED_PIN         13

// Instantiate a Bounce object
Bounce debouncer1 = Bounce();

int ritardo, ritardo_1;
volatile byte moto, k;
byte p;

void setup()
{
  // Setup the button
  pinMode(BUTTON_PIN,INPUT);
  // Activate internal pull-up
  digitalWrite(BUTTON_PIN,HIGH);

  // After setting up the button, setup debouncer
  debouncer1.attach(BUTTON_PIN);
  debouncer1.interval(10);

  //Setup the LED
  pinMode(LED_PIN,OUTPUT);

  //setup the motor 
  pinMode(sensor_stop_pin, INPUT);
  attachInterrupt(0, sensor_stop, FALLING); //sensore induttivo collegato al pin 2

  pinMode(motorPin,OUTPUT);// set the digital pin as output

  ritardo = 1500;// pauses for microseconds us
  ritardo_1 = 5000;// pauses for milliseconds ms

  k = 1;
  // Serial.begin(9600);
}

void loop()
{
  // Update the debouncer
  debouncer1.update();

  // Get the update value
  int value = debouncer1.read();

  // Turn on or off the LED
  if ( value == HIGH)
  {
    digitalWrite(LED_PIN, LOW);
    moto = 0;
  } 
  else
  {
    digitalWrite(LED_PIN, HIGH );
    moto = 1;
  } 
  while(moto == 1 && k ==1)
  {
    digitalWrite(motorPin, LOW);   // sets the pin on
    delayMicroseconds(ritardo);// pauses for microseconds
    digitalWrite(motorPin, HIGH);    // sets the pin off
    delayMicroseconds(ritardo);// pauses for microseconds
    moto = 0;
  }
  while(moto == 1 && k == 0)
  {
    delay(5000);
    k = 1;
  }
}//fine loop

void sensor_stop()
{
  moto = 1;
  k = 0;
}
Stefano
43  International / Generale / [risolto] problema con interrupt on: July 06, 2014, 05:09:45 am
Ciao
Uso un motore stepper per muovere un tappeto. In questo sketch, utilizzo la funzione interrupt,
Code:
attachInterrupt(0, sensor_stop, FALLING); //sensore induttivo collegato al pin 2
per gestire un evento dato da un sensore induttivo NPN 12v interfacciato con arduino mediante fotoaccoppiatore, con oscilloscopio ho controllato il segnale che esce dal fotoaccoppiatore, che vale HIGH, quando manualmente avvicino il target al sensore,il segnale va LOW in modo pulito e il tappeto si ferma come deve essere, trascorsi
Code:
 ritardo_1 = 5000;// pauses for milliseconds ms
il movimento ricomincia ma se a questo punto allontano il target il tappeto si ferma per ricominciare dopo il medesimo ritardo.
Ho fatto prove mettendo
Code:
attachInterrupt(0, sensor_stop, RISING); //sensore induttivo collegato al pin 2
, con il target vicino al sensore il segnale è LOW, il tappeto si muove e quando allontano il segnale va HIGH e il tappeto si ferma per ricominciare a muoversi dopo il ritardo impostato.
In pratica quello che vedo è che con RISING il codice funziona, con FALLING non fa quello che voglio.

Code:
/*
 DESCRIPTION
 ====================
 Simple example of the bounce library that switches the debug LED when a button is pressed.
 
 CIRCUIT
 ====================
 https://raw.github.com/thomasfredericks/Bounce-Arduino-Wiring/master/Bounce/examples/circuit-bounce-change-duration-retrigger.png
 */

/*
 */
#include <Bounce2.h>

#define sensor_stop_pin 2
#define motorPin        10// digital pin per il driver dello stepper

#define BUTTON_PIN      11
#define LED_PIN         13

// Instantiate a Bounce object
Bounce debouncer1 = Bounce();

int ritardo, ritardo_1;
volatile byte k;
byte pin;

void setup()
{
  // Setup the button
  pinMode(BUTTON_PIN,INPUT);
  // Activate internal pull-up
  digitalWrite(BUTTON_PIN,HIGH);

  // After setting up the button, setup debouncer
  debouncer1.attach(BUTTON_PIN);
  debouncer1.interval(5);

  //Setup the LED
  pinMode(LED_PIN,OUTPUT);

  //setup the motor  
  pinMode(sensor_stop_pin, INPUT);
  attachInterrupt(0, sensor_stop, FALLING); //sensore induttivo collegato al pin 2
  k = 1;

  pinMode(motorPin,OUTPUT);// set the digital pin as output

  ritardo = 1500;// pauses for microseconds us
  ritardo_1 = 5000;// pauses for milliseconds ms
//  Serial.begin(9600);
}

void loop()
{
  // Update the debouncer
  debouncer1.update();

  // Get the update value
  int value = debouncer1.read();

  // Turn on or off the LED
  if ( value == HIGH)
  {
    digitalWrite(LED_PIN, LOW);
    pin = 0;
  }  
  else
  {
    digitalWrite(LED_PIN, HIGH );
    pin = 1;
  }
  // Serial.println(value);
  //sezione motore  
  if(pin == 1 && k == 1)
  {
    digitalWrite(motorPin, LOW);   // sets the pin on
    delayMicroseconds(ritardo);// pauses for microseconds
    digitalWrite(motorPin, HIGH);    // sets the pin off
    delayMicroseconds(ritardo);// pauses for microseconds
  }

  if(k == 0)
  {
    k = 1;
    delay(ritardo_1);
  }
}//fine loop

void sensor_stop()
{
  k = 0;
}

Stefano

44  International / Hardware / Re: ADXL345 con valore di registro diverso dal datasheet on: July 04, 2014, 02:23:38 pm
Ciao
ok scusate ero convinto di averlo fatto

Stefano
45  Using Arduino / Sensors / Re: adxl 345 output strane behavior on: July 04, 2014, 12:54:06 pm
Hi Hackscribble

Thanks, you have right, now it work fine.
Have you any experience with digital accelerometer?

Regards
Stefano
Pages: 1 2 [3] 4 5 ... 45