luni, 30 aprilie 2018

3D scanner (3) - Controlarea directiei si vitezei motorului Nema17 folosind bluetooth HC06

Descriere proiect:
Controlul de pe telefon prin bluetooth a motorului pas cu pas NEMA17. Se poate controla direcția și viteza de rotire. Asta o sa ma ajute să opresc sau sa reduc viteza de scanare.

Documentatie proiect:
-Arduino-and-hc-06

Componente:
- Motor NEMA17
- Driver A4988
- Arduino Pro micro
- Cabluri de conectare
- Breadborad
- Suport motor și suport soclu printate 3D
- Bluetooth HC-06 (postari mai vechi legate de bluetooth)


Schema electronica/sistem:

Cod de test:

#include "SoftwareSerial.h"

//Global Variables

// defines pins numbers
const int stepPin = 4; 
const int dirPin = 5; 

char _btRxData; //Most recent received byte from BT Shield
String _btRxBuff=""; //Local buffer for received data
int speedmot=0;

void setup() {
  Serial.begin(57600);
  BluetoothInit();
  // Sets the two pins as Outputs
  pinMode(stepPin,OUTPUT); 
  pinMode(dirPin,OUTPUT);
}

void loop() {

  //If new byte of data to receive from BT Shield
  if(Serial1.available())
  {
     _btRxData = Serial1.read(); //Read it
     _btRxBuff += _btRxData;   //Add it to buffer
     Serial.print(_btRxData);  //Debug: Send to PC Console 

      if(_btRxData == '1') // Checks whether value of data is equal to 1
         digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction
      else if(_btRxData == '0')     //  Checks whether value of data is equal to 0
         digitalWrite(dirPin, LOW); //If value is 0 then LED turns OFF
      
      if(_btRxData == '2') // Checks whether value of data is equal to 2
         speedmot +=100; // If value is 2 then increase the motor speed

      else if(_btRxData == '3')//  Checks whether value of data is equal to 3
         speedmot -=100;   //If value is 3 then reduce the motor speed

      if(_btRxData == 'x') // Checks whether value of data is equal to x
         speedmot = 0; // stop the motor

      if(_btRxData == 'b')// Checks whether value of data is equal to b
         speedmot = 6000; //  set the motor speed

      if(_btRxData == 'c') // Checks whether value of data is equal to c
         speedmot = 60000; // set the motor speed

      if(_btRxData == 'p') // Checks whether value of data is equal to p
         speedmot = 600; // set the motor speed

      if(_btRxData == 't')// Checks whether value of data is equal to t
         speedmot = 500; //set the motor speed
  }
  
  
  // Makes 200 pulses for making one full cycle rotation
  for(int x = 0; x < 200; x++) {
    digitalWrite(stepPin,HIGH); 
    delayMicroseconds(speedmot); 
    digitalWrite(stepPin,LOW); 
    delayMicroseconds(speedmot); 
  }
}

void BluetoothInit()
{  
  Serial1.begin(57900);
  Serial1.print("\r\n+STWMOD=0\r\n"); //set the bluetooth work in slave mode
  Serial1.print("\r\n+STNA=SeeedBTSlave\r\n"); //set the bluetooth name as "SeeedBTSlave"
  Serial1.print("\r\n+STOAUT=1\r\n"); // Permit Paired device to connect me
  Serial1.print("\r\n+STAUTO=0\r\n"); // Auto-connection should be forbidden here
  delay(2000); // This delay is required.
  Serial1.print("\r\n+LOSSRECONN=0\r\n");
  delay(2000);
  Serial1.print("\r\n+INQ=1\r\n"); //make the slave bluetooth inquirable 
  delay(2000); // This delay is required.
  Serial1.flush();
}

In următorul pas o sa lipesc toate componentele pe o placa separata cât mai compactă. Apoi în următorul , probabil și ultimul pas, o sa încep sa scanez câteva obiecte, dar o sa am nevoie și de o placa rotunda foarte dreapta pe care obiectele sa se rotească fără a se înclina.
O seara faină tuturor!

duminică, 29 aprilie 2018

3D scanner (2) - Soclu rotitor la 360 grade

Descriere proiect:
Soclu rotitor pentru rotirea obiectelor la 360 de grade. In loc sa rotesc scanner-ul în jurul obiectului prefer sa rotesc obiectul și sa țin scanner-ul fix. Din acest motiv am nevoie de un soclu care se rotește cu o viteaza mica constantă. In următoarea fază ar trebui în spatele obiectului sa așez un panou alb pentru ca fundalul sa nu interfereze cu scanner-ul și cu obiectul.

Documentatie proiect:
M-am inspirat de pe pagina : Control a Stepper Motor with A4988 Driver and Arduino

Componente:
- Motor NEMA17
- Driver A4988
- Arduino Mega
- Cabluri de conectare
- Breadborad
- Suport motor și suport soclu printate 3D (modelele in thingverse)


Schema electronica:

Cod de test:
// defines pins numbers
const int stepPin = 3; 
const int dirPin = 4; 
 
void setup() {
  // Sets the two pins as Outputs
  pinMode(stepPin,OUTPUT); 
  pinMode(dirPin,OUTPUT);
}

void loop() {
  digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction

  // Makes 200 pulses for making one full cycle rotation
  for(int x = 0; x < 200; x++) {
    digitalWrite(stepPin,HIGH); 
    delayMicroseconds(60000); 
    digitalWrite(stepPin,LOW); 
    delayMicroseconds(60000); 
  }
}
Urmează încapsularea controlerului și să-i adaug bluetooth sau un potențiometru pentru controlul vitezei.
Weekend plăcut tuturor !

luni, 9 aprilie 2018

3D scanner (1) - Documentație

Descrierea proiectului:
Am început un nou proiect, este vorba de un scanner 3d , care o să mă ajute sa scanez obiecte reale pe care apoi le pot imprima folosind imprimanta 3D. În plan am și să scanez obiecte sau oameni de până la 1-2 metri. Scanerele profesionale costa foarte mult, de aceea o să încerc sa creez un scanner care să rivalizeze ca și rezultat cu acestea. Îmi dau seama că e destul de greu, dar cred ca nu este un țel de nerealizat. Am început faza de documentație care probabil o sa dureze cam o lună. Apoi o sa intru în faza de construcție (platformă, piedestal pentru obiect și masă rotativă).În a treia etapă o să încep testele, și în ultima etapă o să pot face scanări de calitate.
Rămâne de văzut ce o să iasă.

Documentatie folosită până acum:
3D scanner
3d-scanning-tutorial
3D Scan app

Componente:
- Senzor Kinect
- Platforma pentru scanare
- Masă rotativă

Schema sistemului:

Sărbători fericite tuturor !