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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.