DHT22 met dimmer en nrf24l01+

Hardware die niet past in bovenstaande onderwerpen
Berichten: 4
Geregistreerd: 19 Okt 2019, 00:34

DHT22 met dimmer en nrf24l01+

Berichtdoor bluebird » 19 Okt 2019, 11:00

Goedemorgen,

Voor een project wil ik met een Arduino Nano de temperatuur uitlezen aan de hand van een DHT22, aan de hand van deze gegevens een dimmer aansturen en de gegeven via een NRF24L01 de gegevens doorsturen naar een Raspberry Pi.

Ik ben begonnen met het aansturen van de dimmer. Dit werkt perfect.
Het uitlezen van de DHT22 lukt ook prima, ik krijg elke 2 seconden netjes de temperatuur en luchtvochtigheid.

Het probleem komt wanneer ik beide combineer.

Ik maak gebruik van de Robotdyn Dimmer en gebruik deze originele library:
https://github.com/RobotDynOfficial/RBDDimmer

Zodra ik deze regel in mijn code toevoeg krijg ik als temperatuur en luchtvochtigheid telkens NAN waarde terug:
Code: Alles selecteren
dimmer.begin(NORMAL_MODE, ON); //dimmer initialisation: name.begin(MODE, STATE)


Dit is mijn "volledige" code:

Code: Alles selecteren
#include <RBDdimmer.h>//
#include <DHT.h>;

//#define USE_SERIAL  SerialUSB //Serial for boards whith USB serial port
#define outputPin  8
#define DHTPIN 3     // what pin we're connected to
#define DHTTYPE DHT22   // DHT 22  (AM2302)
DHT dht(DHTPIN, DHTTYPE); //// Initialize DHT sensor for normal 16mhz Arduino

//dimmerLamp dimmer(outputPin, zerocross); //initialase port for dimmer for ESP8266, ESP32, Arduino due boards
dimmerLamp dimmer(outputPin); //initialase port for dimmer for MEGA, Leonardo, UNO, Arduino M0, Arduino Zero

float hum;  //Stores humidity value
float temp; //Stores temperature value

void setup() {
  Serial.begin(9600);
  dimmer.begin(NORMAL_MODE, ON); //dimmer initialisation: name.begin(MODE, STATE)
  Serial.println("--- Simple dimmer example ---");
  dht.begin();
}

void loop() {
  hum = dht.readHumidity();
  temp = dht.readTemperature();

  Serial.print("Humidity: ");
  Serial.print(hum);
  Serial.print(" %, Temp: ");
  Serial.print(temp);
  Serial.println(" Celsius");

  dimmer.setPower(90); // setPower(90%);
  delay(1000);
  dimmer.setPower(10); // setPower(10%);
  delay(2000);

}


Heeft iemand een idee of dit samen moet kunnen werken op één of andere manier, en dan ook nog met de gegevens doorsturen via de nrf24l01
Alvast bedankt!

Advertisement

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

Re: DHT22 met dimmer en nrf24l01+

Berichtdoor shooter » 19 Okt 2019, 17:48

dat komt door de timers die dimmer gebruikt, soms kun je een andere timer gebruiken, maar dat betekent of inbreken in de library of even de dimmer uitzetten tijdens de opvraag van I2C.
paul deelen
shooter@home.nl

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

Re: DHT22 met dimmer en nrf24l01+

Berichtdoor Koepel » 19 Okt 2019, 18:15

De DTH11, DTH22, Neopixel en DS18B20 werken met een speciaal timing protocol. De libraries voor die sensoren zetten dan even de interrupts uit. Ik heb niet gekeken waar het mis gaat en waarom je NAN krijgt.

Je kunt overstappen naar I2C, maar die heeft een vrij grote interrupt routine.
Een sensor met SPI gaat sneller, maar meerdere dingen op de SPI bus kan problemen geven als ze niet compatible zijn.

Wat dacht je van een sensor met I2C en dan een softwarematige I2C library gebruiken ? Dan kun je met de sensor communiceren en je zit niets en niemand in de weg.

Berichten: 4
Geregistreerd: 19 Okt 2019, 00:34

Re: DHT22 met dimmer en nrf24l01+

Berichtdoor bluebird » 19 Okt 2019, 20:06

Bedankt, ik heb het inmiddels "opgelost" door 2 arduino's te pakken en één arduino alleen de dimmer aan te laten sturen.

Nu wil ik de data die ik vanuit de arduino krijg draadloos naar een Raspberry Pi sturen.
Op internet genoeg filmpjes gezien waarbij dit mogelijk is met de NRF24L01, dus meerdere setjes aangeschaft.

Het probleem is dat ik dit dus ook niet werkend krijg.
Ik heb de versie inclusief grote antenne en inclusief adapter blokje gepakt voor zowel de arduino als de raspberry pi.

Ik heb verschillende voorbeelden gevolgd en bij geen enkel voorbeeld krijg ik het werkend.
Het voorbeeld wat ongeveer exact doet wat ik ook wil is hier te vinden:
https://www.raspberrypi.org/forums/view ... hp?t=91043

De CE wil ik eigenlijk op een andere GPIO poort omdat ik de poort 22 (GPIO 25) al voor wat anders gebruik, maar om te testen of het daar aan lag heb ik deze toch maar gebruikt.
Ik krijg op zowel de Arduino als op de Raspberry pi de info te zien dat de bedrading juist zou moeten zijn (dacht ik, in eerste instantie kreeg ik overal 0-waardes te zien), maar wat ik ook doe, de raspberry ontvangt niets van waardes vanuit de Arduino.
Afbeelding

Arduino Code:
Code: Alles selecteren
#include <SPI.h>
#include <SD.h>
#include <Wire.h>
#include <DHT.h>
#include "nRF24L01.h"
#include "RF24.h"

#define LED 7
#define DHTPIN 2
#define DHTTYPE DHT11

//const int chipSelect = 10;
const int SER = 8;
const int LATCH = 9;
const int CLK = 10;

//nRF24 set the pin 9 to CE and 10 to CSN/SS
// Cables are:
//     SS       -> 10
//     MOSI     -> 11
//     MISO     -> 12
//     SCK      -> 13

//for nrf24 debug
int serial_putc( char c, FILE * )
{
  Serial.write( c );
  return c;
}
void printf_begin(void)
{
  fdevopen( &serial_putc, 0 );
}

RF24 radio(9,10);
DHT dht(DHTPIN,DHTTYPE);

const uint64_t pipes[2] = { 0xF0F0F0F0E1LL,0xF0F0F0F0D2LL };

void setup(void) {
  Serial.begin(9600); //Debug
  printf_begin();
  dht.begin();
  //nRF24 configurations
  Wire.begin();
  pinMode(SER, OUTPUT);
  pinMode(LATCH,OUTPUT);
  pinMode(CLK, OUTPUT);
  pinMode(LED,OUTPUT);
  //nRF24 configurations
  radio.begin();
  radio.setChannel(0x4c);
  radio.setAutoAck(1);
  radio.setRetries(15,15);
  radio.setDataRate(RF24_250KBPS);
  radio.setPayloadSize(32);
  radio.openReadingPipe(1,pipes[0]);
  radio.openWritingPipe(pipes[1]);
  radio.startListening();
  radio.printDetails(); //for Debugging
}

void loop() {
  int SendPayload[4] ;
  
  //Get data from sensors
  int t = dht.readTemperature(); // deg C
  int f = dht.readTemperature(true); // deg F
  int h = dht.readHumidity();
  
  if (isnan(t)){
    Serial.println("Sensor read failed");
    return;
  }
  int lux = 25;  
  // Assign data to payload array
    
  SendPayload[0] = t;
  Serial.print("degC: ");
  Serial.println(SendPayload[0]);
  SendPayload[1] = f;
  Serial.print("degF: ");
  Serial.println(SendPayload[1]);
  SendPayload[2] = h;
  Serial.print("Hum: ");
  Serial.println(SendPayload[2]);
  Serial.print("Lux : ");
  SendPayload[3] = lux;
  Serial.println(SendPayload[3]);
  radio.stopListening();
  bool ok = radio.write(&SendPayload,sizeof(SendPayload));
  radio.startListening();
  digitalWrite(LED,HIGH);
  delay(1000);  
  digitalWrite(LED,LOW);
}




Raspberry Pi code
Code: Alles selecteren

# 1 GND GND
# 2 3.3v 1 3.3v
# 3 CE 22 GPIO25
# 4 CSN 24 CE0_0
# 5 SCK 23 SCLK_0
# 6 MOSI 19 MOSI_0
# 7 MISO 21 MISO_0
# 8 N/C
#  -----------------------------------
#

from nrf24 import NRF24
import time
from time import gmtime, strftime
import RPi.GPIO as GPIO
try:
    pipes = [[0xf0, 0xf0, 0xf0, 0xf0, 0xe1], [0xf0, 0xf0, 0xf0, 0xf0, 0xd2]]

    radio = NRF24()
    radio.begin(0, 0,5,18)  # Edited from radio.begin(0, 0,25,18) -> Changed port to gpio 5 but also tried with gpio port 25
    radio.setRetries(15,15)
    radio.setPayloadSize(32)
    radio.setChannel(0x4c)
    radio.setDataRate(NRF24.BR_250KBPS)
    radio.setPALevel(NRF24.PA_MAX)
    radio.setAutoAck(1)
    radio.openWritingPipe(pipes[0])
    radio.openReadingPipe(1, pipes[1])
    radio.startListening()
    radio.stopListening()
    radio.printDetails()
    radio.startListening()

    while True:
        pipe = [0]
        while not radio.available(pipe, True):
            time.sleep(1000/1000000.0)
        recv_buffer =[]
        radio.read(recv_buffer)
        #print recv_buffer
        print "Deg C: ",recv_buffer[0]
        print "Deg F: ",recv_buffer[2]
        print "Humidity: ",recv_buffer[4]
        print "Light level (lux): ",recv_buffer[6]
except KeyboardInterrupt:
    print "\n Program stopped \n"
    
finally:
    GPIO.cleanup()



Bedrading:
Afbeelding


Wie kan mij hiermee helpen?

Alvast bedankt!

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

Re: DHT22 met dimmer en nrf24l01+

Berichtdoor shooter » 20 Okt 2019, 18:58

gebruik de functies om en om, ofwel haal eerst de data op met I2C of zo en dan uitzetten en met je andere functie verzenden.
dan heb je genoeg aan een simpele NANO.
paul deelen
shooter@home.nl

Berichten: 4
Geregistreerd: 19 Okt 2019, 00:34

Re: DHT22 met dimmer en nrf24l01+

Berichtdoor bluebird » 20 Okt 2019, 20:05

Zoiets had ik al geprobeerd maar dat lukte mij niet, ik weet niet hoe ik het om en om moet programmeren.

Ik had al geprobeerd de dht.begin() functie aan te roepen voordat ik waardes ging ophalen en dimmer.begin voordat ik de dimmer ging aansturen, maar ik blijf daarmee NAN values krijgen

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

Re: DHT22 met dimmer en nrf24l01+

Berichtdoor shooter » 23 Okt 2019, 16:06

dat kan misschien, maar dan moet je wel ook uitzetten want anders blijven de timers doordraaien met verkeerde settings.
paul deelen
shooter@home.nl

Berichten: 4
Geregistreerd: 19 Okt 2019, 00:34

Re: DHT22 met dimmer en nrf24l01+

Berichtdoor bluebird » 23 Okt 2019, 19:45

En hoe zet ik dat uit? (sorry, ben een starter met Arduino).
Dit is het laatste stukje wat ik nog moet, de rest heb ik werkend gekregen

Bedankt alvast

Terug naar Overige hardware

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 6 gasten