Categories
Arduino Raspberry Technological

Arduino IoT: Tutorial sobre LM7805 como fuente de poder

Arduino IoT Arduino (IoT): Simple Tutorial de Infrarojo (IR) Receptor/Transmisor by Santiapps Marcio Valenzuela
Arduino IoT Arduino (IoT): Simple Tutorial de Infrarojo (IR) Receptor/Transmisor

Arduino (IoT): Tutorial LM7805 como fuente de poder

 

Muchas veces terminamos un prototipo y queremos llevarlo a la practica.  Es decir, queremos hacerlo funcionar en el ambiente para el cual fue diseñado.  El ejemplo típico en robótica es un carro, que luego de subir el codigo desde la compu al carro y probarlo mientras sigue conectado a la compu, queremos llevarlo a la calle.  En el caso de este robot para remover semillas, queremos conectarlo a su fuente de poder (baterías recargables) y llevarlo a la practica.

El problema es que necesitamos 5V para nuestros MCUs (a veces 3.3V) y tenemos combinaciones de baterías AA que nos dan 3V, 4.5V, 6V etc.  En este caso tenemos un par de baterías de alta capacidad de 3.7V cada una, ósea que tenemos 7.4V lo cual no podemos alimentar a nuestro MCU.

Entra el regulador de voltage, LM7805.  Este es uno de los componentes mas comunes en la electronica de hoy en dia.  A pesar que conectamos muchos electrónicos a la pared, de donde obtenemos 120VAC, nuestros electrónicos:

  • Celulares
  • Videojuegos portatiles
  • Tablets
  • Camaras digitales

Todos utilizan 5VDC.  Hay muchos otros componentes que reducen 120VAC a 5VDC y veremos eso en un tutorial mas adelante, pero por lo general siempre queremos tener 5VDC estables, y eso se obtiene a través de un regulador como este.

El diferencial de voltaje entre 7.4V y 5V se pierde como calor y a veces es necesario usar una fuente de disipación termica que en este caso no usamos, a pesar que los LM7805 traen una pequeña incorporada en su parte posterior que se ve de color gris-metal con un agujero en medio.  Por lo general para disipar voltajes mas altos se ocupa conectar el LM7805 a una placa mas grande.

Aquí vemos como los 7.4V son traspasados a 5V por el LM7805 y luego alimentados al mcu nano y al servo.  La LCD muestra el voltaje de la fuente de poder y lo vemos registrado como 4.99-5VDC.

Video

Es muy util poner uno de estos reguladores en un modulo aparte porque su uso sera muy frecuente.  El diagrama es así:

Arduino IoT: Tutorial LM7805 en Voltmeter by Santiapps Marcio Valenzuela
Arduino IoT: Tutorial LM7805 en Voltmeter

Y el producto final se mira asi:

Este fue

Arduino IoT: Tutorial Uso de LM7805 Regulador de Voltaje by Santiapps Marcio Valenzuela
Arduino IoT: Tutorial Uso de LM7805 Regulador de Voltaje

Aqui vemos la entrada a la derecha:

blanco: positivo & negro: negativo

Luego se pasa por el capacitor de 100uF, luego el LM7805 y finalmente el capacitor de 10uF.  Finalmente tenemos a la izquierda:

rojo: positivo & naranja: negativo

Aquí vemos un pack de baterias de 3.7V cada una en serie, para un total de 7.4V según muestra el medidor:

Arduino IoT: Tutorial Uso de LM7805 Regulador de Voltaje by Santiapps Marcio Valenzuela
Arduino IoT: Tutorial Uso de LM7805 Regulador de Voltaje

Aqui vemos la medición directa del paquete de batería.  El regulador esta fuera de linea.

Arduino IoT: Tutorial Uso de LM7805 Regulador de Voltaje by Santiapps Marcio Valenzuela
Arduino IoT: Tutorial Uso de LM7805 Regulador de Voltaje

Finalmente vemos el regulador en acción, entre el pack de baterías y el medidor.  Aquí se ve el voltaje final regulado, el que podemos usar con seguridad en nuestros proyectos.

Los LM7805 se piden encontrar en muchos dispositivos electrónicos viejos que puede desarmar.

In: Entran 7.4V

GND: Tierra

Out: Salen 5.0V regulados

Categories
Arduino Raspberry Technological

Arduino (IoT): Simple Tutorial de IR Receptor/Transmisor (Parte 3)

Arduino IoT Arduino (IoT): Simple Tutorial de Infrarojo (IR) Receptor/Transmisor by Santiapps Marcio Valenzuela
Arduino IoT Arduino (IoT): Simple Tutorial de Infrarojo (IR) Receptor/Transmisor

Arduino (IoT): Simple Tutorial de IR Receptor/Transmisor (Parte 3)

 

En la Parte 1 & 2 vimos como usar receptor y LED IR para leer controles y controlar LEDs de color. Ahora veremos como enviar nuestros propios códigos o señales IR desde un LED IR.  Es decir, en la primera parte solo usamos el receptor IR para recibir los códigos de un control remoto.  Ahora enviaremos esos códigos al dispositivo para controlarlo.

 

Conexiones

 

Nuestra conexión sera si:

Arduino (IoT) Simple Tutorial Infrarojo (IR) Receptor/Transmisor by Santiapps Marcio Valenzuela
Arduino (IoT) Simple Tutorial Infrarojo (IR) Receptor/Transmisor

Aseguremos de conectar la LED correctamente con su pata al pin tierra y larga al resistor.

 

Codigo

El codigo de nuestro ejemplo sera el IRrecord de la librería:
[code]

/* record.ino Example sketch for IRLib2
* Illustrate how to record a signal and then play it back.
*/
#include <IRLibDecodeBase.h> //We need both the coding and
#include <IRLibSendBase.h> // sending base classes
#include <IRLib_P01_NEC.h> //Lowest numbered protocol 1st
#include <IRLib_P02_Sony.h> // Include only protocols you want
#include <IRLib_P03_RC5.h>
#include <IRLib_P04_RC6.h>
#include <IRLib_P05_Panasonic_Old.h>
#include <IRLib_P07_NECx.h>
#include <IRLib_HashRaw.h> //We need this for IRsendRaw
#include <IRLibCombo.h> // After all protocols, include this
// All of the above automatically creates a universal decoder
// class called “IRdecode” and a universal sender class “IRsend”
// containing only the protocols you want.
// Now declare instances of the decoder and the sender.
IRdecode myDecoder;
IRsend mySender;

// Include a receiver either this or IRLibRecvPCI or IRLibRecvLoop
#include <IRLibRecv.h>
IRrecv myReceiver(2); //pin number for the receiver

// Storage for the recorded code
uint8_t codeProtocol; // The type of code
uint32_t codeValue; // The data bits if type is not raw
uint8_t codeBits; // The length of the code in bits

//These flags keep track of whether we received the first code
//and if we have have received a new different code from a previous one.
bool gotOne, gotNew;

void setup() {
gotOne=false; gotNew=false;
codeProtocol=UNKNOWN;
codeValue=0;
Serial.begin(9600);
delay(2000);while(!Serial);//delay for Leonardo
Serial.println(F(“Send a code from your remote and we will record it.”));
Serial.println(F(“Type any character and press enter. We will send the recorded code.”));
Serial.println(F(“Type ‘r’ special repeat sequence.”));
myReceiver.enableIRIn(); // Start the receiver
}

// Stores the code for later playback
void storeCode(void) {
gotNew=true; gotOne=true;
codeProtocol = myDecoder.protocolNum;
Serial.print(F(“Received “));
Serial.print(Pnames(codeProtocol));
if (codeProtocol==UNKNOWN) {
Serial.println(F(” saving raw data.”));
myDecoder.dumpResults();
codeValue = myDecoder.value;
}
else {
if (myDecoder.value == REPEAT_CODE) {
// Don’t record a NEC repeat value as that’s useless.
Serial.println(F(“repeat; ignoring.”));
} else {
codeValue = myDecoder.value;
codeBits = myDecoder.bits;
}
Serial.print(F(” Value:0x”));
Serial.println(codeValue, HEX);
}
}
void sendCode(void) {
if( !gotNew ) {//We’ve already sent this so handle toggle bits
if (codeProtocol == RC5) {
codeValue ^= 0x0800;
}
else if (codeProtocol == RC6) {
switch(codeBits) {
case 20: codeValue ^= 0x10000; break;
case 24: codeValue ^= 0x100000; break;
case 28: codeValue ^= 0x1000000; break;
case 32: codeValue ^= 0x8000; break;
}
}
}
gotNew=false;
if(codeProtocol== UNKNOWN) {
//The raw time values start in decodeBuffer[1] because
//the [0] entry is the gap between frames. The address
//is passed to the raw send routine.
codeValue=(uint32_t)&(recvGlobal.decodeBuffer[1]);
//This isn’t really number of bits. It’s the number of entries
//in the buffer.
codeBits=recvGlobal.decodeLength-1;
Serial.println(F(“Sent raw”));
}
mySender.send(codeProtocol,codeValue,codeBits);
if(codeProtocol==UNKNOWN) return;
Serial.print(F(“Sent “));
Serial.print(Pnames(codeProtocol));
Serial.print(F(” Value:0x”));
Serial.println(codeValue, HEX);
}

void loop() {
if (Serial.available()) {
uint8_t C= Serial.read();
if(C==’r’)codeValue=REPEAT_CODE;
if(gotOne) {
sendCode();
myReceiver.enableIRIn(); // Re-enable receiver
}
}
else if (myReceiver.getResults()) {
myDecoder.decode();
storeCode();
myReceiver.enableIRIn(); // Re-enable receiver
}
}
[/code]

Aqui lo que hacemos es que del Monitor Serial vemos que código da el botón de encender/apagar del control de la television.  Eso se imprime en la pantalla del monitor y simplemente lo copiamos y lo pegamos en el mismo monitor, arriba, para ENVIAR ese códigos a través de la LED IR.  Movemos el proyecto cerca del televisor y la LED IR ahora enviara ese código y controlara el televisor!

Categories
Arduino Raspberry Technological

Arduino (IoT): Simple Tutorial de IR Receptor/Transmisor Parte 2

Arduino IoT Arduino (IoT): Simple Tutorial de Infrarojo (IR) Receptor/Transmisor by Santiapps Marcio Valenzuela
Arduino IoT Arduino (IoT): Simple Tutorial de Infrarojo (IR) Receptor/Transmisor

Arduino (IoT): Simple Tutorial de IR Receptor/Transmisor (Parte 2)

 

En la Parte 1 vimos como usar el receptor IR para leer códigos enviados por un control remote X.  Ahora veremos como controlar LEDs de colores.

 

Conexiones

Si recuerdan de la primera parte, nuestro circuito era asi pero no usamos las LED:

Arduino (IoT) Simple Tutorial Infrarojo (IR) Receptor/Transmisor by Santiapps Marcio Valenzuela
Arduino (IoT) Simple Tutorial Infrarojo (IR) Receptor/Transmisor

Ahora vamos a usar 3 LEDs y controlarlas desde nuestro mcu.

Arduino (IoT) Simple Tutorial Infrarojo (IR) Receptor/Transmisor by Santiapps Marcio Valenzuela
Arduino (IoT) Simple Tutorial Infrarojo (IR) Receptor/Transmisor

Codigo

La libreria que usaremos esta aqui.

El codigo de nuestro ejemplo sera:

  1. #include <IRremote.h>
  2. int RECV_PIN = 3; // pin de salida del TSOP4838
  3. int led1 = 2;
  4. int led2 = 4;
  5. int led3 = 7;
  6. int itsONled[] = {0,0,0,0};
  7. /* al inicio las LEDs estan OFF (zero)
  8. #define code1 63495 // code received from button A
  9. #define code2 30855 // code received from button B
  10. #define code3 22695 // code received from button C
  11.  
  12. IRrecv irrecv(RECV_PIN);
  13. decode_results results;
  14. void setup(){
  15. Serial.begin(9600); // you can comment this line
  16. irrecv.enableIRIn(); // Start the receiver
  17. pinMode(led1, OUTPUT);
  18. pinMode(led2, OUTPUT);
  19. pinMode(led3, OUTPUT);
  20. }
  21. void loop() {
  22. if (irrecv.decode(&results)) {
  23. unsigned int value = results.value;
  24. switch(value) {
  25. case code1:
  26. if(itsONled[1] == 1) { // Si la led1 esta ON
  27. digitalWrite(led1, LOW); // apagarla
  28. itsONled[1] = 0; // y guardar su estado como OFF
  29. } else { // Si la led1 estaba OFF
  30. digitalWrite(led1, HIGH); // encenderla
  31. itsONled[1] = 1; // y registrarla como ON
  32. }
  33. break;
  34. case code2:
  35. if(itsONled[2] == 1) {
  36. digitalWrite(led2, LOW);
  37. itsONled[2] = 0;
  38. } else {
  39. digitalWrite(led2, HIGH);
  40. itsONled[2] = 1;
  41. }
  42. break;
  43. case code3:
  44. if(itsONled[3] == 1) {
  45. digitalWrite(led3, LOW);
  46. itsONled[3] = 0;
  47. } else {
  48. digitalWrite(led3, HIGH);
  49. itsONled[3] = 1;
  50. }
  51. break;
  52. }
  53. Serial.println(value); // Esto es para ver los resultados
  54. irrecv.resume(); // Proximo valor…
  55. }
  56. }

Lo unico es que primero habra que determinar los códigos de los botones que vamos a usar.  Esto lo aprendimos en la Parte 1 de esta serie.