Show Posts
Pages: 1 [2] 3 4 ... 44
16  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
17  International / Hardware / Re: come posso migliorare lettura encoder on: July 09, 2014, 12:52:11 pm
@martinix
allego lo schema spero sia comprensibile
18  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
19  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
20  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
21  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++;
}
22  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
23  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
24  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
25  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
26  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

27  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
28  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
29  International / Hardware / Re: ADXL345 con valore di registro diverso dal datasheet on: July 04, 2014, 07:57:05 am
ciao
purtroppo non saprei non sono cosi esperto, la mia era una curiosità, con quel sensore i problemi sono altri, è per questo che apro post , ma visto che sono diversi, forse è meglio che scriverò tutto sotto un solo post

Stefano
30  Using Arduino / Sensors / adxl 345 output strane behavior on: July 04, 2014, 06:39:21 am
Hi
I am starting to try with ADXL345 with this sketch:
Code:
/*
I2C comunication
 read acceleration value
 
 CS pin 3v3
 SDA pin SDA +10k to 3v3
 SDO pin GND
 SCL pin SCL +10k to 3v3
 3v3 VCC
 GND GND

 */

#define _2g (4)
#define _4g (8)
#define _8g (16)
#define _16g (32)

#include <Wire.h>
#define DEVICE (0x53)    //ADXL345 device address
#define TO_READ (6)        //num of bytes we are going to read each time (two bytes for each axis)

#define samples (100)
float x1, y1, z1;
int sum_x, sum_y, sum_z;
int j;

byte buff[TO_READ] ;    //6 bytes buffer for saving data read from the device

int regAddress;
int x, y, z;

void setup()
{
  Wire.begin();        // join i2c bus (address optional for master)
  Serial.begin(9600);  // start serial for output
 
  //Turning on the ADXL345       
  writeTo(DEVICE, 0x31, 0b00001011);//0b00001011 self mode off with full resolution 16g
  writeTo(DEVICE, 0x2D, 0x08);
  writeTo(DEVICE, 0x2E, 0x80);
 
  regAddress = 0x32;    //first axis-acceleration-data register on the ADXL345
 
  int sum_x = 0;
  int sum_y = 0;
  int sum_z = 0;
}

void loop()

 // readFrom(DEVICE, regAddress, TO_READ, buff); //read the acceleration data from the ADXL345

  //each axis reading comes in 10 bit resolution, ie 2 bytes.  Least Significat Byte first!!
  //thus we are converting both bytes in to one int
 /* x = (((int)buff[1]) << 8) | buff[0];   
  y = (((int)buff[3]) << 8) | buff[2];
  z = (((int)buff[5]) << 8) | buff[4];
*/

  for(j = 0; j < samples; j++)
  { 
    readFrom(DEVICE, regAddress, TO_READ, buff); //read the acceleration data from the ADXL345

    //each axis reading comes in 10 bit resolution, ie 2 bytes.  Least Significat Byte first!!
    //thus we are converting both bytes in to one int
    x = (((int)buff[1]) << 8) | buff[0];   
    y = (((int)buff[3]) << 8) | buff[2];
    z = (((int)buff[5]) << 8) | buff[4];

    sum_x += x; 
    sum_y += y;
    sum_z += z;
  }

  x1 = sum_x / samples;
  y1 = sum_y / samples;
  z1 = sum_z / samples;

  sum_x = 0;
  sum_y = 0;
  sum_z = 0;
//  Serial.println("Start");

  Serial.print(x1, 2);
  Serial.print('\t');

  Serial.print(y1, 2);
  Serial.print('\t');

  Serial.print(z1, 2);
  Serial.print('\t');

  Serial.println();
  delay(20);//It appears that delay is needed in order not to clog the port

}

void writeTo(int device, byte address, byte val) {
  Wire.beginTransmission(device); //start transmission to device
  Wire.write(address);        // send register address
  Wire.write(val);        // send value to write
  Wire.endTransmission(); //end transmission
}

void readFrom(int device, byte address, int num, byte buff[]) {
  Wire.beginTransmission(device); //start transmission to device
  Wire.write(address);        //sends address to read from
  Wire.endTransmission(); //end transmission

    Wire.beginTransmission(device); //start transmission to device (initiate again)
  Wire.requestFrom(device, num);    // request 6 bytes from device

  int i = 0;
  while(Wire.available())    //device may send less than requested (abnormal)
  {
    buff[i] = Wire.read(); // receive a byte
    i++;
  }
  Wire.endTransmission(); //end transmission
}

if I define samples=100
I have this output:
Code:
-220.00 -268.00 140.00
-221.00 -267.00 139.00
-221.00 -268.00 140.00
-221.00 -268.00 139.00
-221.00 -268.00 139.00
-221.00 -267.00 141.00
-221.00 -268.00 139.00
-220.00 -268.00 139.00
-221.00 -267.00 139.00
-221.00 -268.00 141.00
-221.00 -267.00 139.00
-221.00 -268.00 139.00

if I define samples=10
I have this output:
Code:
-222.00 -269.00 796.00
-222.00 -270.00 794.00
-221.00 -269.00 796.00
-221.00 -267.00 793.00
-221.00 -270.00 794.00
-222.00 -270.00 794.00
-223.00 -267.00 796.00
-222.00 -269.00 794.00
-221.00 -268.00 795.00
-222.00 -269.00 794.00
-222.00 -269.00 794.00
-221.00 -270.00 795.00

someone can me explain that

Stefano
Pages: 1 [2] 3 4 ... 44