• Hallo Zusammen, Aufgrund der aktuellen Situation setzten wir die Möglichkeit aus, sich mit Gmail zu registrieren. Wir bitten um Verständnis Das RCMP Team

Gefahren Arduinogesabbel :)

DFENCE

Mitglied
Logisch, ich bin Stammkunde beim Az seitdem die groß rausgekommen sind, tausend mal besser als über Amazon china irgend nen krempel zu kaufen. AZ Kauft zwar auch in China, aber der fährt vor Ort und überzeugt sich von der Qualität bevor er kauft.

Ich bin mir jetzt nicht mehr sicher aber da gabs zwei sets mit Crimp zangen, bei dem einen war 0.16mm² als kleinste hülse bei dem anderen 0.10mm², zur Not halt einmal umkrempel und samt Isolierung Crimpen, das hält auf jeden fall. Mir ist das schon oft passiert das die kleinen Adern sich abwetzen, spätestens nachm dritten mal einschrauben kannst neu abisolieren. Grad bei unseren Bastelzeug find ich Adernendhülsen extrem Praktisch.

Weil mir das Breadboard gestecke aufn Zeiger geht hab ich mir nen Shield für die Nano´s gebaut.
IMG_20180624_134639.jpg IMG_20180624_134644.jpg

Nen Nano mit CNC Shield
IMG_20180627_192058.jpg
 

BAXL

Admin
Mitarbeiter
Die meisten Sets haben als kleinste Größe 0,25, was Kleineres habe ich noch nicht gesehen. Bin ja auch noch nicht komplett durch :)

Edit
Mir scheint bei Hülsen ist bei 0,25 Schluss. Stecker gehen bis auf 0,1 runter.
 
Zuletzt bearbeitet:

BAXL

Admin
Mitarbeiter
Seit ein paar Tagen grabe ich tiefer im Arduino-Unversum herum. Da sind manchmal ganz einfach erscheinende Fragen, auf die man nahezu keine Antwort findet. gugelt man danach erhält man zwar Unmengen an Suchergebnissen, wenn man diese aber mal nachliest stellt man fest, dass man überwiegend immer wieder auf die Frage selbst stößt und auf unzählige Posts mit Erklärungsversuchen bzw. darauf, dass die Antwortgeber die Frage offensichtlich selbst nicht beantworten können und nur rumschwallern.

Ganz simples Beispiel. Wie wandelt man eine Zahl in eine Zeichenkette und umgekekehrt eine Zeichenkette in eine Zahl.
Nehmen wir nur mal eine Tempertatur von 23,45°C. Es soll als aus 23,45 als Zahl "23,45" als String gemacht werden und danach die "23,45" wieder zur Zahl 23,45. Einfache Frage 1000 unverständliche Antworten. Und nun die Steigerung wenn man eine negative Zahl hat, nämlich -23,45. Ha, da kann man echt was spannen. Fazit, ich bin im Moment auch noch nicht schlauer und versuche aus den unzähligen Informationen das genau richtige herauszufinden.

Oder dieser hier. LCD-Displays kann man entweder direkt an einen Arduino anschließen, oder über eine Zusatzplatine, eines so genannten I2C-Moduls. Klar, man findet immer irgendwo Codezeilen, die dann nach einigem Probieren klappen, aber warum jeweils, darüber schweigen sich die Leute aus. Z.B. mein 16x2 Display konnte man ganz easy mit dem Modul anschließen initialisieren und starten. Beim 20x4 Display musste man in der Init-Routine ganz viele Zahlen eintippen, die per Kommata getrennt waren. Nirgendwo auch nur der Hauch einer Erklärung welche Bedeutung die Zahlen haben und warum gerade jene Zahl an jener Stelle stehen muß. Irgenwann konnte ich es mir zusammenreimen und feststellen, dass die Zahlen etwas mit den Ausgabeports des I2C Moduls und den Anschlußpins des Displays zu tun haben. Aaaaber keine vernünftige Dokumentation der I2C Chinamodule.

Nur ma so zum Anfassen. Für das 1602 Display initialisiert man das I2C Modul mit:

LiquidCrystal_I2C
lcd(0x27, 16, 2);
//Hier wird festgelegt um was für einen Display es sich handelt. In diesem Fall eines mit 16 Zeichen in 2 Zeilen und der HEX-Adresse 0x27. Für ein vierzeiliges I2C-LCD verwendet man den Code "LiquidCrystal_I2C lcd(0x27, 20, 4)"

Jaaa, leider geht das nicht so einfach beim 2004 Display, ich habs versucht. Man muß sattdessen Folgendes eingeben:
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

Was zum Teufel bedeuten all die Zahlen? Klar kommen die Antworten das sind Zuordnungen der Ausgabepins des I2C auf das Display. Nur welche Zahl hat welche Bedeutung?
Das bekommt man auch fast komplett heraus, nur warum steht die 2 an Pos 2, die 1 an Pos 3, die 0 an Pos 4 usw.?


Die Ardoinoszene ist offensichtlich auch nicht anders als die Modellbauer, keine Standards, vieles muß man einfach wissen, weil es nirgendwo steht und oberschlaue Forenkönige, die Fragensteller doof von der Seite anmachen. Echt gruselig.
 
Zuletzt bearbeitet:

BAXL

Admin
Mitarbeiter
Einen habe ich noch. Es gibt den tollen Temperatursensor DS18B20. Der hat 3 Pins von dem einer Plus, einer Masse und einer ein Signalpin ist. Über den Signalpin wird seriell mit dem Teil geredet. Damit das klappt, braucht man von dem Sensor eine Adresse, weil es auch möglich ist, mehrere parallel an ein und derselben Leitung zu betreiben. Das Elend fängt damit an, die Adresse von jedem Sensor herauszufinden. D.h. einen simplen Aufbau mit einem Arduino zusammenstöpseln, Beispielprogramm laden und die Adresse auf dem seriellen Monitor ausgeben lassen. Hat man mehrere Sensoren, sollte man die einzeln jeweils anschließen und das Programm starten. Ansonsten bekommt man gleich mehrere Adressen ausgespuckt und weiß immer noch nicht welche zu welchem Sensor gehört.

Als Nächstes der reale Einsatz. Hat man die Adresse, muß man die in den Code reinschreiben und kopilieren. Nun geht der Sensor kaputt und man muß ihn ersetzen...:(. Also neuen Sensor rein und den Code neu kompileren und aufspielen. Nicht sehr wartungsfreundlich, besonders, wenn tatsächlich nur ein Sensor angeschlossen ist.

Hey, es gibt eine Lösung. Man kann mit einem einfachen Befehl, immer den Sensor ansprechen, der als erstes auf dem Bus gefunden wird. Wenn nur einer da ist, prima, dann braucht man nicht mehr die spezielle Adresse des Sensors. Das geht dann einfach mit
sensor.getTempCByIndex(0). Ich habe lange gesucht um das zu finden. Sonst geht das nur mit der Adresse, wenn man sicher gehen will, dass man auch vom richtigen Sensor einen Wert erhält.

Nur, da gibt es noch ein Problem, die Auflösung des Sensors, die kann man einstellen. Je genauer, umso länger dauert es, bis der Meßwert zurückgeschickt wird. Bei der Easylösung (s.o.) habe ich keinen "Easybefehl" gefunden, der mal eben die Meßgenauigkeit umstellen kann. Man braucht dafür dann wieder die Adresse des Sensors, oder einige umständliche Codezeilen. Wenn man es dann weiß, ist es einfach, bis dahin stochert man rum, gugelt, stößt wieder auf dieselbe Frage und x mehr oder weniger umständliche Erklärungsversuche und viel Rumlaberei.
 

BAXL

Admin
Mitarbeiter
Sooo, endlich. Ich habe es geschafft eine Temperatur und einen Tastenstatus per 2,4 GHz zu übermitteln und natürlich wieder zu empfangen.
Das war eine schwere Geburt, weil überall kleine Fallstricke lauerten. Gibts in einem Extra Thema.

@Hubipilot Das wäre auch mal für Dich interessant.
 
Einen habe ich noch. Es gibt den tollen Temperatursensor DS18B20. Der hat 3 Pins von dem einer Plus, einer Masse und einer ein Signalpin ist. Über den Signalpin wird seriell mit dem Teil geredet. Damit das klappt, braucht man von dem Sensor eine Adresse, weil es auch möglich ist, mehrere parallel an ein und derselben Leitung zu betreiben. Das Elend fängt damit an, die Adresse von jedem Sensor herauszufinden. D.h. einen simplen Aufbau mit einem Arduino zusammenstöpseln, Beispielprogramm laden und die Adresse auf dem seriellen Monitor ausgeben lassen. Hat man mehrere Sensoren, sollte man die einzeln jeweils anschließen und das Programm starten. Ansonsten bekommt man gleich mehrere Adressen ausgespuckt und weiß immer noch nicht welche zu welchem Sensor gehört.

Als Nächstes der reale Einsatz. Hat man die Adresse, muß man die in den Code reinschreiben und kopilieren. Nun geht der Sensor kaputt und man muß ihn ersetzen...:(. Also neuen Sensor rein und den Code neu kompileren und aufspielen. Nicht sehr wartungsfreundlich, besonders, wenn tatsächlich nur ein Sensor angeschlossen ist.

Hey, es gibt eine Lösung. Man kann mit einem einfachen Befehl, immer den Sensor ansprechen, der als erstes auf dem Bus gefunden wird. Wenn nur einer da ist, prima, dann braucht man nicht mehr die spezielle Adresse des Sensors. Das geht dann einfach mit
sensor.getTempCByIndex(0). Ich habe lange gesucht um das zu finden. Sonst geht das nur mit der Adresse, wenn man sicher gehen will, dass man auch vom richtigen Sensor einen Wert erhält.

Nur, da gibt es noch ein Problem, die Auflösung des Sensors, die kann man einstellen. Je genauer, umso länger dauert es, bis der Meßwert zurückgeschickt wird. Bei der Easylösung (s.o.) habe ich keinen "Easybefehl" gefunden, der mal eben die Meßgenauigkeit umstellen kann. Man braucht dafür dann wieder die Adresse des Sensors, oder einige umständliche Codezeilen. Wenn man es dann weiß, ist es einfach, bis dahin stochert man rum, gugelt, stößt wieder auf dieselbe Frage und x mehr oder weniger umständliche Erklärungsversuche und viel Rumlaberei.

Hi BAXL,


ich kann Dir nur die BME280 von Bosch empfehlen. Die sind sehr genau. Hab selbst ein Wetterhäuschen gebaut. Es gibt auch zieg Beispiele dafür.
Als Anleitung habe ich diese benutzt:
Solar Powered WiFi Weather Station V2.0
https://www.instructables.com/id/Solar-Powered-WiFi-Weather-Station-V20/

Zu den diversen Sensoren gibt es ebenfalls einen sehr guten Beitrag, der die miteinander vergleicht.
http://www.kandrsmith.org/RJS/Misc/Hygrometers/calib_many.html


Mein Setup sieht allerdings etwas anders aus. Ich nutze nicht die vorgegebene Lösung, also kein Blynx und dieses Thingspeak ebenfalls nicht.
Ich nutze für die Visualisierung Grafana. Als DB wird eine influxDB benutzt. Die Wetterstation verbindet sich alle x Minuten mit einem separierten WLAN (extra vlan dafür), und schickt die Daten in die influxDB. Hab dafür auch einen Sketch bearbeitet, da der originale einen kleinen Fehler enthielt.


Momentan teste ich die Genauigkeit des BME280. Da ich kein geeichtes Equipment hier habe, ich allerdings zwei spezielle Geräte ausleihen konnte, habe ich momentan zwei von den W&T #57713 im Einsatz zum Vergleich.
https://www.wut.de/e-57713-ww-dade-000.php

Die Ergebnisse sind mehr als zufriedendstellend. Alle Werte sind sehr nah beinander... Also Zehntel-, bzw im Hunderstelbereich. :)



Grüße

DEM

Das Ergebnis sieht dann so aus:
 

Anhänge

Zuletzt bearbeitet:

BAXL

Admin
Mitarbeiter
Irgendwie ist es hier bei den Arduinos immer noch mau. Ich schreibe und schreibe und keiner springt so richtig an. Die Kollegen springen/fliegen lieber mit RC-Modellen, die eigentlich dazu bestimmt sind, mit allen 4 Rädern fest auf dem Boden zu sein. Ich stelle mir gerade vor, wenn ich sowas mit meinem Golf Variant probieren würde :D.
 

froetz

Mitglied
Damit du nicht so einsam mit deinem Arduino bist poste ich mal eins meiner letzten Projekte

Projekttitel: Mini Pong-Arcade Cabinet

Im Netz bin ich auf folgendes Video gestoßen:
-> fand ich cool und die nötige Hardware hab ich in der Teileschublade. Also gleich mal aufs Breadboard gesteckt und getestet.


Wollte es schon wieder wegräumen, aber der Junior hat es entdeckt und wollte andauernd Pong spielen. Da kam mir die Idee, ich druck noch ein Gehäuse und verseh das Teil mit einem Akku. Aus einem alten defekten Notebookakku hab ich noch ein paar funktionierende 18650 Zellen retten können. Dazu eine kleine Ladeelektronik (TP4056) und fertig ist die Stromversorgung. Die Komponenten und das Gehäuse hab ich in Sketchup 2017 gezeichnet.


Die erste Version sah schon mal ok aus:


Da der erste Entwurf schon fast gut war, hab ich in einem iterativem Prozess das Gehäuse noch zwei mal am PC optimiert und noch mal gedruckt. Zusammenbau kommt dann demnächst. Über die Versorgungsspannung wird dann auch der Akku geladen.

Die Verdrahtung ist zweckmäßig und dem knappen Platz geschuldet etwas weniger schön geworden.



Das Teil ist nun fertig und wird immer wieder gerne genutzt. Den Code hab ich auch noch etwas angepasst (Titelbild und Speed).

 

BAXL

Admin
Mitarbeiter
Kannst mal was posten wie Du das Display ansteuerst, also nicht für Pong sondern für den Grillmeister.
 

froetz

Mitglied
hab dir mal das ganze Projekt inklusive "fritzing"-Schaltplan angehängt.

Das Programm läuft in dem Fall so ab, dass es immer nach bestimmten Laufzeiten bestimmte Tasks aus dem großen Loop ausführt. Die Tasks sind dann in der functions.ino. Den Grundaufbau nutze ich für fast alle meine Programme und kommentiere einfach aus, was ich nicht brauche. Auch die Sache mit den Funktionen, die zu gewissen Zeiten aufgerufen werden hat sich bewährt. Bei bspw. ner Temperaturabfrage einer trägen Temperaturstrecke muss ich nicht alle 10ms. abfragen. Da reicht dann einmal pro Sekunde, Display oder Serielle Kommunikation ebenfalls, je nach Bedarf.

Die Funktion zum Display ist folgende:
void DisplayOutput() {

display.clearDisplay();
// display.drawLine(2, 0, 125, 0, WHITE);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(10, 3);
display.println("Grill-O-Therm 3000");
display.drawLine(2, 12, 125, 12, WHITE);

display.setTextSize(1);
display.setCursor(2, 16);
display.print("Alarm BBQ: ");
display.setCursor(65, 16);
display.print(SetTempBBQ);
display.println("'C");
display.setCursor(2, 26);
display.print("Temp BBQ : ");
display.setCursor(65, 26);
display.print(ActTempBBQ);
display.println("'C");
// display.drawLine(2, 35, 125, 35, WHITE);
display.setCursor(2, 37);
display.print("Set Pit : ");
display.setCursor(65, 37);
display.print(SetTempPit);
display.println("'C");
display.setCursor(2, 47);
display.print("Temp Pit : ");
display.setCursor(65, 47);
display.print(ActTempPit);
display.println("'C");
display.setCursor(2, 57);
display.print("Fan: 0%|");
display.setCursor(95, 57);
display.print("|");
display.print(pidOutputPercent);
display.println("%");

display.drawBitmap(105, 16, keule, 16, 16, 1);
display.drawBitmap(105, 37, grill, 16, 16, 1);

display.fillRect(47, 57, (pidOutputPercent / 2), 7, 1); // bargraph x,y,width,height,color)
display.display();
}

Die Bitmaps hab ich mit GIMP erstellt und mit einem "Bitmap2C"-Konverter umgewandelt. Die werden dann schön als Grafik dargestellt.Zur HTML-Sache bin ich nicht mehr gekommen, da ich auf Gas umgestiegen bin.
 

Anhänge

BAXL

Admin
Mitarbeiter
Gestern ist mein 1,3" OLED Display mit 128x64 Bildounkten eingetroffen. Als ich die Schachtel aufgemacht habe, habe ich erstmal große Augen gemacht, weil das Ding ziemlich klein ist, nicht größer wie eine Streichholzbriefchen. Aber gut, zum Experimentieren soll es wohl reichen.

Hier ein Bild als Größenvergleich zum Arduino Nano. Wenn man genau hinguckt kann man auch gleich sehen, wo das Teil am Nano angeschlossen wird.



Der Verkäufer hat mir auch zeitnah eine E-Mail mit Datenblättern geschickt. zwei mal eine Datei, in der nur der Anschluß gezeigt wird, also quasi identische Dokumente und ein weiteres, mit einem Datenblatt. Schade nur, dass nirgendwo eine Angabe zu finden ist, welchen Treiber (Library) man verwenden soll, geschweige denn, ein kleines Beispielprogramm. Selbst auf seiner Shopseite ist nur ein sehr vages Beispiel mit vielen Ungereimtheiten und Unsicherheiten. Bei meiner Suche im Internet sehe ich mich wieder einmal in meiner Aussage bestätigt, dass man im Internet alles findet, aber auch nichts. Wie mir scheint, wird das wieder so eine Aktion wie mit dem NRF24l01 2,4 GHz Sendemodul:rolleyes:.
Die stürzen sich mit ihren Beispielen alle immer nur auf die Darstellung von Grafiken, eine ganz simple Anzeige von Text sucht man vergenebens.

D.h. suchen, suchen, suchen und sich selbst was zusammenreimen. Meine Erkenntnisse werde ich natürlich nicht für mich behalten.
 
Zuletzt bearbeitet:

DFENCE

Mitglied
#include "ssd1306.h"

void setup()
{
/* Replace the line below with ssd1306_128x32_i2c_init() if you need to use 128x32 display */
ssd1306_128x64_i2c_init();
ssd1306_fillScreen(0x00);
ssd1306_setFixedFont(ssd1306xled_font6x8);
ssd1306_printFixed (0, 8, "Line 1. Normal text", STYLE_NORMAL);
ssd1306_printFixed (0, 16, "Line 2. Bold text", STYLE_BOLD);
ssd1306_printFixed (0, 24, "Line 3. Italic text", STYLE_ITALIC);
ssd1306_printFixedN (0, 32, "Line 4. Double size", STYLE_BOLD, FONT_SIZE_2X);
}


void loop()
{
}


hätt ich depp net nen Backup gemacht und alle daten vom Laptop runtergeworfen würd ich jetzt an mein Sketch rankommen den ich letzt erst geschrieben hab mit dem Display.
WhatsApp Image 2019-11-08 at 11.11.00.jpeg


Ha habs doch gefunden

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4 // not used / nicht genutzt bei diesem Display
Adafruit_SSD1306 display(OLED_RESET);

void setup() {

Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);



display.clearDisplay();
// set text color / Textfarbe setzen
display.setTextColor(WHITE);
// set text size / Textgroesse setzen
display.setTextSize(1);
// set text cursor position / Textstartposition einstellen
display.setCursor(1,0);
// show text / Text anzeigen
display.println(" VOLTAGE ");
display.setCursor(70,0);
display.println((batteryVoltage));
display.setCursor(110,0);
display.println(" V ");
display.setTextSize(1);
display.setCursor(1,10);
display.println(" AMPERE ");
display.setCursor(65,10);
display.println((Amps1));
display.setCursor(110,10);
display.println(" A ");
display.setCursor(1,20);
display.println(" WATT ");
display.setCursor(70,20);
display.println((watts));
display.setCursor(110,20);
display.println(" W ");
display.display();
delay(50);
display.clearDisplay();


Library :
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
 
Zuletzt bearbeitet:
Top Bottom