Arduino (IoT): Simple Tutorial Válvula Solenoide con un BJT

Solenoide Arduino Santiapps

Arduino Honduras Santiapps Marcio Valenzuela

Tutorial Válvula Solenoide con un BJT

En este tutorial continuamos aprendiendo sobre como controlar solenoides.  En el anterior lo hicimos via un FET pero esta vez lo hacemos via un BJT.

Requisitos:

  1. Computadora (mac)
  2. Arduino UNO
  3. Válvula Solenoide de 12V
  4. TIP120 Transistor
  5. Diode
  6. 2 baterias de 9V
  7. Breadboard
  8. Arduino IDE (https://www.arduino.cc/en/Main/Software)
Arduino IoT: Simple Tutorial Valvula Solenoid Santiapps Marcio Valenzuela
Arduino IoT: Simple Tutorial Valvula Solenoid

Una válvula solenoide no es mas que una válvula controlada por un electromagnet, que es esencialmente un motor invertido.  Sabemos entonces que los motores generan contra corrientes.  Como podemos ver en el diagrama de arriba, debemos alimentar la válvula de una fuente y proteger el cerebro (Arduino) de las contra corrientes a través de un diodo.

Al mismo tiempo debemos controlar el flujo de corriente a la válvula a través de un transistor.  Para esto es posible usar un TIP120, enviarle una señal por medio del GATE o BASE.  Podemos ver el siguiente diagrama:

Arduino IoT: Control Solenoid con Arduino Santiapps Marcio Valenzuela
Arduino IoT: Control Solenoid con Arduino

Aquí vemos como una señal desde el pin 13 hacia el Gate del TIP120 abre el flujo para que la solenoide complete el circuito a tierra y como el diodo controla dicho flujo en una sola dirección.

Como seleccionar un BJT:

VCB

VCE

VEB

IC

VBEon

El código:

[code]
/* BJT TIP-120
This sketch will blink a LED and at the same time, use the MOSFET to open a 12V solenoid.
Arduino D10 : To LED (Through 330 Ohm Resistor)
Arduino D02 : To MOSFET Gate
*/
int ledPin = 10; // Connect the pin to Arduino pin 10
int mosfetPin = 2; // Connect the MOSFeT Gate (first pin on the left, when writing on the chip is facing you) to Arduino pin 2
void setup(){
pinMode(ledPin, OUTPUT);
pinMode(mosfetPin, OUTPUT);
}
void loop(){
digitalWrite(ledPin, HIGH);
digitalWrite(mosfetPin, HIGH);
delay(60000); // Will turn both the LED and the MOSFET on for 60s, it gives you plenty of time to see if water is flowing as expected!
digitalWrite(ledPin, LOW);
digitalWrite(mosfetPin, LOW);
delay(5000); // Will shut down everything for 5s and restart.
}
[/code]

 

Controlar el flujo de un liquido puede ser muy util para regar plantas y muchas otras aplicaciones mas.

Arduino (IoT) Video Serie: Kit de Carro Parte 4 (IR)

4WD Car Kit Arduino Santiapps Series

Arduino Honduras Santiapps Marcio Valenzuela

Arduino (IoT) Video Serie: Kit de Carro Parte 4 (IR)

Este es el codigo final:

#include "AFMotor.h"
#include "IRremote.h"

AF_DCMotor motor1(1, MOTOR12_64KHZ); // create motor #1, 64KHz pwm
AF_DCMotor motor2(2, MOTOR12_64KHZ); // create motor #2, 64KHz pwm
AF_DCMotor motor3(3, MOTOR12_64KHZ); // create motor #2, 64KHz pwm
AF_DCMotor motor4(4, MOTOR12_64KHZ); // create motor #2, 64KHz pwm

int RECV_PIN = 10;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup() {
  Serial.begin(9600);           // set up Serial library at 9600 bps
  Serial.println("Motor test!");
  irrecv.enableIRIn(); // Start the receiver

  motor1.setSpeed(200);     // set the speed to 200/255
  motor2.setSpeed(200);     // set the speed to 200/255
  motor3.setSpeed(200);     // set the speed to 200/255
  motor4.setSpeed(200);     // set the speed to 200/255
}

void loop() {

  //Recibir & Analizar codigo recibido
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);

      if (results.value == 0x2C2E80FF){
        Serial.println("forward");
        forward();
        delay(2000);
        brake();
      } else if (results.value == 0x5A1A483D){
        Serial.println("backward");
        backward();
        delay(2000);
        brake();
      } else if (results.value == 0x9578646A){
        Serial.println("left");
        left();
        delay(1000);
        brake();  
      } else if (1==1) {
        Serial.println("right");
        right();
        delay(1000);
        brake();  
      }

      irrecv.resume(); // Receive the next value
  } 
}

void forward(){
  Serial.println("running forward");
  motor3.run(FORWARD);   
  motor4.run(FORWARD);     
}
void backward(){
  Serial.println("running backward");
  motor3.run(BACKWARD);    
  motor4.run(BACKWARD);    
}
void left(){
  motor3.run(FORWARD);   
}
void right(){
  motor4.run(FORWARD);    
}
void brake(){
  motor1.run(RELEASE);    
  motor2.run(RELEASE);    
  motor3.run(RELEASE);    
  motor4.run(RELEASE);      
}

Arduino (IoT) Video Serie: Kit de Carro Parte 3

4WD Car Kit Arduino Santiapps Series

Arduino Honduras Santiapps Marcio Valenzuela

Arduino IoT: Video tutorial Kit de Carro Parte 3

Este es el codigo final:

#include  <AFMotor.h>

AF_DCMotor motor1(1, MOTOR12_64KHZ); // create motor #1, 64KHz pwm
AF_DCMotor motor2(2, MOTOR12_64KHZ); // create motor #2, 64KHz pwm
AF_DCMotor motor3(3, MOTOR12_64KHZ); // create motor #2, 64KHz pwm
AF_DCMotor motor4(4, MOTOR12_64KHZ); // create motor #2, 64KHz pwm

void setup() {
  Serial.begin(9600);           // set up Serial library at 9600 bps
  Serial.println("Motor test!");
  
  motor1.setSpeed(200);     // set the speed to 200/255
  motor2.setSpeed(200);     // set the speed to 200/255
  motor3.setSpeed(200);     // set the speed to 200/255
  motor4.setSpeed(200);     // set the speed to 200/255
}

void loop() {
  
  motor1.run(FORWARD);      // turn it on going forward
  delay(1000);
  motor1.run(BACKWARD);     // the other way
  delay(1000);
  motor1.run(RELEASE);      // stopped
  delay(5000);

  motor2.run(FORWARD);      // turn it on going forward
  delay(1000);
  motor2.run(BACKWARD);     // the other way
  delay(1000);
  motor2.run(RELEASE);      // stopped
  delay(1000);

  motor3.run(FORWARD);      // turn it on going forward
  delay(1000);
  motor3.run(BACKWARD);     // the other way
  delay(1000);
  motor3.run(RELEASE);      // stopped
  delay(5000);

  motor4.run(FORWARD);      // turn it on going forward
  delay(1000);
  motor4.run(BACKWARD);     // the other way
  delay(1000);
  motor4.run(RELEASE);      // stopped
  delay(1000);
}

void forward(){}
void backward(){}
void brakes(){}