AutoIt und Arduino

    • Offizieller Beitrag

    Ich wollte mal fragen, wer von euch sich zusätzlich mit dem Arduino beschäftigt?
    Also speziell die Kommunikation zwischen Arduino und PC (AutoIt).

    Ich habe mir jetzt erstmal einen "Arduino Uno" und diverse Zusatz-Elektronik (LCD-Keypad-Shield, Data-Logging-Shield, diverse Sensoren, Steckbrett, etc.) bestellt.
    Mir schwebt da als Projekt eine Wetterstation vor, die die Daten auf SD-Karte loggt und wenn ich dann den PC anmache, möchte ich die geloggten Daten mit AutoIt abholen und dann auswerten.

    Erstmal natürlich einige Grundlagen zur Arduino-Programmierung lernen.
    Aber vielleicht hat ja jemand Lust zu einem Erfahrungsaustausch/Projektbeteiligung?

    Im Forum (forum.arduino.cc) lese ich schon die diversen Beiträge. Mir ist aber auch an der Verbindung zum PC (AutoIt) gelegen.

    • Offizieller Beitrag

    Wenn du die Daten aus dem Arduino auslesen willst, kommt unter AutoIt nur die Seriell- Kommunikation in Frage.
    Natürlich kannst du das auch per Http erledigen, dazu brauchst du dann aber einen Ethershield.
    Nachteil bei einem Ethershield ist, das der Ethershield und die darauf enthaltene SD-Card beide SPI benutzen und die beiden Libs dazu nicht richtig arbeiten.
    Also entweder die Sd-Card oder das Ethernet, beides gleichzeitig hab ich noch nie zum laufen bekommen.
    Ich selbst benutze die Sd-Card des Etehershield nicht, sondern benutze einen extra SD-Card Reader der mittels Software SPI angesteuert wird.
    Alternativ kannst du aber auch mal nach ESP8266 googlen, dieses Coole Modul hat mehr Power,Speicher usw als ein Arduino und kostet zwischen 3-5 €.
    Den ESP8266 kann man mittlerweile sogar per Arduino IDE programmieren. Der ESP8266 hat zwar nicht so viele Aus- u. Eingänge wie ein Arduino, aber
    auf die Anzahl kommt es eh nicht an. Per i2c kann man alles an den ESP hängen (LCD,Temperaturfühler, Eeprom usw) und braucht nur 2 Pins. ;)
    Habe z.Z. einen Esp8266 mit 4 Temperaturfühlern ,2 LCD Displays 1024 kbit EEprom und diversen Tastern die alle an 2 Pins hängen.
    Die Taster und Lcds hängen alle an PFC8574 Portexpandern, die Anzahl der I/O Pins ist nur durch die zur Verfügung stehenden Geräteadressen begrenzt.

  • Hi Oscar,

    mit Arduino (hab 2) habe ich schon diverse kleinere, aber recht sinnlose Sachen gebastelt.

    Habe z.b. einen Meter von einem LED-Strip mit Hilfe von einem PC-Netzteil und Arduino in Farbwechsel-Schleife laufen, ist auch heute noch im Betrieb :D

    Eine Wetterstation wäre schon mal was cooles und sinnvolleres :)

    Du könntest theoretisch auch dieses LCD-Panel als Ausgabe hernehmen.

    Gruß,
    x0r

    €dit: Du kannst die Daten auch einfach in eine "ini" auslagern und später mit AutoIt auslesen: http://forum.arduino.cc/index.php?topic=320771.0

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

    Einmal editiert, zuletzt von x0r (21. Januar 2016 um 20:43)

  • Hi,
    Ich habe mir einen Eventmodus auf dem Arduino geschrieben, welcher "hinter" dem eigentlichen Code läuft und über die serielle Schnittstelle mit AutoIt kommuniziert.
    D.h. während ein Sketch auf dem Arduino läuft und dort irgendwelche Daten an die Ports ausgibt oder einholt, kann ich von Autoit aus Daten an div. Ports senden oder von dort empfangen, quasi simultan.
    In extremo braucht man auch garkeinen lauffähigen Sketch auf dem Arduino zu schreiben, man kann auch alle Ports direkt von AutoIt aus steuern :o)

    • Offizieller Beitrag

    Wow! Jetzt habe ich noch gar nicht richtig angefangen und werde schon mit Extras "bombadiert"! Klasse! Macht weiter so! :)

    Raupi : Ich habe den ESP8266 mal gegoogelt und das könnte doch auch eine Verbindung zum PC darstellen (also per WLAN = Arduino + ESP8266 <-> PC), oder?
    Hast Du da Erfahrung, wie man dann die Kommunikation mittels AutoIt hinbekommt?


    @xOr: Das Projekt mit dem LED-Strip würde mich auch noch interessieren. Kannst Du mir dazu mehr erzählen (Sketch, Aufbau, etc.)?
    Das LCD soll auch zur Anzeige für die Wetterstation dienen, zusätzlich zu der Möglichkeit der Auswertung am PC. Was dort alles angezeigt werden wird, das wird sich noch zeigen.
    Im Moment bin ich sozusagen noch bei Null.

    Andy: So ein Eventmodus interessiert mich ganz besonders, vor allem, weil ich in AutoIt meist auch den Eventmodus benutze. Ich denke aber auch, dass so eine unabhängige Kommunikation mit dem PC überhaupt die Bedingung dafür ist, dass der Arduino im Hintergrund weiter die Daten loggen kann. Er soll ja während der Übertragung nicht damit aufhören. Von daher wäre es schön, wenn Du den Code mit mir teilen würdest.

    Heute sind übrigens die Teile gekommen (ich habe mir auch einen Original-Genuino gegönnt, um die OpenSource-Gemeinde zu unterstützen).
    Für eine andere Projektidee (Geschwindigkeitsmessung beim Kegeln via Lichtschranke) habe ich mir noch ein kleines (5mW) Lasermodul gekauft.
    Ich denke, damit dürfte ich für den Anfang erstmal ausgesorgt haben. :)

    • Offizieller Beitrag

    Wenn du den Esp8266 benutzt, brauchst du den Arduino nicht mal. Fast alles was du mit dem Arduino machen kannst, kann auch der Esp8266 selbst.
    Speichetechnisch ist das Modul besser bestückt als ein Arduino Mega 2560.
    Mit AutoIt in Verbindung mit dem Arduino mache ich eigentlich nicht viel, ausser mal den Status auslesen.
    Wenn du Daten von Esp8266 abrufen willst, geht das genauso, als wenn du Daten einer Webseite abrufst.
    Das nervige dabei ist es den Webteil auf dem Esp zu proggen.
    Schau dir mal diese Videos an: https://www.youtube.com/watch?v=0H1_9tu25HU und https://www.youtube.com/watch?v=LJ9TrVol3vA
    Dort baut der Kerl eine Riesenuhr mit Websteuerung. Dort kannst du sehen was möglich ist und der Code ist auch zugängig.

    Btw, ich besitze nur 1 Original Arduino und zwar den UNO, alle anderen sind Clones. Für jeden Scheiß benutze ich einen eigenen Controller.
    Einen Nano oder Mini Clone bekommt man für unter 2 € (incl. Versand),das ist so günstig das selbst ein ATMega328 sich nicht zu kaufen lohnt.
    Der naggische Chip selbst kostet mehr als ein Modul, mal abgesehen von den horrenden Versandkosten in DE.
    Die Teile liegen bei mir im Dutzend rum, man muss nur etwas länger warten, bis die Teile geliefert werden (3-5 Wochen).
    Just for Fun hab ich aber schon selbst Arduinos zusammengebastelt, nur weil mir das rumgefrickel und gelöte eigentlich mehr Spaß macht als
    die Programmierung des Controllers selbst ^^

  • Hi,

    Arduino+AutoIt.zip

    Kopiere den kompletten Ordner "SerialEventAutoIt" in deine Arduino-Dateien (bei mir unter Benutzer/Arduino/blablub )
    Enthalten sind zwei Arduino-Sketche. Egal welchen dieser Sketche du in der Arduino-IDE lädst, der andere wird mitgeladen. Auf dem ersten Reiter "SerialEventAutoIt" findest du die Deklaration von Variablen für den Eventmodus und innerhalb des setup() die Initialisierungen für den seriellen Anschluß und die Reservierung für den String des Eventmodus.
    pinMode() bezeichnet den port für das Testprogramm im loop(), welches einfach nur eine LED an port 13 an- und ausschaltet (blinken).
    Der Sketch für den Eventmodus ist auf Reiter2 in der IDE editierbar, auf neuen Reitern kann man einfach bspw. Funktionen "auslagern".)

    Wenn du jetzt den Sketch auf den Arduino überträgst und startest, fängt die fest auf dem Arduino installierte (Debug-)LED an port 13 an zu blinken.
    Nimm jetzt irgendein analoges Bauteil (Fotodiode mit Vorwiderstand oder einfach nur einen Poti) und schließe dieses zwischen dem ANALOGEN port A3 und 5V an.
    Wenn du willst, kannst du an den digitalen ports 3 und 8 jeweils eine LED mit Vorwiderstand anschließen.
    Den analogen Wert des Bauteils an port 3 werden wir nun mit AutoIt auslesen, OHNE DEN SKETCH AUF DEM ARDUINO ZU ÄNDERN!
    Dazu das AutoItScript "blink.au3" starten.
    In der Console wird nun der Wert des analogen ports angezeigt, testweise die Fotodiode abdecken oder den Trimpoti ändern sollte man also in der Console nachvollziehen können.
    Wenn du die LED´s angeschlossen hast, kannst du die an port 3 nun mit den Tasten 1 und 0 nun ein- und ausschalten, bzw. die LED an port 8 blinken lassen. Man beachte das analogwrite() auf einen digitalen port 8, das ist das feine am Arduino, man kann diese ports als PWM-Signal ansteuern (quasi-analog von 0-255 also 0% bis 100% Spannung).

    Mit der Leertaste kannst du den DEBUG-Modus ein/ausschalten, dann werden alle Ein/Ausgaben an/vom Arduino in der AutoIt-console protokolliert.
    Viel Spass beim Rumexperimentieren :thumbup:

    Man sollte bei der Verwendung von eigenen Sketchen darauf achten, nicht unbedingt mit dem Eventmodus auf dem Arduino "in den Clinch" zu gehen. Beim experimentieren kann idR nichts kaputt gehen, ob aber alle eigenen Sketche in Verbindung mit der seriellen Verbindung des Eventmodus funktionieren, garantiere ich nicht :D

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    4 Mal editiert, zuletzt von Andy (22. Januar 2016 um 20:20)

    • Offizieller Beitrag

    So, die ersten Experimente sind gemacht!
    Das LCD-Modul funktioniert und auch die Taster darauf lassen sich auslesen (ganz clever gemacht = 5 Taster über verschiedene Widerstände an einem AnalogPort, so spart man Porteingänge).
    Das klassische "Hello World" (LED blinken lassen) ist absolviert. :D
    Die 4-fach 7-Segmentanzeige (mit I2C-Backpack) habe ich auch zum laufen bekommen.
    Demnächst muss ich mich dann mit dem Datenlogger-Modul beschäftigen.

    Andy: Dein Beispiel konnte ich ebenfalls erfolgreich nachvollziehen. Dafür schonmal: Vielen Dank!

    Raupi : Solch große 7-Segment-Anzeigen könnte ich auch noch gebrauchen. Muss ich mal nach googeln oder kennst Du da eine Quelle (günstig)?

    Aber irgendwie brauche ich mehr Platz auf dem Schreibtisch. Ich muss wohl mal anbauen. :D

    Jedenfalls hat der Arduino meine Elektronik-Bastelleidenschaft wieder geweckt, nachdem diese einige Jahre im Tiefschlaf lag.
    Damals war das noch der C64, der die Ansteuerung der Elektronik übernehmen musste. Der Arduino ist dagegen schon ein paar Nummern kleiner. ^^

    • Offizieller Beitrag

    Eine Quelle habe ich leider nicht, aber suchen bei Ebay hilft meist.
    Hoffentlich bist du da anders veranlagt als ich und verfällst nicht in einen Kaufrausch ^^
    Mittlerweile habe ich 9 33er Schubladenboxen mit Elekronikkram voll.

  • Hi,

    das mit dem LED-Strip war eigentlich ne relativ einfache Sache, was ich nur zusätzlich gebraucht habe, waren 3 Transistoren die ich mir in nem Elektronikladen besorgt hatte und ein altes PC-Netzteil (wegen den konstanten 12V).

    Der Code ist auch nicht sehr anspruchsvoll, es sind einfach ein paar Schleifen, die die einzelnen Farben nach oben und wieder nach unten schrauben und das Ganze halt im Loop.

    Code:

    Die Verdrahtung hatte ich irgendwo im Internet gefunden, sieht man im Bild glaub ich gar nicht mal so gut :D

    LED-Strip.jpg


    €dit: Hier isses ganz gut dargestellt, allerdings hab ich die Widerstände weggelassen (mit hats glaube nicht funktioniert): http://www.jerome-bernard.com/blog/2013/01/1…-by-an-arduino/

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

    Einmal editiert, zuletzt von x0r (24. Januar 2016 um 21:08)

    • Offizieller Beitrag

    @xOr: Danke! Aber der Schaltplan ist fehlerhaft! Die 10K-Widerstände sind PullDown-Widerstände für das Gate. Beim unteren FET (rot) ist es noch richtig verdrahtet. Bei den oberen beiden FETs liegt der Widerstand am Drain-Anschluss (falsch).
    Als Schaltplan sollte das dann so aussehen:
    RGB LED Strip_Schaltplan.png

  • Ddas mag schon sein, mit Widerständen hat es nicht funktioniert und in der Konstellation läufts schon über 1,5 Jahre.

    So falsch kann es also gar nicht sein ;)

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

  • Ich habe hier 3 oder 4 so Steckbretter rumfliegen, glaube 2 kleine und 2 große. Habe im Moment nur 1 kleines in Benutzung, daher lass ichs erstmal so.

    Gelötet wird nix, das wäre ja sonst ein immer währender Aufwand an Kosten usw ;)

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

  • Viel "Kleinkram" mit nur einer Handvoll Ein/Ausgänge teste ich auf dem Arduino. Als "Prozessor" reicht aber meist ein Attiny45 oder 85. Der kostet nur knapp einen Euro und incl. aller anderen "Elektronik" passt das meist in eine Streichholzschachtel bzw. auf die Rückseite des 3er/4er-Batteriepacks.
    Den Attiny programmiere ich über den Arduino mit identischem Sketch s. HIER

    • Offizieller Beitrag

    Ich denke, dass ich das Steckbrett lediglich zum entwickeln der Projekte benutzen werde. Wenn fertig, dann wird gelötet.
    Jedenfalls bei Projekten, die ich auch längere Zeit nutzen möchte.

    Andy: Den Link zum Attiny habe ich mir mal abgespeichert. Das ist bestimmt für einige Projekte hilfreich und ausreichend. :)

    Das "Data-logging-shield" von "Deek-Robot" (ist ein Adafruit-Clone) bekomme ich nicht zum laufen. :(
    Zumindest den SD-Card-Teil nicht. Die RTC funktioniert, aber beim Zugriff auf die SD-Card gibt's nur ein: "initialization failed".
    Stundenlange Internetsuche und dort beschriebene "Problemlösungen" habe ich schon durch, aber das hilft hier alles nichts. Vielleicht ist das Shield hinüber!?
    Das ist schon etwas frustrierend! ?(

    • Offizieller Beitrag

    Mit welchem Dateisystem ist die Karte formatiert?
    Welche Libary benutzt du? Mit der Lib von Adafruit hat bei mir die Sd-Card überhaut nicht gefunzt.
    Ich hatte auch immer Probleme mit SD-Karten über 4 GB.
    Wenn das Shield überhaut nicht funzt, bestell dir einfach einen SD-Card Reader für den Arduino, hab für 2 Stück 1,70€ bezahlt.

    Und mal so als kleiner Tipp: Besorge dir ein paar Levelshifter, von den Teilen kann man nie genug rumfliegen haben.
    Sd-Card, Funkmodule, Esp8266 usw. mögen es den gar nicht, wenn man sie mit dem 5 Volt Level des Arduino ansteuert.
    Im umgekehrten Fall ist es kein Problem, der Arduino kommt auch mit 3,3 Volt Signalen zurecht.
    Kannst natürlich statt einem Levelshifter auch einen Spannungsteiler benutzen.

    • Offizieller Beitrag

    Die SD-Karten (32 GB und 4 GB) sind mit FAT32 formatiert. Habe sie auch schon mit dem SD-Formatter von Trendy formatiert.
    Mit der Original-Library hat es nicht funktioniert und mit der von Adafruit auch nicht. ChipSelect soll wie bei der Adafruit auf Pin10 sein, das sieht vom Layout auch danach aus.
    Das Shield hat einen 3.3V-Pegelwandler bereits Onboard.

    Gibt es unterschiedliche SD-Card-Reader? Also von der Ansteuerung her? Funktioniert bei denen dann die Original-Library?

    • Offizieller Beitrag

    Ich habe verschiedene Reader für SD und Micro-SD. Welche SD-Karten hast du genau? SD? MicroSD? MicroSDHC?