Das Projekt des heutigen Tages benutzt die Webseite des Webservers nicht als Steueroberfläche, sondern als Ausgabeelement. Die über einen Helligkeitssensor gemessene Helligkeit wird als Relativwert übersichtlich dargestellt.
Hinter dem heutigen Türchen befindet sich ein Fototransistor, der als Lichtsensor dient. Der Fototransistor sieht aus wie ein LED, sollte aber nicht mit einer verwechselt werden. Den Aufbau des heutigen Versuchs zeigt das Bild. Der Kollektor des Fototransistors ist der kürzere Anschluss und liegt an +5 V.

Das Programm: Day15_TCPServerBright
Bis heute bestanden die Webseiten des Webservers immer aus einer nicht veränderbaren Seite, die Daten an den Controller geschickt hat. Heute soll die Webseite vor dem Übertragen an den Browser verändert werden, um die gemessene Helligkeit des Fototransistors anzuzeigen. Dies funktioniert, weil im Quellcode der Webseite eine Art Platzhalter versteckt ist. Das Programm ersetzt nun beim Laden der Daten aus der Progmen-Variablen den Platzhalter *bright* durch den aktuellen Helligkeitswert. Somit werden der Ausgabetext und der Ausschlag des Schiebereglers verändert. Eine weitere Zeile in der HTML-Datei sorgt dafür, dass sich die Seite automatisch alle paar Sekunden neu lädt. Schon wird die aktuelle Helligkeit übersichtlich im Browser angezeigt.


45 Kommentare
Die Kommentarfunktion ist geschlossen. Die Kommentare stammen aus der früheren WordPress-Seite.
Ggf. kann man die Lichtempfindlichkeit noch mit einem Multimeter messen, um ganz sicher zu sein.
Ich frage mich gerade, ob der Foto-T den Strom von ~20mA überleben würde, wenn man ihn ausversehen mit der LED verwechselt.
habe gerade Tag 10 bis 15 "erledigt" und es hat alles super funktioniert, bin total begeistert und freue mich auf die nächsten Tage.
Grosses Lob dem Autor!!
Die LEDs haben an der Kathode ein schwarzes Klebeband bekommen.
Fototransistor ein rotes.
Die Wiederstände weiss mit den Werten drauf
Grüssle
for (int i = 0; i <= sizeof(site); i++)
müsste lauten
for (int i = 0; i < sizeof(site); i++)
Sonst wird ein Byte zuviel gesendet (ist dem Browser aber egal).
https://www.facebook.com/groups/967872949952771/
(IoT mit dem NanoESP)
Angelegt für weitere, weitergehende Experimente, Erfahrungsaustausch, Bilder, Videos…
Viel Spaß
Jens
Eigentlich sollte zum kopieren von C-Strings ja strcpy_P() verwendet werden. Hier wird aber nicht von C-String auf C-String kopiert, sondern von C-String auf C-Object. Daher die For-Schleife.
Die LED sieht Weiß aus
und der Fototransistor Schwarz
Hätte man mal dazu schreiben sollen. Ich als Elektroniker weiß das, aber die meisten werden darauf nicht achten.
ich wollte das Prog von heute so verändern das unter einer bestimmten Helligkeit eine LED an D9 geschaltet wird. Bin mir eigentlich sicher das der Schaltungsaufbau richtig ist. Bin im Programmieren nicht gerade ein Crack, bzw. ist schon lange her :-P. müsste doch mit ner einfachen if schleife zu machen sein:
if (SENSOR < 600);
{
pinMode(LED, HIGH);
}
Jemand ne Idee?
if ((analogRead(SENSOR)) < 600);
{
pinMode(LED, OUTPUT);
}
if ((analogRead(SENSOR)) < 600);
{
digitalWrite(LED,HIGH);
}
pinMode(LED, OUTPUT) gehört natürlich in die Setup() Funktion.
also das ist mal ein Auszug, WLAN Daten sind natürlich auch drin.
Hätte gerne das die LED brennt solange es dunkel ist und aus geht wenns hell genug ist.
Schön, dass hier auch kein Noop hilfe bekommt :-P
#define LED_WLAN 13
#define LED 9
#define SENSOR A0
#define DEBUG true
#include
SoftwareSerial esp8266(11, 12); // RX, TX
const byte site[] PROGMEM = {
60,72,84,77,76,62,60,72,69,65,68,62,10,60,108,105,110,107,32,114,101,108,61,34,105,99,111,110,34,32,104,114,101,102,61,34,100,97,116,97,58,59,98,97,115,101,54,52,44,105,86,66,79,82,119,48,75,71,103,111,61,34,62,10,60,109,101,116,97,32,110,97,109,101,61,34,118,105,101,119,112,111,114,116,34,32,99,111,110,116,101,110,116,61,34,119,105,100,116,104,61,100,101,118,105,99,101,45,119,105,100,116,104,44,32,105,110,105,116,105,97,108,45,115,99,97,108,101,61,50,46,48,44,32,117,115,101,114,45,115,99,97,108,97,98,108,101,61,121,101,115,34,62,10,60,109,101,116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,114,101,102,114,101,115,104,34,32,99,111,110,116,101,110,116,61,34,51,34,62,10,60,116,105,116,108,101,62,10,66,114,105,103,104,116,110,101,115,115,10,60,47,116,105,116,108,101,62,10,60,47,72,69,65,68,62,10,60,66,79,68,89,32,98,103,99,111,108,111,114,61,34,35,70,70,70,70,57,57,34,32,116,101,120,116,61,34,35,48,48,48,48,48,48,34,62,10,60,70,79,78,84,32,115,105,122,101,61,34,54,34,32,70,65,67,69,61,34,86,101,114,100,97,110,97,34,62,10,66,114,105,103,104,116,110,101,115,115,10,60,47,70,79,78,84,62,10,60,70,79,78,84,32,115,105,122,101,61,34,51,34,32,70,65,67,69,61,34,86,101,114,100,97,110,97,34,62,10,60,72,82,62,10,60,66,82,62,10,9,60,108,97,98,101,108,32,102,111,114,61,34,104,101,108,108,34,62,67,117,114,114,101,110,116,32,66,114,105,103,104,116,110,101,115,115,58,32,42,98,114,105,103,104,116,42,60,47,108,97,98,101,108,62,32,60,66,82,62,10,9,60,105,110,112,117,116,32,116,121,112,101,61,34,114,97,110,103,101,34,32,32,109,97,120,32,61,32,34,49,48,50,52,34,32,110,97,109,101,61,34,104,101,108,108,34,32,118,97,108,117,101,61,42,98,114,105,103,104,116,42,62,60,66,82,62,10,60,66,82,62,10,60,72,82,62,10,60,47,102,111,110,116,62,10,60,47,72,84,77,76,62
};
void setup() {
pinMode(LED,OUTPUT);
Serial.begin(19200);
esp8266.begin(19200);
if (!espConfig()) serialDebug();
else digitalWrite(LED_WLAN, HIGH);
if (configTCPServer()) debug("Server Aktiv"); else debug("Server Error");
}
void loop() {
if ((analogRead(SENSOR)) 600);
{
digitalWrite(LED, LOW);
}
void loop() {
if ((analogRead(SENSOR)) 600);
{
digitalWrite(LED, LOW);
}
if ((analogRead(SENSOR)) 600);
{
digitalWrite(LED, LOW);
}
if ((analogRead(SENSOR)) 600);
{
digitalWrite(LED, LOW);
}
fk müsste da schon grösseren Aufwand treiben, um das zu beheben (das Symbol hat in HTML eine wichtige Rolle).
Dies wurde in den Kommentaren auch schon erwähnt.
#define LED_WLAN 13
#define LED 9
#define SENSOR A0
#define DEBUG true
#include
SoftwareSerial esp8266(11, 12); // RX, TX
const byte site[] PROGMEM = {
60,72,84,77,76,62,60,72,69,65,68,62,10,60,108,105,110,107,32,114,101,108,61,34,105,99,111,110,34,32,104,114,101,102,61,34,100,97,116,97,58,59,98,97,115,101,54,52,44,105,86,66,79,82,119,48,75,71,103,111,61,34,62,10,60,109,101,116,97,32,110,97,109,101,61,34,118,105,101,119,112,111,114,116,34,32,99,111,110,116,101,110,116,61,34,119,105,100,116,104,61,100,101,118,105,99,101,45,119,105,100,116,104,44,32,105,110,105,116,105,97,108,45,115,99,97,108,101,61,50,46,48,44,32,117,115,101,114,45,115,99,97,108,97,98,108,101,61,121,101,115,34,62,10,60,109,101,116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,114,101,102,114,101,115,104,34,32,99,111,110,116,101,110,116,61,34,51,34,62,10,60,116,105,116,108,101,62,10,66,114,105,103,104,116,110,101,115,115,10,60,47,116,105,116,108,101,62,10,60,47,72,69,65,68,62,10,60,66,79,68,89,32,98,103,99,111,108,111,114,61,34,35,70,70,70,70,57,57,34,32,116,101,120,116,61,34,35,48,48,48,48,48,48,34,62,10,60,70,79,78,84,32,115,105,122,101,61,34,54,34,32,70,65,67,69,61,34,86,101,114,100,97,110,97,34,62,10,66,114,105,103,104,116,110,101,115,115,10,60,47,70,79,78,84,62,10,60,70,79,78,84,32,115,105,122,101,61,34,51,34,32,70,65,67,69,61,34,86,101,114,100,97,110,97,34,62,10,60,72,82,62,10,60,66,82,62,10,9,60,108,97,98,101,108,32,102,111,114,61,34,104,101,108,108,34,62,67,117,114,114,101,110,116,32,66,114,105,103,104,116,110,101,115,115,58,32,42,98,114,105,103,104,116,42,60,47,108,97,98,101,108,62,32,60,66,82,62,10,9,60,105,110,112,117,116,32,116,121,112,101,61,34,114,97,110,103,101,34,32,32,109,97,120,32,61,32,34,49,48,50,52,34,32,110,97,109,101,61,34,104,101,108,108,34,32,118,97,108,117,101,61,42,98,114,105,103,104,116,42,62,60,66,82,62,10,60,66,82,62,10,60,72,82,62,10,60,47,102,111,110,116,62,10,60,47,72,84,77,76,62
};
void setup() {
pinMode(LED,OUTPUT);
Serial.begin(19200);
esp8266.begin(19200);
if (!espConfig()) serialDebug();
else digitalWrite(LED_WLAN, HIGH);
if (configTCPServer()) debug("Server Aktiv"); else debug("Server Error");
}
void loop() {
if ((analogRead(SENSOR)) *pfeillinks* 600);
{
digitalWrite(LED, HIGH);
}
if ((analogRead(SENSOR)) *pfeilrechts* 600);
{
digitalWrite(LED, LOW);
}
String xBuffer;
Der Rest ist gleich mit dem Prog von heute
if ( analogRead(SENSOR) < 600 )
{
digitalWrite(LED, LOW);
}
else
{
digitalWrite(LED, HIGH);
}
Kein Semikolon hinter dem IF und das ELSE ist auch wichtig, sonst bleibt die Lampe immer aus.
Bitte ignoriert die Kommentare, sorry für den Spam.
Viel wills ja jemand nachmachen:
Das hier
void loop() {
if ((analogRead(SENSOR)) *pfeillinks* 600)
{
digitalWrite(LED, HIGH);
}
if ((analogRead(SENSOR)) *pfeilrechts* 600)
{
digitalWrite(LED, LOW);
}
String xBuffer;
Einfügen, oben pinMode(LED,OUTPUT);
und voila. Läuft
Was ich jetzt damit mache. Mhm
Mit 10k (orange) wirds düster, mit 1k (rot) sollte es einigermassen leuchten.
Superspaß heute …
Mach ich mit dem 9V-block den Transistor kaputt?
Ich werde es ja gleich sehen.
endlich hatte ich auch mal wieder Zeit meinen Adventskalender auf den neuesten Stand zu bringen. Waren wieder super Projekte dabei, die mein "Anfängerherz" höher schlagen lassen :). An dieser Stelle nochmals vielen lieben Dank!
Eine wichtige Frage hätte ich allerdings noch (passt zwar nicht so 100 prozentig an diese Stelle aber ich hoffe, dass mir trotzdem jemand "helfen" bzw. mich beraten kann).
Ich möchte mich mehr mit dem Thema rund um das Arduino Board beschäftigen. Dazu würde ich mir gerne ein "Paket" mit einem möglichst ausführlichem Handbuch aber auch einer vielzahlt an Bauteilen für Projekte in alle Richtungen zulegen. Bei Conrad findet man ja viele solcher Pakete. Es wäre super, wenn mir jemand eine Ratschlag (oder Erfahrung) geben kann, was für ein (Lern)paket perfekt für mich wäre :).
Ich würde mich sehr über Antworten freuen :)
Danke schonmal und liebe Grüße
Ralph
und für Bauteile Sets kann man auch mal in einem großen Auktionshaus oder auf DX.com schauen… ;-)
schau Dir das mal an.
https://www.arduino.cc/en/Main/ArduinoStarterKit
Damit habe ich auch angefangen, und bin auch noch mit viel Spaß und auch Erfolg dabei.
vielen Dank für deine Antwort!
Dieser Kit, den du gepostet hast, ist doch vergleichbar mit dem hier, welcher bei conrad angeboten wird:
https://www.conrad.de/de/arduino-arduino-starter-kit-k000007-095060.html
Ich habe nämlich noch einen Gutschein von Conrad und bekomme über Weihnachten besuch von meinem Neffen. Wir wollen uns das sozusagen "teilen" und zusammen lernen :)Da muss ich schauen, dass der bis dahin noch eintrifft :).
Eine Frage noch. Bei diesen StaerterKit`s ist ja immer ein Arduino UNO dabei. Kann dieser für die Projekte auch durch das NanoESP-Board aus dem Kalender ersetzt werden? Ein Arduino UNO hat ja kein w-lan Modul.
Liebe Grüeß
Ralph
da bin ich nun auch überfragt, da ich mich abseits dieses Kalenders noch gar nicht mit dem NanoESP beschäftigt habe.
Da aber auch hier genügend I/O Pins, sowohl digital, analog, als auch PWM vorhanden sind, sollte es schon möglich sein, den Arduino Uno durch das NanoESP zu ersetzen.
Vergleiche aber auf jeden Fall die Strombelastbarkeit der Pins an den unterschiedlichen Boards. Nicht das es zu einer Überlastung und damit Beschädigung des NanoESP bei einem der Versuche aus dem Buch kommt.
Hallo,
2 Fragen zum Tag 15:
Gruß
Alfred
die Dioden musst du von oben anschauen,
Weiss - Diode
Schwarz - Fotodiode
Schwarz, kleiner Punkt - IR-Diode
Das Bild passt nicht ganz. Der kurze Anschluss der Diode muss auf 5V, also direkt auf den Anschluss
"Y 1"
Herzlichen Dank fürs Sharen.
http://iot.fkainka.de/forum/topic/textconverter
Das Tool ist super !
Für den Tag 15 habe ich folgende Parameter verwendert
Input: "HTLM text"
Parameter: "Plain Text" "CR LF"
Output: "const byte site[] PROGMEM"
Parameter: "Byte Array" "LF"
http://www.allcleannaturalcn.com