Back to basics #5 - Prefijos y potencias.
Hola de nuevo a todos, el día de hoy vamos a hablar un poco de sobre las potencias de 10.Hace algunos días, fui a comprar un par de capacitores a la tienda de electronica más cercana a mi casa, al llegar, el tecnico me pidio amablemente mi orden a lo cual dije "quiero 2 capacitores de 22 pF", reviso una tabla y no vio cual era el numero para 22 pF (pico faradios), entonces le dije, "son 22pF, el capacitor deberia de tener un numero 22 en la parte de enfrente", reviso y no lo tenía, a lo cual me ofrecio uno de 22 µF, de inmediato le dije que era un valor exageradamente grande.
De inmediato puso cara de sorpresa y fue aun mayor cuando le dije que 1 µF es un millon de veces 1 pF, la explicación se la di y de paso anote la mayoria de prefijos y sus equivalencias.
Tabla de prefijos y sus valores.
La siguiente tabla muestra los prefijos más comunes:
| Nombre | Simbolo | Multiplicador | Potencia |
|---|---|---|---|
| yotta | Y | 1 000 000 000 000 000 000 000 000 | 10^24 |
| zetta | Z | 1 000 000 000 000 000 000 000 | 10^21 |
| exa | E | 1 000 000 000 000 000 000 | 10^18 |
| peta | P | 1 000 000 000 000 000 | 10^15 |
| tera | T | 1 000 000 000 000 | 10^12 |
| giga | G | 1 000 000 000 | 10^9 |
| mega | M | 1 000 000 | 10^6 |
| kilo | k | 1 000 | 10^3 |
| mili | m | 0.001 | 10^-3 |
| micro | µ | 0.000 001 | 10^-6 |
| nano | n | 0.000 000 001 | 10^-9 |
| pico | p | 0.000 000 000 001 | 10^-12 |
| femto | f | 0.000 000 000 000 001 | 10^-15 |
| atto | a | 0.000 000 000 000 000 001 | 10^-18 |
| zepto | z | 0.000 000 000 000 000 000 001 | 10^-21 |
| yocto | y | 0.000 000 000 000 000 000 000 001 | 10^-24 |
Con lo anterior, podemos nombrar cualquier cantidad, algunos de ellos te resultarán familiares; kilo, mega, giga e incluso mili. Ahora sabrás que cuando alguien dice que tiene kilo-algo, se refiere a que tienen 1000 de ese algo.
En adicion, hay algunos prefijos que no se listan en la tabla anterior, incluso algunos se usan cotidianamente cómo el caso de "centi", este se usa cuando tomamos algo y lo dividimos en 100, tal cómo el caso del centimetro, pero decidi no agregarlo, puesto que en la mayoria de lecturas de este blog, siempre usaremos algunas de las listadas en la tabla anterior.
Y bien, por ahora es todo, en el siguiente post continuaremos con más sobre programación.
Los leo luego.
Y bien, por ahora es todo, en el siguiente post continuaremos con más sobre programación.
Los leo luego.
Vamos a platicar #5 - La importancia de reciclar.
Hola de nuevo a todos, el día de hoy vamos a platicar un poco. En esta ocasión, veremos un poco de la importancia de reciclar (en este caso pilas/baterias).Cómo algunos sabrá, hace poco hicimos un velocímetro para bicicleta (que quedo bien), todos los materiales fueron dispuestos y a la hora de hacerlo funcionar, solo quedaba una interrogante: ¿Cómo alimentarlo? La respuesta es simple, tenia un par de power banks por ahí, uno con una capacidad de aproximadamente 2500 mAh y otro de aproximadamente 800 mAh. Lo bueno de los productos chinos, es su bajo precio, lo malo; algunas veces te dan gato por liebre.
Hace poco adquirí algunos power banks y a la hora de utilizarlos, me di cuenta que no cumplían con las exigencias necesarias. Intente cargar un teléfono que tiene una batería de 1380 mAh y al usar el power bank de supuestos 2500 mAh, este solo logró cargar el telefono a un 30%. La primer acción fue dejar cargar el power bank toda la noche (cosa que no es muy recomendable) para poder usarlo al día siguiente. Al hacer la prueba me di cuenta que en efecto, el power bank no tenia los 2500 mAh que prometía.
Decidido a encontrar la falla, procedí a examinarlo, por lo que lo abrí. Todos los circuitos estaban en orden pero al inspeccionar la pila más de cerca, note que solo era de 400 mAh. Un timo realmente, sabía que en algunos productos chinos era normal que exageraran e incluso podía esperar la mitad de la capacidad prometida, pero no fue así. Debido a que el velocímetro tienen un gasto de aproximadamente 150 mA, si usaba ese power bank, solo tendría una autonomia de un par de horas efectivas. Asi que decidi buscar una solucion a esto.
Aprovechando que tenía algunas baterias por ahí, busque la forma de reciclar, la forma más sencilla, fue tomar el power bank, extraer el circuito de control (carga/boost/descarga) y reemplazar la batería por una más grande. Recorde que tenía una bateria de 3100 mAh por ahí, entonces decidí usarla, con mucho cuidado procedi a remover el circuito de protacción que la batería tenía integrado, medí el voltaje y al ver que aún entregaba 3.9 V, significaba que aun estaba en buen estado. Al unir los componentes, todo funciono de maravilla y lo mejor es que ahora tendria aproximadamente 20 horas de autosuficiencia en el velocimetro.
Al ver que esto funciono, hice lo mismo con un PSP, cómo ya no es sencillo encontrar una bateria original (y cuando compré una tambien me estafaron), hice exactamente lo mismo, de la bateria original del PSP solo extraje los circuitos de protección y la bateria la reemplace con la del telefono viejo.
![]() |
| Admiren al: "PSP-Frankestein edition", use una tapa diferente para no cortar la original y el lector de UMD aun abre, por cierto la bateria de la primer imagen y esta son diferentes |
Por triste que parezca, al menos en el lugar donde vivo, sale más barato comprar un power bank mobo (no es la mejor marca, pero tiene algo de soporte y funciona), que comprar los componente por separado y hacer un circuito similar (eso si se consiguen, en las cercanías donde vivo ir y comprar un inductor es casi imposible).
![]() |
| De todas, solo la que tiene el logo de motorola y la que esta al extremo derecho las he comprado nuevas, el resto son recicladas y aun funcionan. |
Los leo luego.
Vamos a programar #51 - Terminando el velocímetro.
4/08/2018 02:45:00 p.m.
Arduino
,
hall sensor
,
LCD 1602a
,
programacion
,
velocimetro
6 comentarios
Hola de nuevo a todos, el día de hoy vamos a terminar con el velocímetro para bicicleta. Hoy veremos los esquemas, conexiones y el código par hacerlo funcional.![]() |
| Así luce en el empaque menos prolijo. |
El hardware
Para empezar veamos las conexiones.- De la pantalla 1602A
- VSS va a tierra.
- VDD va a5v.
- VO controla el contraste de la pantalla, un valor aceptable son 2.2KOhms.
- RS va al pin 12 del arduino (se puede modificar).
- RW va a tierra.
- E va al pin 11 del arduino.
- D4 al pin 9 (se puede modificar).
- D5 al pin 8.
- D6 al pin 7.
- D7 al pin 6.
- A va a 5V.
- K va a tierra.
- Del sensor de efecto Hall 1
- Data va al pin 3.
- Del sensor de efecto Hall 2
- Data va al pin 4.
Con lo anterior, empezaremos con el montaje. Lo principal es montar el sensor y los imanes. procurando que todo este lo mas asilado posible, usar plástico termo-contraible es una buena opción para esto.
Para conectar el sensor, use cable de red, solo separe tres hilos y los trencé, luego los aseguré a la tijera que sostiene la llanta usando cinchos de plástico, procurando dejar la longitud adecuada para que cuando el amortiguador recupere su posición original, no tense o afloje de más el cable y pueda atorarse en la llanta.
![]() |
| Dicen que en una bicicleta el polvo es sinónimo de uso rudo (o de que no se limpia seguido). |
Después, solo busque una caja de plástico que tenía por ahí, le hice una perforación en donde ajustara la pantalla y simplemente metí todos los componentes.
Para alimentar todo el circuito, uso un power bank, al inicio planeaba usar una batería de litio de un teléfono viejo, pero por cuestiones de espacio, no fue posible, además por ahora, la carcasa será temporal por lo que todo se puede remover fácilmente (exceptuando la caja). Toda la alimentación se hace directo del power bank, incluso si miras bien el esquema, verás que se hace uso de los pines VIN y GND del arduino.
El software.
Ahora pasemos a la parte del software, el código esta listo para usarse, lo único que debes de modificar es la circunferencia de la llanta, en mi caso es una de 24x1.125, pero la más común es de 26xX.XXX, además también debes de incluir la librería para controlar la pantalla.
// Incluir la libreria para la pantalla
#include <LiquidCrystal.h>
// Pines usados en la pantalla extraido de los ejemplos incluidos en la libreria
const int rs = 12, en = 11, d4 = 9, d5 = 8, d6 = 7, d7 = 6;
// iniciar el objeto LiquidCrystal
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
// Este es el valor que debes de modificar para que funcione correctamente
// Puedes ver instrucciones en https://xworkforall.blogspot.mx/2018/03/vamos-programar-49.html
const float Llanta = 1.9572;
//Algunas variables
const int HallSensor1 = 3;
const int LED = 13;
int HallState = 0;
int Vuelta = 0;
int OldState = 0;
unsigned long OldTime = 0;
float Distancia = 0;
float Speed = 0;
//Incializar todo
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("@XWork");
pinMode(HallSensor1, INPUT);
attachInterrupt(digitalPinToInterrupt(HallSensor1), GetVelocity, LOW);
pinMode(LED, OUTPUT);
}
// Calcular la velocidad
void GetVelocity() {
if (millis() - OldTime > 70) {
Speed = Llanta / ((float)( millis() - OldTime) / 1000) * 3.6;
OldTime = millis();
Distancia = Distancia + Llanta / 1000;
}
}
//Bucle principal
void loop() {
Serial.println("Velocidad en m/s");
Serial.println(Speed);
lcd.setCursor(0, 0);
lcd.print("v= Km/h D = Km");
lcd.setCursor(0, 1);
lcd.print(Speed);
lcd.setCursor(8, 1);
lcd.print(Distancia);
if ((millis() - OldTime) > 2000)
Speed=0.0;
}
Las conexiones se hacen de acuerdo al hardware.
Conclusion.
Con esto hemos creado un velocímetro, debo de admitirlo, aun no lo he probado (al menos en el momento en que este post se publicó), pero en cuanto lo haga, pondré cualquier actualización necesaria.
El segundo sensor de efecto hall, se va a usar para activar una luz de frenado, usando el mismo principio, en cuanto la palanca de freno se presiona, si acercamos un imán al sensor que estará fijo al manubrio, esto activará una luz roja en la parte posterior de la bicicleta (tal y cómo los autos). Probablemente también en un futuro se agregue la función de luces direccionales, aun no figuro cómo hacerlo de manera eficiente.
Y bien, por ahora es todo, el código completo para arduino lo puedes descargar de mi dropbox, recuerda que puedes modificarlo a tu gusto.
Los leo luego.
Los leo luego.
Vamos a programar #50 - ¿Debo usar las interrupciones de arduino?
Hola de nuevo a todos el día de hoy vamos a continuar con la construcción del velocímetro para bicicleta, pero antes de continuar, vamos a tomar una decisión importante.En algunos de los post anteriores, vimos código que se encargaba de contar las vueltas que llevaba un motor (usando un sensor de efecto hall y un par de imanes), pero poco después, alguien me contacto en twitter y me dijo que esa no era la manera correcta de hacer la medición, que arduino posee las herramientas necesarias para medir de una manera más precisa. En arduino, es posible asignarle prioridad a uno de los pines, dependiendo de modelo de la placa, al menos dos pines tendrán esta capacidad.
Las interrupciones, se dan cuando se detecta un valor en un pin, siempre y cuando este se haya inicializado con attachinterrupt(), esta es una manera de indicar que uno de los pines tendrá prioridad y cuando su valor cambie (ahorita veremos de que modo), se llevará a cabo cierta acción, esto es independiente a lo que arduino este haciendo.
La función attachinterrupt(), toma 3 argumentos. El primero; es el pin en el cual arduino "vigilará". El segundo; es la función que se ejecutará cuando se detecte un cambio en el pin designado. El tercero, será la forma en que arduino se dará cuenta del cambio.
Para designar el pin, debemos de tomar en cuenta el modelo de arduino, en mi caso, el arduino uno dispone de los pines 2 y 3 (para los modelos Mega y Micro tambien aplica).
La función que se usará cómo segundo parametro, no debe de requerir de ningun parametro y tampoco debería de devolver nigun valor.
Para el modo en que arduino detectará el cambio, disponemos de los siguientes:
- LOW
- CHANGE
- RISING
- FALLING
- HIGH
Para apreciar mejor, veamos el siguiente fragmento de codigo:
#include <LiquidCrystal.h>
const int rs = 12, en = 11, d4 = 9, d5 = 8, d6 = 7, d7 = 6;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
const float Llanta = 1.9572;
//Algunas variables
const int HallSensor = 3;
const int LED = 13;
int HallState = 0;
int Vuelta = 0;
int OldState = 0;
unsigned long OldTime = 0;
float Distancia = 0;
float Speed = 0;
//Incializar todo
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("@XWork");
pinMode(HallSensor, INPUT);
attachInterrupt(digitalPinToInterrupt(HallSensor), GetVelocity, LOW);
pinMode(LED, OUTPUT);
}
void GetVelocity() {
if (millis()-OldTime > 70) {
Speed=Llanta/((float)(millis()-OldTime)/1000)*3.6;
OldTime=millis();
Distancia=Distancia+Llanta/1000;
}
}
//Bucle principal
void loop() {
Serial.println("Velocidad en m/s");
Serial.println(Speed);
lcd.setCursor(0, 0);
lcd.print("v= Km/h D = Km");
lcd.setCursor(0, 1);
lcd.print(Speed);
lcd.setCursor(8, 1);
lcd.print(Distancia);
if ((millis()-OldTime)>2000){
Speed=0.0;
}
}
Podemos observar que además de la declaración normal del pin (3), justo debajo hacemos la inicialización del pin que se usara para las interrupciones y hacemos uso de la función digitalPinToInterrupt() y le asignamos cómo parámetro el pin que antes habíamos iniciado (el pin 3), luego pasamos cómo parámetro la función GetVelocity(), esta es la que se ejecutará cada vez que se de la interrupción. Finalmente en el ultimo parámetro, le decimos que la interrupción se dará cuando el pin este en LOWEl código anterior es la mejor forma de hacer la cuenta, el código de post anterior cumplía y funcionaba, pero si por alguna razón la rueda girara muy rápido, llegaría el punto en que algunas de las lecturas del sensor del lector serian omitidas. Y bien, por ahora es todo en el próximo post terminaremos con este preyecto.
Los leo luego.
Suscribirse a:
Entradas
(
Atom
)
















2 comentarios :
Publicar un comentario