draadloze voltmeter

Arduino specifieke Software
Berichten: 32
Geregistreerd: 18 Jan 2017, 19:58

draadloze voltmeter

Berichtdoor DG300flyer » 18 Jan 2017, 20:07

Hallo Forumleden

Ik ben op zoek naar een ontwerp voor een draadloze voltmeter van 0-5V voor arduino met transciever modules NRF24L01 , de bedoeling is dat men aan de zenderzijde een analoge gelijkspanning tussen 0 en 5V aanbied en dat de waarde aan de ontvangerzijde kan uitgelezen worden op een 16X2 ( of 16X4 ) LCD display.
De bedoeling is om de snelheid van een zweefvliegtuig bij het oplieren kunnen door te geven aan de lieroperator zodat hij ( of zij ) aan de hand van die snelheid het vermogen van de lier kan aanpassen. Heeft toevallig iemand een gelijkaardig ontwerp in zijn bezit. Ik ben relatief nieuw met arduino bezig en heb al enkele projectjes met succes gemaakt maar de communicatie tussen 2 arduino's met de NRF24L01 lukt me niet.
Graag uw reactie !

Alex

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: draadloze voltmeter

Berichtdoor nicoverduin » 18 Jan 2017, 20:47

Er zijn volgens mij legio voorbeelden voorbij gekomen (ook hier op het forum) om boodschappen heen en weer te sturen met de nRF24L01....
Dus als iets niet lukt, stel dan de vraag hier en zet de bijbehorende sketches die je gebruikt..... Of zoek hier eens op het forum...
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 32
Geregistreerd: 18 Jan 2017, 19:58

Re: draadloze voltmeter

Berichtdoor DG300flyer » 19 Jan 2017, 00:30

Hallo Nico
Bedankt voor de tip, ik heb reeds verschillende projecten gevonden om info te verzenden via een arduino met een NRF24L01 maar nog geen enkele om gewoon een gelijkspanning in te lezen en dan door de ontvanger uit te lezen op een LCD.
Ik heb al draadloze projectjes zoals het aansturen van een led via een NRF24L01 of het sturen van een servo maar overdracht van de waarden van een analoge sensor zoals o.a een LM35 heb ik tot nu toe nergens gevonden, het doorsturen van de waarden uit een digitale sensor vind je genoeg .
Groeten
Alex

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: draadloze voltmeter

Berichtdoor Koepel » 19 Jan 2017, 02:22

Volgens mij is dit een goede library: https://github.com/TMRh20/RF24.

Zodra je analogRead() doet, dan heb je een integer met een bepaalde waarde. Het maakt dan niet uit of die waarde van een digitale sensor of van een analoge sensor vandaan komt.

Hoe nauwkeurig wil je het voltage lezen ?
De analogReference() staat default op 5V. Maar als de 5V varieert, dan beïnvloedt dat de gemeten waarden.
Met de interne voltage reference is nauwkeuriger.
Met een externe voltage reference is nog nauwkeuriger.

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: draadloze voltmeter

Berichtdoor shooter » 19 Jan 2017, 10:37

in plaats van de boolean die je nu verstuurt (als byte trouwens) dan een INT versturen van de analogRead(A0).
dat is eigenlijk alles.
Het is overigens wel zo dat de snelheid van een zweefvliegtuig heel anders kan zijn dan die van de lier, dus ik denk dat je beter af bent met een trekmeting op de draad. Als het vliegtuig optrekt, dan kan de lier zelfs stilstaan terwijl het vliegtuig een boog maakt om hoogte te winnen.
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: draadloze voltmeter

Berichtdoor nicoverduin » 19 Jan 2017, 11:01

Ik heb ooit deze zender en ontvanger als eens neergezet:
Zender:
cpp code
/**
* Transmitter code
*/
#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>
#include "printf.h" // comment this out if no radio info on serial
#include <SPI.h>
#define SW1 14 // just define a pin for the switch


int msg[1]; // message buffer
RF24 radio(9, 10);
const uint64_t pipe = 0xE8E8F0F0E1LL; // pipe ID for both transmitter and receiver must be the same
/**
* setup
*/
void setup(void) {
Serial.begin(115200); // start the serial
printf_begin(); // enable radio status info on serial or comment out
Serial.println("Start zender");
radio.begin(); // start the radio
radio.openWritingPipe(pipe); // open our pipe for communication
radio.printDetails(); // show radio status info
pinMode(SW1, INPUT_PULLUP); // inputs with pullup
}
/**
* loop
*/
void loop(void) {
if (digitalRead(SW1) == LOW ) { // If switch is pulled LOW = ON
msg[0] = 111; // send 111 to receiver
} else {
msg[0] = 222; // send 222 to receiver
}
//
// actual message transmission and small delay
//
radio.write(msg, 1); // send out 1 byte
// delay(1000);

}


Ontvanger:
cpp code
/**
* receiver code
*/

#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>
#include "printf.h" // comment this line if you do not want radio info on serial
#include <SPI.h>

#define LED1 7 // use any pin except the SPI pins

int msg[1]; // one byte buffer
RF24 radio(9, 10);
const uint64_t pipe = 0xE8E8F0F0E1LL; // id must be identical as transmitter
/**
* setup
*/
void setup(void) {
Serial.begin(115200); // serial console at 115200 baud
printf_begin(); // enable radio to send status info to serial
Serial.println("start ontvanger");
radio.begin(); // start the radio
radio.openReadingPipe(1, pipe); // open a pipe for reading
radio.startListening(); // go into listening mode
radio.printDetails(); // show the status of the radio
pinMode(LED1, OUTPUT); // enable our LED pin
}

void loop(void) {
if (radio.available()) { // is there any data
radio.read(msg, 1); // get one byte at a time
Serial.println(msg[0]); // just show our received byte
if (msg[0] == 111) { // LED ON?
digitalWrite(LED1, HIGH);
} else { // or OFF
digitalWrite(LED1, LOW);
}
}
}


msg moet je inderdaad vergroten tot 2 bytes
en de digitalRead vervangen voor analogRead.
Bij de ontvanger moet je dan de integer waarde omrekenen voor een analoge spanning.
Wil je precisie zoals Koepel vroeg, dan moet je de waarde bij de zender bepalen en wordt het message gebeuren iets anders. Maar krijg eerst dit maar eens voor elkaar.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 32
Geregistreerd: 18 Jan 2017, 19:58

Re: draadloze voltmeter

Berichtdoor DG300flyer » 19 Jan 2017, 14:27

Dag iedereen die al reageerde, van harte bedankt voor de support. Aan jullie berichten te lezen zijn jullie blijkbaar specialisten in Arduino-taal, mijn kennis echter is heel beperkt. Ik heb al een aantal dingen geprobeert en de meeste met succes maar het ging allemaal over simpele dingen. Het probleem is dat ik eigenlijk niet begrijp wat de betekenis en functie is van bepaalde commando's omdat ik de programeertaal niet ken en begrijp :(
@ Nico ik ga uw codes eens inladen en zien hoe ver ik kom, ziet er interessant uit, je hoort ervan op dit forum.
@Shooter onze ESW-2B lier is electrisch en computergestuurd maar het is toch interessant voor de lierbedienaar om de exacte snelheid te weten van de toestellen die hij opliert, zo kan hij zien of er op bepaalde hoogtes andere windsnelheden zijn dan op de grond, op die manier kan hij dan zijn instellingen aanpassen en krijgt de piloot een meer constante opliersnelheid.
@ koepel , De uitlezing moet nogal nauwkeurig zijn omdat ik snelheid van de snelheidsmeter van het zweefvliegtuig van 0 tot 250 Km/H moet vertalen naar een analoge spanning tussen 0 en 5V en dan draadloos doorzenden. Omdat de snelheidsmeter van het vliegtuig werkt met een barometrische sensor ga ik op termijn ook via een dergelijke sensor gekoppeld aan de Arduino gebruiken. Als het me eerst lukt om een analoge spanning op afstand uit te lezen kan ik overstappen op de barometrische sensor.

Berichten: 32
Geregistreerd: 18 Jan 2017, 19:58

Re: draadloze voltmeter

Berichtdoor DG300flyer » 19 Jan 2017, 14:39

Hallo Nico , ik heb de codes van uw voorstel eens bekeken en voor zover ik eruit kan opmaken betreft het hier een zender met drukknop en een ontvanger die een led doet branden wanneer de drukknop van de zender wordt ingedrukt. Ik heb een gelijkaardig projectje gemaakt dat prima werkt het betreft hier een bidirectionele verbinding waar zich aan beide zijden een drukknop met led bevinden, drukt met op een drukknop dan zal aan de andere module de led gaan branden en vice versa , ik heb dan geprobeert om de drukknoppen en de leds uit de schets te halen en deze te vervangen door aan de ene zijde een analoge spanning te geven en aan de andere zijde deze uit te lezen met een LCD maar het loopt blijkbaar mis en ik het probleem is dat ik niet weet WAAR het foutgaat :roll:
Dit is de code die ik gebruikte :
cpp code
#include <LiquidCrystal.h>
#include <RH_NRF24.h>
#include <SPI.h>

// Singleton instance of the radio driver
RH_NRF24 nrf24;



// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int SENSOR_PIN = 0; //centerpin van de potentiometer

void setup() {

Serial.begin(9600);

lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("Snelheid DG300");
delay(100);

while (!Serial)
; // wait for serial port to connect. Needed for Leonardo only
if (!nrf24.init())
Serial.println("init failed");
// Defaults after init are 2.402 GHz (channel 2), 2Mbps, 0dBm
if (!nrf24.setChannel(1))
Serial.println("setChannel failed");
if (!nrf24.setRF(RH_NRF24::DataRate2Mbps, RH_NRF24::TransmitPower0dBm))
Serial.println("setRF failed");

}


void loop()
{

int sensorValue = analogRead(SENSOR_PIN);

// set cursor to second row, first column
lcd.setCursor(0, 1);
float voltage = sensorValue * (5.0 / 1023.0);
lcd.print(voltage);
delay (100);
// Send a message
uint8_t data[] = "snelheid DG300";
nrf24.send(data, sizeof(data));
nrf24.waitPacketSent();

}

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: draadloze voltmeter

Berichtdoor nicoverduin » 19 Jan 2017, 15:18

Laat jouw sketches dan eens hier zien wat je nu hebt? Want nu gaat er nog geen analoge data over de lijn.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 32
Geregistreerd: 18 Jan 2017, 19:58

Re: draadloze voltmeter

Berichtdoor DG300flyer » 19 Jan 2017, 15:40

Hallo Nico

Hier de codes die ik gebruik maar niet werken :
cpp code
#include <LiquidCrystal.h>
#include <RH_NRF24.h>
#include <SPI.h>

// Singleton instance of the radio driver
RH_NRF24 nrf24;



// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int SENSOR_PIN = 0; //centerpin van de potentiometer

void setup() {

Serial.begin(9600);

lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("Snelheid DG300");
delay(100);

while (!Serial)
; // wait for serial port to connect. Needed for Leonardo only
if (!nrf24.init())
Serial.println("init failed");
// Defaults after init are 2.402 GHz (channel 2), 2Mbps, 0dBm
if (!nrf24.setChannel(1))
Serial.println("setChannel failed");
if (!nrf24.setRF(RH_NRF24::DataRate2Mbps, RH_NRF24::TransmitPower0dBm))
Serial.println("setRF failed");

}


void loop()
{

int sensorValue = analogRead(SENSOR_PIN);

// set cursor to second row, first column
lcd.setCursor(0, 1);
float voltage = sensorValue * (5.0 / 1023.0);
lcd.print(voltage);
delay (100);
// Send a message
uint8_t data[] = "snelheid DG300";
nrf24.send(data, sizeof(data));
nrf24.waitPacketSent();

}

Volgende

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: afadqinopo en 16 gasten