Forum: Mikrocontroller und Digitale Elektronik Lichtschranke NRF24L01 ATMega 328p


von R. B. (dxx255)



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!

von Mike (Gast)


Lesenswert?

Roman B. schrieb:
> Foto_14.12.13_19_09_42.jpg

Schöne Grüße nach Wien in die Stohberggasse. Das iPhone5 ist schon was 
tolles ;-)

von R. B. (dxx255)


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
}

von Mike (Gast)


Lesenswert?

Roman B. schrieb:
> Fotos wurden mit einem iPhone 4 gemacht

Stimmt, ist mir auch grad' aufgefallen ;-)

von R. B. (dxx255)


Lesenswert?

Woher kennst du aber den Ort, wo das Foto aufgenommen wurde? In den 
Metadaten steht keine GPS-Position.

von R. B. (dxx255)


Lesenswert?

??

von Roman B. (Gast)


Lesenswert?

??

von Markus (Gast)


Lesenswert?

Spontan fehlen mir da noch ein paar Abblock-Kondensatoren an der 
Speisung.

von Markus (Gast)


Lesenswert?

Und bis du da sicher? Was soll hier passieren?
1
if (radio.write( &text,sizeof(text))){
2
    }else{
3
    }

von Roman B. (Gast)


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?

von emc2 (Gast)


Lesenswert?

wenn es doch schonmal funktioniert hat und nu nicht mehr, ...ach dass 
man schon selber durch machen

von Markus (Gast)


Lesenswert?

Roman B. schrieb:
> Was für Abblockkondensatoren brauche ich denn
> noch?

Direkt an der Speisung des IC ein 100nF Keramik-Kondensator.
Wie wird das nun gespiesen? Die Spannung bricht aber nicht ein?

von Markus (Gast)


Lesenswert?

Schon probiert mit
if(digitalRead(0) == HIGH)

von Roman B. (Gast)


Lesenswert?

Das mit den kondensatoren musst du mir genauer erklären. wozu sind die? 
ist if(digitalRead(0)) nicht dasselbe wie if(digitalRead(0)==HIGH)?

von Markus (Gast)


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?

von Roman B. (Gast)


Lesenswert?

3x AA Batterien

von Roman B. (Gast)


Lesenswert?

Hat noch jemand eine Idee?

von Markus (Gast)


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.

von Roman B. (Gast)


Lesenswert?

Mach ich morgen. Danke für die Hilfe!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.