duminică, 17 iunie 2018

Tehnici de manipulare (2) Regula KGB 14

Regula KGB 14 din Tehnici de manipulare Editia VI:
Citat:
Trebuie făcut totul ca hotărârile și ordinele - fie acestea cu caracter juridic, economic sau organizatoric - să fie nepunctuale
.

Explicație:

Citat:
În statele-satelit trebuia păstrată permanent o stare de dezorganizare. trebuia ca legile să se bată cap în cap ori să vină pre târziu, ordinele și hotărârile să fie ineficiente, ierarhiile să nu aibă stabilitate etc. Menținând haosul, societatea își păstra slăbiciunile și putea fi ușor de controlat. Oamenii nu aveau posibilitatea să-și solidifice un sistem propriu de valori, sentimentul de insecuritate se accentua, iar manipulatorii aveau astfel un teren extrem de propice pentru acțiune.

Această regula este pe larg aplicată de parlamentul României. Nici o lege nu se face la timp, iar când legea este validată se constată că este ambiguă și nu se poate aplica. Mai rău de atât instabilitatea legislativă are repercursiuni majore asupra învățământului, iar mai departe asupra copiilor și asupra viitorului tării. Suntem într-o perpetua instabilitate generată exclusiv de această regulă (Regula KGB 14) care se aplică neîncetat în România de la venirea bolșevicilor. PSD-ul este urmașul de nădejde a lor.

3D scanner (4) - Carcasă controller

Descriere proiect:
În acest pas al proiectului am creat o carcasă pentru controller, motor și bluetooth. Se văd în imaginile de mai jos cam cum a ieșit, dar părerea mea este că această carcasă este suficient de compactă pentru a o folosi în continuare.
Documentatie proiect:
- Am învățat câteva tehnici de proiectare de pe site-ul tinkercad.com, site de proiectare pentru începători.
Componente:
- Plastic PLA incolor
- Imprimanta 3D
- Smartphone cu bluetooth
- Applicatie Android - Arduino Bluetooth controller v1.3

Schema electronică/sistem:

Cod de test:

#include "SoftwareSerial.h"
#include "BasicStepperDriver.h"
#include "StepperDriver.h" 
#include "AccelStepper.h"
#include "A4988.h"
#define MS1 6
#define MS2 7
#define MS3 8
#define ENABLE 5
// Motor steps per revolution. Most steppers are 200 steps or 1.8 degrees/step
#define MOTOR_STEPS 200
#define RPM 360
// Acceleration and deceleration values are always in FULL steps / s^2
#define MOTOR_ACCEL 2000
#define MOTOR_DECEL 1000
// Since microstepping is set externally, make sure this matches the selected mode
// If it doesn't, the motor will move at a different RPM than chosen
// 1=full step, 2=half step etc.
#define MICROSTEPS 8

// All the wires needed for full functionality
#define DIR 3
#define STEP 4

//Global Variables
String command = ""; // Stores response of the HC-06 Bluetooth device
// defines pins numbers
const int stepPin = STEP; 
const int dirPin = DIR; 
char _btRxData; //Most recent received byte from BT Shield
String _btRxBuff=""; //Local buffer for received data
int speedmot=RPM;
short microsteps=1;
// 2-wire basic config, microstepping is hardwired on the driver
A4988 stepper(MOTOR_STEPS, DIR, STEP, ENABLE, MS1, MS2, MS3);

void setup() {
  Serial.begin(57600);
  BluetoothInit();
  stepper.begin(RPM, MICROSTEPS);
  stepper.enable();
   /*
     * Set LINEAR_SPEED (accelerated) profile.
     */
    stepper.setSpeedProfile(stepper.LINEAR_SPEED, MOTOR_ACCEL, MOTOR_DECEL);
        Serial.println("START");
    /*
     * Using non-blocking mode to print out the step intervals.
     * We could have just as easily replace everything below this line with 
     * stepper.rotate(360);
     */
     stepper.startRotate(360);
}

void loop() {
        static int step = 0;
    unsigned wait_time = stepper.nextAction();
  //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 1
      {
        speedmot +=1; // Enables the motor to move in a particular direction
        Serial.println(speedmot);  //Debug: Send to PC Console
         stepper.enable(); 
      }
      else if(_btRxData == '3')         //  Checks whether value of data is equal to 0
      {
         speedmot -=1;   //If value is 0 then LED turns OFF
          Serial.println(speedmot);  //Debug: Send to PC Console 
           stepper.enable();
      }
      if(_btRxData == 'x')              // Checks whether value of data is equal to 1
      {
         speedmot = 0; // Enables the motor to move in a particular direction
         microsteps=1;
          Serial.println(speedmot);  //Debug: Send to PC Console 
            stepper.disable();
        Serial.println("END");
      }
      if(_btRxData == 'b')              // Checks whether value of data is equal to 1
      {
         speedmot = 1; // Enables the motor to move in a particular direction
          Serial.println(speedmot);  //Debug: Send to PC Console 
           stepper.enable();
      }
      if(_btRxData == 'c')              // Checks whether value of data is equal to 1
      {
         speedmot = 90; // Enables the motor to move in a particular direction
          Serial.println(speedmot);  //Debug: Send to PC Console 
           stepper.enable();
      }
      if(_btRxData == 'p')              // Checks whether value of data is equal to 1
      {
         speedmot = 180; // Enables the motor to move in a particular direction
          Serial.println(speedmot);  //Debug: Send to PC Console 
           stepper.enable();
      }
      if(_btRxData == 't')              // Checks whether value of data is equal to 1
      {
         speedmot = 360; // Enables the motor to move in a particular direction
          Serial.println(speedmot);  //Debug: Send to PC Console 
           stepper.enable();
      }
     if(_btRxData == 's')  
     {
      microsteps++;
      stepper.setMicrostep(microsteps);
      Serial.println(microsteps);  //Debug: Send to PC Console 
     }
  }

    /*
     * Moving motor one full revolution using the degree notation
     */
stepper.rotate(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();
}
Urmează pasul următor, care cuprinde tijele pentru conectarea mecanică cu senzorul și un panou alb în spatele obiectului.
Weekend plăcut tuturor!