Holaa.. Tratare de ser lo mas concisco posible.
Pues estoy realizando un proyecto con Arduino que es sobre un contador de objetos inalambrico.
Los elementos utilizados para este proyecto son:
Arduino uno y Arduino mega ( uno como emisor y el mega como receptor)
Dos sensores nFR24 con antena ( uno como maestro y otro como esclavo)
Dos sensores HC-SR04 (uno utilizado como detector de entrada y otro como detector de salida)
Pues bien.. El modelo de comunicación entre los sensores inalambricos funciona (solo probando nFR24 y arduino) . No tengo problema en ello. Pero!
Cuando quiero añadir el codigo de los sensores ultrasonicos (HC-SR04) para que me dectecten los objetos de manera inalambrica no logra funcionar.
No se si el problema sea en mi codigo o a su ves no es posible formar un contador inalambrico con dichos sensores.
Es por ello que necesito saber el problema. Con todo adjunto los codigos que eh utilizado para probar mi detector:
//Emisor
#include <RF24_config.h>
#include <printf.h>
#include <RF24.h>
#include <nRF24L01.h>
#include <SPI.h>
//Definir Pins
int trigPin = 7; //CODIGO INFORMACIÓN HC-SRO4
int echoPin = 6;
int distancia = 0;
int estado = 0;
int a = 0;
float tiempo = 0;
int CEPin = 9; //CODIGO INFORMACIÓN nFR24
int CSNPin = 10;
const byte rxAddr[6] = "00001";
RF24 radio(CEPin, CSNPin);
void setup() {
while (!Serial); //CODIGO INFORMACIÓN nFR24
Serial.begin (9600);
radio.begin();
radio.setPALevel(RF24_PA_MIN);
radio.setDataRate(RF24_250KBPS);
radio.setRetries(15, 15);
radio.openWritingPipe(rxAddr);
radio.stopListening();
pinMode(trigPin, OUTPUT); //CODIGO INFORMACIÓN HC-SRO4
pinMode(echoPin, INPUT);
}
void loop() {
String str = "Vehiculos detectados! "; //CODIGO INFORMACIÓN nFR24
str += String( millis() );
int str_len = str.length() + 1;
char char_array[str_len];
str.toCharArray(char_array, str_len);
radio.write(&char_array, sizeof(char_array));
digitalWrite(trigPin, LOW); //CODIGO INFORMACIÓN HC-SRO4
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds (10);
digitalWrite(trigPin, LOW);
tiempo = pulseIn(echoPin, HIGH);
distancia = (tiempo / 2) / 29.15;
if (distancia > 20 && distancia < 60) {
if (estado == HIGH) {
a = a - a;
}
else {
a = a + 1;
Serial.print(a);
Serial.println("entrada");
}
Serial.print("Sent Message: "); //CODIGO INFORMACIÓN nFR24
Serial.print( char_array );
Serial.println("");
delay(2000);
}
}
// RECEPTOR
#include <RF24_config.h>
#include <printf.h>
#include <RF24.h>
#include <nRF24L01.h>
#include <SPI.h>
//DEFINIR PINS
int trigPin2 = 6;
int echoPin2 = 7;
int distancia2 = 0; //CODIGO INFORMACIÓN HC-SRO4
int estado = 0;
int a = 0;
float tiempo2 = 0;
int CEPin = 9;
int CSNPin = 10; //CODIGO INFORMACIÓN nFR24
RF24 radio (CEPin, CSNPin);
const byte rxAddr[6] = "00001";
void setup() {
Serial.begin (9600); //CODIGO INFORMACIÓN nFR24
while (!Serial);
Serial.println("NRF24L01P Receiver Starting...");
radio.begin();
radio.setPALevel(RF24_PA_MIN);
radio.setDataRate( RF24_250KBPS );
radio.openReadingPipe(0, rxAddr);
radio.startListening();
pinMode(trigPin2, OUTPUT); //CODIGO INFORMACIÓN HC-SRO4
pinMode(echoPin2, INPUT);
}
void loop() {
digitalWrite(trigPin2, LOW); //CODIGO INFORMACIÓN HC-SRO4
delayMicroseconds(2);
digitalWrite(trigPin2, HIGH);
delayMicroseconds (10);
digitalWrite(trigPin2, LOW);
tiempo2 = pulseIn(echoPin2, HIGH);
distancia2 = (tiempo2 / 2) / 29.15;
if (distancia2 > 20 && distancia2 < 60 && a ) {
if (estado == HIGH) {
a = a + a;
}
else {
a = a - 1;
Serial.print(a);
Serial.println("salida");
}
}
if (radio.available()) //CODIGO INFORMACIÓN nFR24
{
char text[100] = {0};
radio.read(&text, sizeof(text));
Serial.println("Received Message: ");
Serial.print(text);
Serial.println("");
}
delay(2000);
}
Primero que nada separa los problemas.
Una cosa es enviar los datos vía radio (que la tienes resuelta según comentas) y otra detectar los objetos (que seguramente es la problemática).
¿Qué deberías hacer?
Olvidarte de la radio y verificar que la detección trabaje. Agregando un par de print() lo compruebas por consola.
Luego integras ambas cosas.
Ahora, vamos a ver tu código de detección...
if (distancia2 > 20 && distancia2 < 60 && a ) {
¿Qué valor tiene a al iniciar? 0 (cero)
¿Cuándo se cumple la condición? Nunca.
Como resultado nunca cuenta los objetos aunque estén dentro del rango y a siempre es 0.
Quita a a del condicional y si necesitas verificar su valor (yo no le encuentro sentido en este punto) agrega un if() dentro del condicional.
Algo así
if (distancia2 > 20 && distancia2 < 60 ) {
if(a) {
// lo que sea necesario...
Gracias por tu comentario, y pues algo que no dije fue que anteriormente en un solo arduino utilice el codigo para los ultrasonicos tanto para salida como entrada y funciono sin problema. El codigo para detectar funciono, pero ahora que lo quise "unir" con el codigo para enviar datos pues me presento los problemas, más por eso.
Es que en el código del emisor está bien el condicional pero en el receptor está el problema con el agregado de a a la condición.
Haz la medición como lo hiciste en el emisor, quitando el
&& a
de la condición y listo.
Saludos
PD: Resulta muy molesto mostrar un error y explicar por qué algo no funciona y que la respuesta sea "Antes me funcionó". Así como está el código del receptor la medición no funciona ahora, antes ni en el futuro. La razón fue explicada.
Lo siento fue mi error, trate de ser lo mas consiso pero fue mucho..
Bueno en todo caso lo seguire intentado, cualquier respuesta se los comentare.
Saludos @anon90500195
pero eso a-a??
y para colmo tienes algo en emisor diferente de receptor. No entiendo la lógica.
Mira esa parte porque no creo que funcione como esperas.
Hola disculpen que vuelva a este foro, pues como mencionaba la comunciación inalambrica no me daba problemas pero con el pasar del tiempo si fue el caso.
Y pues resulta que los modulos Nfr24 no me resultaron buenos dedibo a que no eran originales y presentaban problemas con sus microcontroladores asi que me eh tomado el tiempo y dejar de usar ese modelo de comuniación.
Ya que en ECUADOR es muy dificl obtener componentes que sean orignales de esté tipo y aparte no son muy utilizados por la comunidad.
Y bueno antes de continuar con el contador quisiera saber que sistema o tipo de comuniación inalambrica me recomendarian utilizar para mi proyecto.
Entre mis opciónes que pienso está lo que es Xbee y Bluetooth y otras que eh ido investigando pero como solo necesito que mi contador de salida transmita la información a mi contador de entrada nose cual seria la solución mas factible.
Y para que quieres antena con 10 a 15 metros?
Yo amo los nrf24 sean originales o no.
La unica salvedad es que compres todos los que vas a usar en ese proyecto. Si son 2 que sean 2, pero si necesitas 10 compra 10 mas algunos extra.
A ver.. no digo nada nuevo pero sigue mi lógica. Supongamos que son clones. AL menos entre ellos deberian funcionar. Te aseguro que lo hacen. El problema es la compatibilidad con un lote distinto.
Entonces compra los nRF24 sin antena. Andan bien a 30 mts incluso 50 con suerte y sin obstaculos. Yo tengo casi todos de estos y solo algunos con antena.
Son baratos, asi que no pierdes nada. Los alimentas directamente conlos 3.3V del mismo arduino, no necesitas AMS1117 o un regulador de 3.3V como con la versión con antena que requiere mas potencia.
Haz la prueba, y verás que tendras buenos resultados.
Luego no se la situación de Ecuador, pero mira sitios como DFRobot, Adafruit, etc.. y pidelos afuera, no importa lo que te cueste la importación, pierdes mas con cosas que pagas caro internamente (Ecuador) y luego no te sirven.
En Adafruit o DFRobot por citar dos sitios, si los elementos fallan te daran soporte técnico e incluso te devolverán el dinero o nuevos módulos.
Pues con antena a esa distancia y con obstaculos no me darian problemas. En cambio sin antena puede que si sea el problema. Y es que, el contador sera instalado en un estacionamiento en donde la entrada y salida tienen un aproximada de 14 metros de distancia. Y la entrada representa lo que serian los obstaculos ya que el lugar es un estacionamiento abierto.
Envio foto del lugar en donde pretendo utilizar mi contador.
LA ENTRADA AL ESTACIONAMIENTO
Como lo voy a implementar ? Pues eso sera luego, ya vere como monto mis componentes en una sola placa y veo como dectecte. La cuestión que más me preocupa es la comunicación.
Con respecto a la compatibilidad estaba viendo en un post sobre los nfr24 y mira lo que resulto el problema fue que tengo de este modelo de sensores:
Continuando la discusión desde Extraños problemas con el módulo de RF NRF24L01:
Es por ello que me entro la duda, revise mis modulos y eran los mismos que tenian chinp nfr con error. Por ello la falta de confianza y por eso no quise saber más sobre los nfr24.
Pero voy hacer un ultimo intento comprando en linea.... cambiando a DFRobot.
Por lo personal mis compras las realizo en mercado libre, y fue ahi por donde me vendieron ese tipo de sensores con problemas. Pero voy hacer un intento comprando en otro sitio.
Tu compras como nosotros en ML de nuestro país. Yo he tenido conversaciones con los proveedores a raíz de este hilo que mencionas donde me desayuné del problema.
Entonces la solución a la que llegué fue comprar lo que necesito y algunos mas y los dejo anotados para backup si el cliente me llama años despues. Forma parte del costo. A mi me han funcionado todos en las partidas. Tampoco he intercambiado entre ellas. No he hecho ese seguimiento o pruebas.
DFRobot o Adafruit son sitios prestigiosos, ellos no digo que vendan originales, tal vez si. Sus precios a veces reflejan un valor un poco mas caros pero ahi esta la diferencia.
En tu caso ese valor no debe importante, lo que importa es que el sistema sea confiable.
Ahora.. hay alternativas? Si pero TODO hoy esta clonado. Es un gran cancer el que estamos sufriendo los diseñadores electrónicos porque compramos pensando que esto no nos dará problemas y luego resulta que te rompes la cabeza buscando porque algo que deberia funcionar no lo hace.
Asi que no supongas nada. Hoy todo viene con la etiqueta de que NO ANDA!! hasta probar lo contrario. Son alarmista? Yo creo que no.
Gracias por encontrar el hilo porque tengo un hilo en Tutoriales sobre el tema Fakes. Lo incluiré porque quedé en buscarlo pero no lo hice.
EDITO: puedes usar tambien los LoRA de baja potencia.