Circuitos realizados con Arduino:

En esta parte del blog, queremos promover las ideas de nuestros usuarios con ejemplos hechos con uno de los microcontroladores más conocidos «Arduino»; para esto todavía no hemos implementado la parte de inteligencia artificial por ese motivo apreciaremos sus comentarios y sugerencias que nos escriban para poder complementar la información que deseamos aprender.

1) Operaciones matemáticas por voz:

Idea: Realizar un sistema usando módulo de bluetooth HC-05 y 8 leds, para que se haga la representación siguiente: 5 leds representarán números en binario y los tres leds representarán las tres operaciones (suma, resta y decrementar). Para la parte de voz se usará una aplicación hecha en arduino.

Referencia: Operaciones binarias

Circuito:

esquema de operaciones binarias

Código:

#include <SoftwareSerial.h>
#include <stdio.h> /* printf, fgets */
#include <stdlib.h> /* atoi */
const int rxPin = 12; //SoftwareSerial RX pin, conecta to JY-MCY TX pin
const int txPin = 11; //SoftwareSerial TX pin, conecta to JY-MCU RX pin
// nivel de 3.3 voltios puede ser necesario
SoftwareSerial mySerial(rxPin, txPin); // RX, TX
String cadena;
String dato;
int valor=0;
int num1=-1;
int num2=-1;
boolean bandera=false;
boolean bandera2=false;
boolean bandera3=false;
char* numero;
char c;
byte error[]={};
byte segmentos[31][5] = {
{ 0,0,0,0,0}, // = 0
{ 0,0,0,0,1 }, // = 1
{ 0,0,0,1,0 }, // = 2
{ 0,0,0,1,1 }, // = 3
{ 0,0,1,0,0 }, // = 4
{ 0,0,1,0,1 }, // = 5
{ 0,0,1,1,0 }, // = 6
{ 0,0,1,1,1 }, // = 7
{ 0,1,0,0,0 }, // = 8
{ 0,1,0,0,1 }, // = 9
{ 0,1,0,1,0 }, // = 10
{ 0,1,0,1,1 }, // = 11
{ 0,1,1,0,0 }, // = 12
{ 0,1,1,0,1 }, // = 13
{ 0,1,1,1,0 }, // = 14
{ 0,1,1,1,1 }, // = 15
{ 1,0,0,0,0 }, // = 16
{ 1,0,0,0,1 }, // = 17
{ 1,0,0,1,0 }, // = 18
{ 1,0,0,1,1 }, // = 19
{ 1,0,1,0,0 }, // = 20
{ 1,0,1,0,1 }, // = 21
{ 1,0,1,1,0 }, // = 22
{ 1,0,1,1,1 }, // = 23
{ 1,1,0,0,0 }, // = 24
{ 1,1,0,0,1 }, // = 25
{ 1,1,0,1,0 }, // = 26
{ 1,1,0,1,1 }, // = 27
{ 1,1,1,0,0 }, // = 28
{ 1,1,1,0,1 }, // = 29
{ 1,1,1,1,0 } // = 30
};

void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
mySerial.begin(9600);
}
void Apagar(){
digitalWrite(8,LOW);digitalWrite(9,LOW);digitalWrite(10,LOW);
digitalWrite(2,LOW);digitalWrite(3,LOW);digitalWrite(4,LOW);digitalWrite(5,LOW);digitalWrite(6,LOW);
}
void mostrar_display(int valor1){
byte pin = 6;
for (byte segCount = 0; segCount < 5; ++segCount) {
digitalWrite(pin, segmentos[valor1][segCount]);

pin–;
}
}
void loop() {
delay(2000);
while (mySerial.available()) {
delay(10);
if (mySerial.available() > 0) {
c = mySerial.read(); //Cuando se recibe un dato, se guarda como carácter
dato += c; //Cadena de caracteres formada por la suma de los datos recibidos
}
}
if(dato.length()>0){
Apagar();
switch(dato.charAt(0)){
case ‘0’ :mostrar_display(0);
if(bandera==false){
num1=0;
}
else{
num2=0;
}
break;
case ‘a’ :mostrar_display(1);
if(bandera==false){
num1=1;
}
else{
num2=1;
}
break;
case ‘b’ :mostrar_display(2);
if(bandera==false){
num1=2;
}
else{
num2=2;
}
break;
case ‘c’ :mostrar_display(3);
if(bandera==false){
num1=3;
}
else{
num2=3;
}
break;
case ‘d’ :mostrar_display(4);
if(bandera==false){
num1=4;
}
else{
num2=4;
}
break;
case ‘e’ :mostrar_display(5);
if(bandera==false){
num1=5;
}
else{
num2=5;
}
break;
case ‘f’ :mostrar_display(6);
if(bandera==false){
num1=6;
}
else{
num2=6;
}
break;
case ‘g’ :mostrar_display(7);
if(bandera==false){
num1=7;
}
else{
num2=7;
}
break;
case ‘h’ :mostrar_display(8);
if(bandera==false){
num1=8;
}
else{
num2=8;
}
break;
case ‘i’ :mostrar_display(9);
if(bandera==false){
num1=9;
}
else{
num2=9;
}
break;
case ‘j’ :mostrar_display(10);
if(bandera==false){
num1=10;
}
else{
num2=10;
}
break;
case ‘k’ :mostrar_display(11);
if(bandera==false){
num1=11;
}
else{
num2=11;
}
break;
case ‘l’ :mostrar_display(12);
if(bandera==false){
num1=12;
}
else{
num2=12;
}
break;
case ‘m’ :mostrar_display(13);
if(bandera==false){
num1=13;
}
else{
num2=13;
}
break;
case ‘n’ :mostrar_display(14);
if(bandera==false){
num1=14;
}
else{
num2=14;
}
break;
case ‘o’ :mostrar_display(15);
if(bandera==false){
num1=15;
}
else{
num2=15;
}
break;
case ‘+’ :if(num1==-1){
break;
}
else{
digitalWrite(8,HIGH);
bandera=true;
break;
}
case ‘-‘ :if(num1==-1){
break;
}
else{
digitalWrite(9,HIGH);
bandera2=true;
break;
}
case ‘$’ :if(num1==-1){
break;
}
else{
digitalWrite(10,HIGH);
bandera3=true;
break;
}
case ‘=’ : if(bandera==true && num2!=-1){
int resultado=num1+num2;
Apagar();
mostrar_display(resultado);
bandera=false;
num1=-1;
num2=-1;
break;
}
else{
if(bandera2==true && num2!=-1){
int resultado=num1-num2;
Apagar();
mostrar_display(resultado);
num1=-1;
num2=-1;
bandera2=false;
break;
}
else{
if(bandera3==true && num2==-1){
int resultado=num1-1;
Apagar();
mostrar_display(resultado);
num1=-1;
bandera3=false;
break;
}
break;
}
}
case ‘%’: Apagar();
break;

case ‘*’: Apagar();
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
delay(1000);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
delay(1000);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
delay(1000);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
delay(1000);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
delay(1000);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
delay(1000);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
delay(1000);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
delay(1000);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
delay(1000);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
delay(1000);
break;
}
}
dato=»»;
}

Nota: En el siguiente enlace (Operaciones binarias) encontrará todo lo referente a este ejemplo tales como informe, diagrama en fritzing y código en arduino.

2) Venta de productos:

Idea: Realizar una caja de compras de ciertos productos que se desee y poder mostrar las operaciones que se programen mediante un display display lcd 16×2; las entradas se realizarán mediante un teclado de membrana 4×4 .

Referencia : Sistema de cerradura (Tarea 2 – Jueves).

Circuito:

Venta de Productos

Código:

#include
#include const byte numRows= 4;
const byte numCols= 4;
char keymap[numRows][numCols]={
{‘1’, ‘2’, ‘3’, ‘A’},
{‘4’, ‘5’, ‘6’, ‘B’},
{‘7’, ‘8’, ‘9’, ‘C’},
{‘*’, ‘0’, ‘#’, ‘D’}
};
byte rowPins[numRows] = {5,4,3,2}; //Rows 0 to 3
byte colPins[numCols]= {A0,A1,A2,A3}; //Columns 0 to 3
Keypad myKeypad= Keypad(makeKeymap(keymap), rowPins, colPins,
numRows, numCols);

LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

String producto[7][3]={
{«ABC0»,»arroz «,»3.50»},
{«ABC1″,»aceite»,»5.00″},
{«ABC2″,»azucar»,»2.00″},
{«ABC3»,»agua «,»1.50»},
{«ABC4″,»harina»,»1.00″},
{«ABC5″,»cereal»,»7.50″},
{«ABC6»,»atun «,»2.50″}
};

boolean bandera=false;
boolean bandera2=false;
boolean ban=false;
String claveNueva=»»;
String datos=»»;
String cantidad=»»;
String listaProductos=»»;
float total=0;

void setup() {
pinMode(6,OUTPUT);
pinMode(13,OUTPUT);
Serial.begin(9600);
lcd.begin(16, 2);
lcd.print(«1.Pago productos»);
lcd.setCursor(0, 1);
lcd.print(«2.Cerrar caja»);
}

void loop() {
menu();
}

void menu(){
char keypressed = myKeypad.getKey();
if (keypressed != NO_KEY){
if(keypressed==’1′){
pagoProducto();
delay(3000);
digitalWrite(6,LOW);
digitalWrite(13,LOW);
lcd.clear();
lcd.begin(16, 2);
lcd.print(«1.Pago productos»);
lcd.setCursor(0, 1);
lcd.print(«2.Cerrar caja»);
}
if(keypressed==’2′){
lcd.clear();
montoTotal();
delay(3000);
}
if(keypressed==’#’){
lcd.clear();
lcd.print(«Precio total : «);
lcd.setCursor(0, 1);
lcd.print(total);
delay(3000);
digitalWrite(6,LOW);
digitalWrite(13,LOW);
lcd.clear();
lcd.begin(16, 2);
lcd.print(«1.Pago productos»);
lcd.setCursor(0, 1);
lcd.print(«2.Cerrar caja»);
}
}
Serial.begin(9600);
keypressed=’ ‘;
}

void pagoProducto(){
lcd.clear();
lcd.print(«INGRESE PRODUCTO :»);
codigoProducto();
}

void codigoProducto(){
int i=1;
lcd.setCursor(0, 1);
char keypressed=’/’;
while(keypressed!=’*’){
keypressed=myKeypad.getKey();
if (i<=4&&keypressed != NO_KEY){
datos=datos+keypressed;
lcd.print(keypressed);
i++;
}
}
if(keypressed==’*’){
lcd.print(keypressed);
delay(800);
mostrarProducto(datos);
}
}

void mostrarProducto(String cadena){
bandera=false;
int fila=-1;
for(int i=0;i<7&&bandera==false;i++){
if(producto[i][0]==cadena){
fila=i;
bandera=true;
}
}
lcd.clear();
if(fila!=-1){
lcd.print(producto[fila][1]);
lcd.print(» «);
lcd.print(producto[fila][2]);
lcd.setCursor(0, 1);
lcd.print(«Cantidad : «);
ingresarCantidad();
if(verificar(cantidad)==true){
total=total+(cantidad.toFloat()*producto[fila][2].toFloat());
String prod=» «+producto[fila][0]+» «+producto[fila][1]+» «+producto[fila][2]+» «;
listaProductos=listaProductos+prod;
digitalWrite(6,HIGH);
delay(700);
digitalWrite(6,LOW);
delay(700);
digitalWrite(6,HIGH);
delay(700);
digitalWrite(6,LOW);
}
else{
lcd.clear();
lcd.print(«La cantidad debe»);
lcd.setCursor(0, 1);
lcd.print(«ser un entero.»);
digitalWrite(13,HIGH);
delay(700);
digitalWrite(13,LOW);
delay(700);
digitalWrite(13,HIGH);
delay(700);
digitalWrite(13,LOW);
delay(700);
digitalWrite(13,HIGH);
delay(700);
digitalWrite(13,LOW);
}
}
else{
lcd.print(«Producto no»);
lcd.setCursor(0, 1);
lcd.print(«registrado»);
digitalWrite(13,HIGH);
delay(700);
digitalWrite(13,LOW);
delay(700);
digitalWrite(13,HIGH);
delay(700);
digitalWrite(13,LOW);
delay(700);
digitalWrite(13,HIGH);
delay(700);
digitalWrite(13,LOW);
}
datos=»»;
cantidad=»»;
}

void ingresarCantidad(){
char keypressed=’/’;
keypressed=myKeypad.getKey();
while(keypressed!=’*’){
if (keypressed != NO_KEY){
cantidad=cantidad+keypressed;
lcd.print(keypressed);
}
keypressed=myKeypad.getKey();
}
if(keypressed==’*’){
lcd.print(keypressed);
}
}

boolean verificar(String texto){
for(int i=0; i<texto.length();i++){
char aux2=texto.charAt(i);
if (!isDigit(aux2)){
return false;
}
}
return true;
}

void montoTotal(){
lcd.print(«Monto total : «);
lcd.setCursor(0, 1);
lcd.print(total);
for(int i=0;i<listaProductos.length()&&listaProductos.length()!=0;i++){
if((i+1)%18!=0){
Serial.print(listaProductos.charAt(i));
}
else{
Serial.println(listaProductos.charAt(i));
}
}
}

Nota: En el siguiente enlace (Venta de productos) encontrará todo lo referente a este ejemplo tales como informe, diagrama en fritzing, código en arduino y un video que explica el funcionamiento.