Lichtschranke NRF24L01 ATMega 328p

OP #3445350
Lesenswert?

Hallo
Ich möchte eine Lichtsschranke bauen, welche, wenn sie durchbrochen 
wird, ein Funksignal mit einem NRF24L01 an einen Arduino Uno schickt. 
Ich habe eine Platine gelötet und das ganze hat auch funktioniert, doch 
seit ich sie aufstellen wollte und die Platine mit Klebeband an einen 
Batterietank(4,5V) geklebt habe, funktioniert gar nichts mehr. Ich habe 
fast alle Drähte ausgetauscht, den NRF24L01 neu verkabelt und die ISP 
Header entfernt( die Software funktionierte ja schon und ohne den 
Headern ist es übersichtlicher),trotzdem keine Verbesserung! Im Anhang 
sind noch Fotos der Platine zu finden!
Hier die Software:
1
#include <SPI.h>
2
#include <RF24.h>
3
#include <nRF24L01.h>
4
#include <RF24_config.h>
5

6
RF24 radio(9,10);
7

8
int la[10];
9
int lConst=0;
10
void setup(){
11
 radio.begin();
12
  radio.setChannel(2);
13
  if (radio.isPVariant())
14
  {
15
   
16
  }
17
  else
18
  {
19
 
20
  }
21
  radio.openWritingPipe(0xF0F0F0F0D2LL);
22
 pinMode(0,INPUT);
23
}
24
int arrayAverage(int a[],int count){
25
   int average=0;
26
   int i=0;
27
   for(i;i<count;i++){
28
     average+=a[i];
29
   }
30
   return average/count;
31
}
32
void loop(){
33
  if(digitalRead(0)){
34
    radio.stopListening();
35
    char text[]="Einrichtung...";
36
    if (radio.write( &text,sizeof(text))){
37
    }else{
38
    }
39
    radio.startListening();
40
    int i=0;
41
    for(i;i<10;i++){
42
       la[i]=analogRead(A5);
43
       delay(20); 
44
    }
45
    lConst=arrayAverage(la,10);
46
  }
47
  if(analogRead(A5)<lConst-10&&lConst!=0){
48
    radio.stopListening();
49
    char text[]="Lichtschranke unterbrochen";
50
    if (radio.write( &text,sizeof(text))){
51
    }else{
52
    }
53
    radio.startListening();
54
    delay(1000);
55
  }else{
56
    
57
  }
58
  delay(5);
59
}
Bitte um Hilfe!
OP #3445391
Lesenswert?

Fotos wurden mit einem iPhone 4 gemacht. Das ganze sendet jetzt wieder, 
allerdings gibt es ein paar Probleme mit dem Button: Das Programm 
reagiert so, als ob er permanent gedrückt wäre.
Angeschlossen ist er so:
Pin 0 ---------10k------GND
           |
            \
           |
           VCC

Software (jetzt ein bisschen verändert):
1
#include <SPI.h>
2
#include <RF24.h>
3
#include <nRF24L01.h>
4
#include <RF24_config.h>
5

6
RF24 radio(9,10);
7

8
int la[10];
9
int lConst=0;
10
void setup(){
11
 radio.begin();
12
  radio.setChannel(2);
13
  if (radio.isPVariant())
14
  {
15
   
16
  }
17
  else
18
  {
19
 
20
  }
21
  radio.openWritingPipe(0xF0F0F0F0D2LL);
22
 pinMode(0,INPUT);
23
  radio.stopListening();
24
    char text[]="Gestartet...";
25
    if (radio.write( &text,sizeof(text))){
26
    }else{
27
    }
28
    radio.startListening();
29
    delay(1000);
30
}
31
int arrayAverage(int a[],int count){
32
   int average=0;
33
   int i=0;
34
   for(i;i<count;i++){
35
     average+=a[i];
36
   }
37
   return average/count;
38
}
39
void loop(){
40
  if(digitalRead(0)){
41
    radio.stopListening();
42
    char text[]="Einrichtung...";
43
    if (radio.write( &text,sizeof(text))){
44
    }else{
45
    }
46
    radio.startListening();
47
    int i=0;
48
    for(i;i<10;i++){
49
       la[i]=analogRead(A5);
50
       delay(20); 
51
    }
52
    lConst=arrayAverage(la,10);
53
  }
54
  if(analogRead(A5)<lConst-10&&lConst!=0){
55
    radio.stopListening();
56
    char text[]="Lichtschranke unterbrochen";
57
    if (radio.write( &text,sizeof(text))){
58
    }else{
59
    }
60
    radio.startListening();
61
    delay(1000);
62
  }else{
63
    
64
  }
65
  delay(5);
66
}
Gast #3445468
Lesenswert?

Da könnte man eventuell noch eine Fehlerbehandlung einbauen. Ich habe 
den Code aus einem vorherige Projekt übernommen und angepasst. Aber was 
ist mit diesem Button los? Was für Abblockkondensatoren brauche ich denn 
noch?
Gast #3445594
Lesenswert?

Roman B. schrieb:
> ist if(digitalRead(0)) nicht dasselbe wie if(digitalRead(0)==HIGH)?

Ja sollte, aber probiere aber mal einen ganz einfachen Code mit einer 
LED am Ausgang
1
if(digitalRead(0) == HIGH)
2
  {   
3
    digitalWrite(ledPin, HIGH);  
4
  } 
5
  else
6
  {
7
    digitalWrite(ledPin, LOW); 
8
  }

Roman B. schrieb:
> Das mit den kondensatoren musst du mir genauer erklären. wozu sind die?

Um kurze Spannungseinbrüche am IC zu eliminieren, die entstehen immer 
bei schnellen Schaltvorgängen. Solche Kondensatoren sind Pflicht einfach 
an den VCC und den GND Pin ein 100nF Kermik-C nahe daran löten.

Es können auch etwas weniger oder mehr als 100nF sein, falls nicht 
verfügbar.
Was ist es für eine Speisung?
Gast #3446711
Lesenswert?

Roman B. schrieb:
> Hat noch jemand eine Idee?

Den Abblock-C hast du platziert?

Wenn es schon mal funktioniert hat mit genau diesem Code und dieser 
Schaltung, wirst du nun irgendwo ein Kurszchluss oder Unterbruch haben. 
Du musst das Problem in kleiner Teile aufteilen und überprüfen.

Lade z.B. mal einen ganz einfachen Code, wie oben, darauf nur um den 
Taster abzufragen und anzuzeigen, so siehst du z.B. ob mit dem Taster 
und dem Eingang alles richtig ist. Auch das Modul mal weglassen. So 
musst du dich Stück um Stück durchkämpfen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren