SISTEMA LIDAR        

  Il LiDAR è un metodo di telerilevamento che utilizza un raggio laser pulsante per misurare distanze.

 

Per realizzare il sistema di rilevamento per generare una nuvola di punti utilizzerò le seguenti tecnologie:

TFMini Plus Lidar

 

Primo test di funzionamento con Seriale P.C. e ARDUINO -FISHINO:

#include <SoftwareSerial.h>
SoftwareSerial Serial1(2,3); // Serial1 PIN 2 RX (Verde) PIN 3 TX(Bianco)
int dist;
int strength;
float temprature;
int check;
int i;
int uart[9];
const int HEADER=0x59; void setup() {
Serial.begin(9600);
Serial1.begin(115200); // BIT RATE della Serial1 - connessione LiDAR con Arduino
}
void loop() {
if (Serial1.available()) {
if(Serial1.read() == HEADER) {
uart[0]=HEADER;
if (Serial1.read() == HEADER) {
uart[1] = HEADER;
for (i = 2; i < 9; i++) {
uart[i] = Serial1.read();
}
check = uart[0] + uart[1] + uart[2] + uart[3] + uart[4] + uart[5] + uart[6] + uart[7];
if (uart[8] == (check & 0xff)){
dist = uart[2] + uart[3] * 256;
strength = uart[4] + uart[5] * 256;
temprature = uart[6] + uart[7] *256;
temprature = temprature/8 - 256;
Serial.print("distanza rilevata = ");
Serial.println(dist);
}
}
}
}
}

 

OK ... Funziona

Secondo test di funzionamento con LCD OLED :

#include <SoftwareSerial.h>
SoftwareSerial Serial1(2,3); // Serial1 PIN 2 RX (Verde) PIN 3 TX(Bianco)
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 0 // GPIO0
Adafruit_SSD1306 display(OLED_RESET);

int dist;
int strength;
float temprature;
int check;
int i;
int uart[9];
const int HEADER=0x59;
void setup() {
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
Serial1.begin(115200); // BIT RATE della Serial1 - connessione LiDAR con Arduino
}
void loop() {
if (Serial1.available()) {
if(Serial1.read() == HEADER) {
uart[0]=HEADER;
if (Serial1.read() == HEADER) {
uart[1] = HEADER;
for (i = 2; i < 9; i++) {
uart[i] = Serial1.read();
}
check = uart[0] + uart[1] + uart[2] + uart[3] + uart[4] + uart[5] + uart[6] + uart[7];
if (uart[8] == (check & 0xff)){
dist = uart[2] + uart[3] * 256;
strength = uart[4] + uart[5] * 256;
temprature = uart[6] + uart[7] *256;
temprature = temprature/8 - 256;
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println(" DISTANZA");
display.println();
display.setTextSize(2);
display.print(dist);
display.println(" cm.");
display.display();

}
}
}
}
}

OK ... Funziona

N.B.  CONTROLLARE SEMPRE IL COLORE DELLE CONNESSIONI DELLE BOBINE

 Motore passo passo da 200 STEP

Driver Dual H -Bridge    2012 RobotBase

Dopo una giornata di ricerche,forse perchè datato, sono riuscito a farlo funzionare.

Motore passo passo :

 

IDE Arduino 1.8.12:

 

#include <Stepper.h>

#define pin_EA 2   // Definizione pin ENABLE   Va messo HIGH o 1

#define pin_EB 4 //   Definizione pin ENABLE  Va messo HIGH o 1

// IDE: Arduino 1.8.12

//SCHEDA: MAKER UNO +   o Arduino uno

//FILE :MOTORE_PASSO_PASSO2_27_DICEMBRE_2023

// Numero di step (passi) per effettuare una rotazione completa

const int stepPerRotazione = 200;

// Creazione dell’istanza dello Stepper

Stepper mioStepper(stepPerRotazione, 8, 9, 10, 11);

 void setup()

{

  pinMode(pin_EA, OUTPUT);  //setto il pin come uscita

  pinMode(pin_EB, OUTPUT);  //setto il pin come uscita

     // impostazione della rotazione a 20 rpm:

    mioStepper.setSpeed(20);

    // inizializzazione della porta seriale:

   // Serial.begin(9600);

  digitalWrite(pin_EA, HIGH);  //setto il pin Segnale Alto 5 volt

  digitalWrite(pin_EB, HIGH);  //setto il pin Segnale Alto 5 volt

}

 void loop()

{

    // una rotazione in una direzione

    //Serial.println("Rotazione oraria");

    mioStepper.step(stepPerRotazione);

    delay(500);

     // una rotazione in una direzione

    //Serial.println("Rotazione antioraria");

    mioStepper.step(-stepPerRotazione);

    delay(500);

}

 

 Alimentazione della scheda con 6 Vcc.

Collegare la massa dei 6 volt della scheda con la massa di Arduino.

Parametri da tenere in considerazione: Periodo e Frequenza.

Il Periodo rappresenta il Tempo(s) che impiega un segnale( digitale o analogico) per compiere una oscillazione completa.

La Frequenza definisce il numero di volte che il segnale( digitale o analogico) si ripete in un secondo.

 Bisogna tenere presente che:

     Vedere grafici sottostanti.

Il periodo del segnale è pari a 20 ms

T = 1/f   T = 1/50

 Per facilitare il calcolo facciamo in modo che al denominatore compaia 1000

Moltiplichiamo il numeratore e denominatore per 20 ed avremo

T = 20/1000     Pertanto il periodo del segnale è pari a 20 ms

Con un aumento eccessivo della frequenza avremo una minore coppia ed una eventuale perdita del passo.

In questo caso:

T = 1/1250    l periodo del segnale è pari a 0.8 ms

 

Ritorniamo a noi.

Motore passo passo da 200 STEP, occorrono 200 impulsi per compiere un giro completo.

Es. pratico e considerazioni personali.

Motore che compie 60 giri al minuto, l'albero motore compie un giro in un secondo.

Significa che:

Con un periodo di 5 ms ho constatato che l'albero perde qualche passo.

Mi conviene avere un periodo,per essere sicuro, di 10 ms

E' opportuno utilizzare il numero i giri che siano dei sottomultipli di 60 ed evitare valori decimali.

Pertanto 60 - 30 - 15, ecc..

Se imposto una velocità pari a 30 giri al minuto

L'albero motore per effettuare un giro completo occorrono 2 secondi

Significa che:

 T = 1/f   T = 1/100

 Per facilitarci il calcolo facciamo in modo che al denominatore compaia 1000

Moltiplichiamo il numeratore e denominatore per 10 ed avremo

T = 10/1000     Pertanto il periodo del segnale è pari a 10 ms

 

 

 

STEPPERONLINE Nema 17  Motore passo-passo 1A 17Ncm Bipolare 1,8 gradi

 

 

L298N Modulo scheda controller Modulo passo-passo

Azionamento motore Dual H Bridge

 

 

SPECIFICHE:
Nome: modulo driver motore a ponte doppio H
Modalità di funzionamento: Driver a ponte H (doppio)
Tensione logica: 5 v
Tensione di esercizio: 5 V - 35 V
Corrente logica: 0 mA-36 mA.
Corrente di azionamento: 2 a (ponte singolo MAX)
Temperatura di stoccaggio: da -20 °C a +135 °C.
Potenza massima: 25 w
Peso: 30 g
Dimensioni: 43 x 43 x 27 mm.
 

 

Alimentazione scheda driver di 6 Volt per evitare surriscaldamento del motore passo passo.

L'uscita da 5 Volt essendo stabilizzata alimenta l'Arduino Nano.

Per verificare la polarità delle uscite (A+ A- B+ B-) utilizzare il multimetro digitale in modalità :

 

 

// Inclusione della libreria stopper
#include <Stepper.h>
// IDE: Arduino 1.8.12
//SCHEDA: MAKER UNO + Arduino uno e NANO
//FILE :MOTORE_PASSO_PASSO nano_9_gennaio 2024
// Numero di step (passi) per effettuare una rotazione completa
const int stepPerRotazione = 200;
// Creazione dell’istanza dello Stepper
Stepper mioStepper(stepPerRotazione, 10, 9, 8, 7);

void setup()
{


// impostazione della rotazione a 30 rpm:
mioStepper.setSpeed(30);
// inizializzazione della porta seriale:
// Serial.begin(9600);
}

void loop()
{

// una rotazione in una direzione
//Serial.println("Rotazione oraria");
mioStepper.step(stepPerRotazione);
delay(1000);

// una rotazione in una direzione
//Serial.println("Rotazione antioraria");
mioStepper.step(-stepPerRotazione);
delay(1000);
}

Funziona correttamente anche con i motori passo passo:

11HS12-0674S

42BYGHW811

 

continua...

 

 

 CNC Shield V3 Scheda di Sviluppo impilata su FISHINO Rev.3

 Posizione dei Pin digitali ed analogici sulla scheda:

Terzo test di funzionamento con SHIELD CNC - FISHINO e OLED e LIDAR:

#include <SoftwareSerial.h>
SoftwareSerial Serial1(9,10); // Serial1 PIN 9 RX (Verde) PIN
10 TX(Bianco) LIDAR
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 0 // GPIO0
Adafruit_SSD1306 display(OLED_RESET);
int dist;
int strength;
float temprature;
int check;
int i;
int uart[9];
const int HEADER=0x59;
void setup() {
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
Serial1.begin(115200); // BIT RATE della Serial1 - connessione LiDAR con Arduino
}
void loop() {
if (Serial1.available()) {
if(Serial1.read() == HEADER) {
uart[0]=HEADER;
if (Serial1.read() == HEADER) {
uart[1] = HEADER;
for (i = 2; i < 9; i++) {
uart[i] = Serial1.read();
}
check = uart[0] + uart[1] + uart[2] + uart[3] + uart[4] + uart[5] + uart[6] + uart[7];
if (uart[8] == (check & 0xff)){
dist = uart[2] + uart[3] * 256;
strength = uart[4] + uart[5] * 256;
temprature = uart[6] + uart[7] *256;
temprature = temprature/8 - 256;
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println(" DISTANZA");
display.println();
display.setTextSize(2);
display.print(dist);
display.println(" cm.");
display.display();
}
}
}
}
}

OK ... Funziona

Quarto test di funzionamento con SHIELD CNC - FISHINO e motori passo passo :

#define EN 8
//Direzione pin
#define X_DIR 5
#define Y_DIR 6
//Step pin
#define X_STP 2
#define Y_STP 3
int steps = 50; // Passi da effettuare
void setup() {
// Impostazione di pin
pinMode(X_DIR, OUTPUT); pinMode(X_STP, OUTPUT);
pinMode(Y_DIR, OUTPUT); pinMode(Y_STP, OUTPUT);
pinMode(EN, OUTPUT);
digitalWrite(EN, LOW);
}
void loop() {
for (int i = 0; i < steps; i++) {
digitalWrite(Y_DIR, HIGH); // rotazione oraria
digitalWrite(Y_STP, HIGH);
delay(1);
digitalWrite(Y_STP, LOW);
delay(1);
digitalWrite(X_DIR, HIGH); // rotazione oraria
digitalWrite(X_STP, HIGH);
delay(1);
digitalWrite(X_STP, LOW);
delay(1);
}
delay (2000);
}

 

 

 

 

 

Cod. prodotto: 8300 - CNCNANOSET (Futura Elettronica - Gallarate)

PIN:  EN = 8   X_DIR = 2  X_STEP = 5   Y_DIR = 3  Y_STEP = 6   Z_DIR = 4    Z_STEP = 7

TEST di funzionamento (FULL STEP            IDE 1.6.7   NANO - Old Bootloader):

Dopo varie peripezie elettroniche sono riuscito a far effettuare al motore passo  1/8 dello  STEP:

Ho utilizzato il PIN 12 (messo HIGH) per attivare la funzione 1/8

Motore passo passo :

 

SHIELD realizzata personalmente, secondo le mie necessità, impilata su Arduino  :

 

Vedi secondo test di funzionamento con LCD OLED :( programma realizzato con Fishino)

OK ... Funziona

 

DRV8825 Stepper Driver

Il driver regola la corrente che circola nelle bobine dello statore.

Durante il funzionamento dei motori passo passo non bisogna superare il valore di targa della corrente che circola negli avvolgimenti.

Una corrente superiore comporta un riscaldamento sia degli avvolgimenti che della carcassa di contenimento del motore.

La formula pratica per il driver A8825 è sintetizzata nella figura sottostante.

Per il nostro motore la Imax è pari a 0.67 A meno il 10% avremo 0.6 A.

Vref sarà uguale 0.6 / 2  Volt

 

 

Metodo pratico per la calibrazione  :

Impilare correttamente i driver sulla shield  (Riferimento PIN EN)

 

 

 

MULTIMETRO:

Ruotare il TRIMMER  fino a far comparire sull'LCD 0.295 Volt

 

Quinto test di funzionamento con SHIELD CNC - FISHINO -Motori STEP -LIDAR e OLED  :

 

 

#define EN 8
//Direction pin
#define X_DIR 5
#define Y_DIR 6
//Step pin
#define X_STP 2
#define Y_STP 3
int steps = 50; // Passi da effettuare

//#include <SoftwareSerial.h>
//SoftwareSerial Serial1(9,10); // Serial1 PIN 9 RX (Verde) PIN 10 TX(Bianco)
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 0 // GPIO0
Adafruit_SSD1306 display(OLED_RESET);

int dist;
int strength;
float temprature;
int check;
int i;
int uart[9];
const int HEADER=0x59;

void setup() {
//Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
Serial.begin(115200); // BIT RATE della Serial1 - connessione LiDAR con Arduino

// Impostazione di pin
pinMode(X_DIR, OUTPUT); pinMode(X_STP, OUTPUT);
pinMode(Y_DIR, OUTPUT); pinMode(Y_STP, OUTPUT);
pinMode(EN, OUTPUT);
digitalWrite(EN, LOW);

}

void loop() {
if (Serial.available()) {
if(Serial.read() == HEADER) {
uart[0]=HEADER;
if (Serial.read() == HEADER) {
uart[1] = HEADER;
for (i = 2; i < 9; i++) {
uart[i] = Serial.read();
}
check = uart[0] + uart[1] + uart[2] + uart[3] + uart[4] + uart[5] + uart[6] + uart[7];
if (uart[8] == (check & 0xff)){
dist = uart[2] + uart[3] * 256;
strength = uart[4] + uart[5] * 256;
temprature = uart[6] + uart[7] *256;
temprature = temprature/8 - 256;
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println(" DISTANZA");
display.println();
display.setTextSize(2);
display.print(dist);
display.println(" cm.");
display.display();
delay (200);


for (int i = 0; i < steps; i++) {
digitalWrite(Y_DIR, HIGH); // rotazione oraria
digitalWrite(Y_STP, HIGH);
delay(1);
digitalWrite(Y_STP, LOW);
delay(1);
digitalWrite(X_DIR, HIGH); // rotazione oraria
digitalWrite(X_STP, HIGH);
delay(1);
digitalWrite(X_STP, LOW);
delay(1);
}
delay (200);


}
}
}
}
}
 

N.B. E' necessario un aggiustamento del programma

 

 

VISICAD :Sistema CAD per la progettazione dei componenti di supporto

SOGI M1-250

FENIX 4 (Fresatrice realizzata dallo scrivente)

ANYCUBIC MEGA S

 

      

MATEMATICA: Le coordinate sferiche (XYZ) -(un pò di matematica non guasta)

Per determinare le coordinate 3D del punto P è necessario fare riferimento ai due piani cartesiani XZ e XY .

Con il piano cartesiano

Esempio pratico

Dati iniziali noti:

=  L x sin (28.125°)  = 24.35 x 0.47139 = 11.478 m.

OM = L x cos (28.125°)  = 24.35 x 0.88192 = 21.474 m.

Il segmento OM rappresenta la proiezione di L sul piano XY

MN(Y-)  =  OM x sin (28.8°)  = 21.474 x 0,48175 = 10.345 m.

ON(X)  =  OM x cos (28.8°)  = 21.474 x 0,87630 = 18.817 m.

Controllo effettuato del punto P con il CAD:

Le formule matematiche sopra esposte saranno utilizzate nel programma di Arduino

Spezzone del programma con simulazione senza Lidar (Funzione RANDOM della distanza)

Microstep  1/2 -  Ad ogni impulso l'albero motore ruota di 0.9°

400 impulsi per far effettuare al motore passo passo 1 giro completo.

 

Importazione nuvola di punti in VISICAD

Caratteristica del file TXT della nuvola di punti.

Il file completo è costituito da blocchi di 240 (definiti arbitrariamente) punti XYZ

240  intestazione del gruppo di punti   
11.63 73.08 0.00
12.37 73.97 0.00
12.77 72.89 0.00
13.53 73.77 0.00
13.92 72.68 0.00
14.68 73.55 0.00
15.26 73.43 0.00
15.62 72.33 0.00

.............................

240  intestazione del gruppo di punti
11.63 73.08 3.48
12.20 72.99 3.48
12.77 72.89 3.48
13.53 73.77 3.48
14.11 73.66 3.48
14.49 72.57 3.48
15.06 72.45 3.48
15.84 73.31 3.48

.............................

Importa e unisce automaticamente gruppi di 240 punti con una curva.

Ottengo tante curve di livello a Z costanti quanti sono i gruppi presenti nel file TXT. .

Poi personalmente unisco le curve, a coppia, ed ottengo la superficie scansionata della grotta in 3D

      

 

ESP32

Codificazione dei PIN con i ripettivi GPIO.

Per motivi grafici sono stati eliminati alcuni componenti elettronici dal circuito originale.

ESP32 UTILIZZATO (30 pin)

N.B. Non bisogna confondere la numerazione dei PIN dell'ESP con la numerazione dei GPIO.

N.B.Nella programmazione si utilizza la numerazione dei GPIO.

N.B. I pin  GPIO non tollerano i 5 volt , sono 3,3 volt per logica ALTA (1).

 

PIN  GPIO:

OLED    21 e 22

LIDAR  16 e 17  RXD2 e TXD2 (Verde e Bianco)

 

Secondo test di funzionamento con ESP32  LIDAR e LCD OLED:

// File:LIDAR_ESP32_18_GIUGNO_2022
// con oled 164x48
#include <Wire.h>
#include "SSD1306.h"
SSD1306 display(0x3c, 21, 22);

#define RXD2 16
#define TXD2 17
int dist; /*—actual distance measurements of LiDAR—*/
int strength; /*—signal strength of LiDAR */
float temprature;
unsigned char check; /*—save check value */
int i;
unsigned char uart[9]; /*—save data measured by LiDAR */
const int HEADER=0x59; /*—frame header of data package */
int rec_debug_state = 0x01;//receive state for frame
void setup() {
delay(2000);
Serial.begin(115200);
Serial.println("\nBenewake TFmini-PLUS UART LiDAR Program");
Serial2.begin(115200);

//******************************************************************
//Next section includes processing LiDARs Data and printing it to the terminal.
display.init();
display.flipScreenVertically();
display.setFont(ArialMT_Plain_10);

}
void loop() {
Get_Lidar_data();

}
void Get_Lidar_data(){
// display.init();
display.clear();

if (Serial2.available()) //check if serial port has data input
{
if(rec_debug_state == 0x01)
{ //the first byte
uart[0]=Serial2.read();
if(uart[0] == 0x59)
{
check = uart[0];
rec_debug_state = 0x02;
}
}
else if(rec_debug_state == 0x02)
{//the second byte
uart[1]=Serial2.read();
if(uart[1] == 0x59)
{
check += uart[1];
rec_debug_state = 0x03;
}
else{
rec_debug_state = 0x01;
}
}
else if(rec_debug_state == 0x03)
{
uart[2]=Serial2.read();
check += uart[2];
rec_debug_state = 0x04;
}
else if(rec_debug_state == 0x04)
{
uart[3]=Serial2.read();
check += uart[3];
rec_debug_state = 0x05;
}
else if(rec_debug_state == 0x05)
{
uart[4]=Serial2.read();
check += uart[4];
rec_debug_state = 0x06;
}
else if(rec_debug_state == 0x06)
{
uart[5]=Serial2.read();
check += uart[5];
rec_debug_state = 0x07;
}
//Benewake
else if(rec_debug_state == 0x07)
{
uart[6]=Serial2.read();
check += uart[6];
rec_debug_state = 0x08;
}
else if(rec_debug_state == 0x08)
{
uart[7]=Serial2.read();
check += uart[7];
rec_debug_state = 0x09;
}
else if(rec_debug_state == 0x09)
{
uart[8]=Serial2.read();
if(uart[8] == check)
{
dist = uart[2] + uart[3]*256;//the distance
strength = uart[4] + uart[5]*256;//the strength
temprature = uart[6] + uart[7] *256;//calculate chip temprature
temprature = temprature/8 - 256;
Serial.print("dist = ");
Serial.print(dist); //output measure distance value of LiDAR
Serial.print('\n');
//Benewake
Serial.print("strength = ");
Serial.print(strength); //output signal strength value
Serial.print('\n');
Serial.print("\t Chip Temprature = ");
Serial.print(temprature);
Serial.println(" celcius degree"); //output chip temperature of Lidar

display.setTextAlignment(TEXT_ALIGN_LEFT);
display.setFont(ArialMT_Plain_16);
display.drawString(0, 0, "DISTANZA cm. ");
display.setFont(ArialMT_Plain_24);
String myStr;
myStr = String(dist);

display.drawString(32, 28, myStr);
display.display();
while(Serial2.available()){Serial2.read();}

}
rec_debug_state = 0x01;
}
}
}

Questo è il risultato

N.B.  CONTROLLARE SEMPRE IL COLORE DELLE CONNESSIONI DELLE BOBINE

 Motore passo passo da 200 STEP

Driver Dual H -Bridge    2012 RobotBase

Dopo una giornata di ricerche,forse perchè datato, sono riuscito a farlo funzionare.

Motore passo passo :

 

IDE Arduino 1.8.12:

 

#include <Stepper.h>

#define pin_EA 2   // Definizione pin ENABLE   Va messo HIGH o 1

#define pin_EB 4 //   Definizione pin ENABLE  Va messo HIGH o 1

// IDE: Arduino 1.8.12

//SCHEDA: MAKER UNO +   o Arduino uno

//FILE :MOTORE_PASSO_PASSO2_27_DICEMBRE_2023

// Numero di step (passi) per effettuare una rotazione completa

const int stepPerRotazione = 200;

// Creazione dell’istanza dello Stepper

Stepper mioStepper(stepPerRotazione, 8, 9, 10, 11);

 void setup()

{

  pinMode(pin_EA, OUTPUT);  //setto il pin come uscita

  pinMode(pin_EB, OUTPUT);  //setto il pin come uscita

     // impostazione della rotazione a 20 rpm:

    mioStepper.setSpeed(20);

    // inizializzazione della porta seriale:

   // Serial.begin(9600);

  digitalWrite(pin_EA, HIGH);  //setto il pin Segnale Alto 5 volt

  digitalWrite(pin_EB, HIGH);  //setto il pin Segnale Alto 5 volt

}

 void loop()

{

    // una rotazione in una direzione

    //Serial.println("Rotazione oraria");

    mioStepper.step(stepPerRotazione);

    delay(500);

     // una rotazione in una direzione

    //Serial.println("Rotazione antioraria");

    mioStepper.step(-stepPerRotazione);

    delay(500);

}

 

 Alimentazione della scheda con 6 Vcc.

Collegare la massa dei 6 volt della scheda con la massa di Arduino.

Parametri da tenere in considerazione: Periodo e Frequenza.

Il Periodo rappresenta il Tempo(s) che impiega un segnale( digitale o analogico) per compiere una oscillazione completa.

La Frequenza definisce il numero di volte che il segnale( digitale o analogico) si ripete in un secondo.

 Bisogna tenere presente che:

     Vedere grafici sottostanti.

Il periodo del segnale è pari a 20 ms

T = 1/f   T = 1/50

 Per facilitare il calcolo facciamo in modo che al denominatore compaia 1000

Moltiplichiamo il numeratore e denominatore per 20 ed avremo

T = 20/1000     Pertanto il periodo del segnale è pari a 20 ms

Con un aumento eccessivo della frequenza avremo una minore coppia ed una eventuale perdita del passo.

In questo caso:

T = 1/1250    l periodo del segnale è pari a 0.8 ms

 

Ritorniamo a noi.

Motore passo passo da 200 STEP, occorrono 200 impulsi per compiere un giro completo.

Es. pratico e considerazioni personali.

Motore che compie 60 giri al minuto, l'albero motore compie un giro in un secondo.

Significa che:

Con un periodo di 5 ms ho constatato che l'albero perde qualche passo.

Mi conviene avere un periodo,per essere sicuro, di 10 ms

E' opportuno utilizzare il numero i giri che siano dei sottomultipli di 60 ed evitare valori decimali.

Pertanto 60 - 30 - 15, ecc..

Se imposto una velocità pari a 30 giri al minuto

L'albero motore per effettuare un giro completo occorrono 2 secondi

Significa che:

 T = 1/f   T = 1/100

 Per facilitarci il calcolo facciamo in modo che al denominatore compaia 1000

Moltiplichiamo il numeratore e denominatore per 10 ed avremo

T = 10/1000     Pertanto il periodo del segnale è pari a 10 ms

 

 

 

STEPPERONLINE Nema 17  Motore passo-passo 1A 17Ncm Bipolare 1,8 gradi

 

 

L298N Modulo scheda controller Modulo passo-passo

Azionamento motore Dual H Bridge

 

 

SPECIFICHE:
Nome: modulo driver motore a ponte doppio H
Modalità di funzionamento: Driver a ponte H (doppio)
Tensione logica: 5 v
Tensione di esercizio: 5 V - 35 V
Corrente logica: 0 mA-36 mA.
Corrente di azionamento: 2 a (ponte singolo MAX)
Temperatura di stoccaggio: da -20 °C a +135 °C.
Potenza massima: 25 w
Peso: 30 g
Dimensioni: 43 x 43 x 27 mm.
 

 

Alimentazione scheda driver di 6 Volt per evitare surriscaldamento del motore passo passo.

L'uscita da 5 Volt essendo stabilizzata alimenta l'Arduino Nano.

Per verificare la polarità delle uscite (A+ A- B+ B-) utilizzare il multimetro digitale in modalità :

 

 

// Inclusione della libreria stopper
#include <Stepper.h>
// IDE: Arduino 1.8.12
//SCHEDA: MAKER UNO + Arduino uno e NANO
//FILE :MOTORE_PASSO_PASSO nano_9_gennaio 2024
// Numero di step (passi) per effettuare una rotazione completa
const int stepPerRotazione = 200;
// Creazione dell’istanza dello Stepper
Stepper mioStepper(stepPerRotazione, 10, 9, 8, 7);

void setup()
{


// impostazione della rotazione a 30 rpm:
mioStepper.setSpeed(30);
// inizializzazione della porta seriale:
// Serial.begin(9600);
}

void loop()
{

// una rotazione in una direzione
//Serial.println("Rotazione oraria");
mioStepper.step(stepPerRotazione);
delay(1000);

// una rotazione in una direzione
//Serial.println("Rotazione antioraria");
mioStepper.step(-stepPerRotazione);
delay(1000);
}

Funziona correttamente anche con i motori passo passo:

11HS12-0674S

42BYGHW811

 

continua...