Wer wie ich gerne und viel bastelt und dazu auch einen Arduino verwenden möchte, sich aber mit dem Programmieren schwer tut. Für den ist Ardublock eine echte alternative zu der Arduino IDE. Nicht nur für Einsteiger oder Kinder, für 90% meiner kleinen Projekte reicht mir Ardublock voll und ganz aus. Meistens kommt Ardublock an seine Grenzen wenn Module verwendet werden die es in der Ardublock Oberfläche nicht gibt oder es zu komplex wird.
Versionen von Ardublock
Es gib viele verschiedene Versionen von Ardublock. Die Standard Version von der Ardublock Homepage die über den download Button heruntergeladen werden kann, ist sehr mager in den Blöcken. Es gibt viele wichtige Funktionen (Blöcke) wie "delay millis" oder "only every" nicht. Mit diesem Programm lassen sich ganz einfache Projekte verwirklichen. Ein paar LEDs zum blinken bringen eine Servo Motor drehen lassen aber viel mehr geht dann auch nicht.
Die SCOOP Beta Version von der Ardublock Homepage muss man erst einmal ein bisschen suchen (link ist unten in der Tabelle), bis man sie in den Tiefen der Ardublock Homepage findet. Dann hat man aber eine große und gute Auswahl in Blöcken mit allen notwendigen Funktionen. Einziger Nachteil, die Version ist schon etwas älter und sehr viele Treiber müssen Manuel über die Arduino IDE installiert werden.
letsgoING Update 11.2019:
Bis vor kurzem habe ich von der Ardublock Version von letsgoING abgeraten, da diese nicht mehr weiterentwickelt wird. Das ist nun anderes, es gibt nun die letsgoING2 Ardublock Version, In dieser gib es zwar nach wie vor keine Display usw. dafür läuft sie super stabil und es gibt viele tolle Blöcke wie neopixel oder, Servo- und Schrittmotoren. Also ab heute wieder sehr zu empfehlen.
Update 01.2020
Die neue Version von (duinoedu) hat in der "experimentalen" Version wieder alle Versionen von Ardublock. Mit der Version 0.70.04 gib es auch neue Blöcke, es gibt nun Shild Blöcke für DC Motoren und Servo Motoren. Diese Version ist was Blöcke angeht eine der "mächtigsten" überhaupt. So langsam aber sicher lässt sich mit ardublock mehr machen als nur ein paar Bastelideen umsetzten.
Sehr gelungen ist auch die Version von "arduino basics". Was mir hier sehr gut gefällt ist die Oberfläche die schöne, klare Farben hat und auf das wesentliche beschränkt ist. Zudem sind die Blöcke so eindeutig bezeichnet dass es fast unmöglich ist etwas falsch zu machen. Es gibt alle wichtigen Blöcke (wichtig ist auf "Experten" umzuschalten), mit dieser Version macht es tatsächlich sehr viel Spaß zu programmieren. Update 12.2020, es gibt ein LCD Block für ein "LCD Display 1602", was diese Version abrundet. Eine wirklich tolle Version vor allem für Schulen und Kinder die alleine etwas machen wollen, da die Blöcke wirklich selbsterklärend sind.
Unterschiedliche Versionen verwenden unterschiedliche Blöcke. Meistens unterscheidet sich nur die Farbe, die Funktionen sind gleich. Manchmal sind auch die Texte verschieden. Wie am Bespiel der Variablen Blöcke. Es kann deshalb vorkommen dass Blöcke die ihr hier auf der Seite seht an einer anderen Stelle (andere Farbe) in eurer Ardublock Version zu finden sind.
Welche Version ihr nun verwendet liegt an eurem Projekt das ihr vorhabt. Grenzen des Programms liegen vor allem in der Hardware. Es gibt Blöcke zu OLED Displays oder Bluetooth Blöcke, die ich leider selbst nach etlichen Versuchen nicht auf den Arduino bekommen habe. Es gibt dazu auch wenige Tutorials weshalb man einfach auch mal probieren und versuchen muss.
Version |
Download |
FH Reutlingen - letsgoING Vers. 1 |
https://github.com/letsgoING/ArduBlock |
FH Reutlingen - letsgoING Vers. 2 | |
FH Reutlingen - letsgoING neueste Version |
https://gitlab.reutlingen-university.de/letsgoing |
DuinoEDU - Standard und Experimental |
http://www.duinoedu.com/telecharger.html |
Arduino Basics |
http://arduino-basics.com/ardublock/ |
Arduino MIT - offizielle Version, viele andere Versionen |
http://blog.ardublock.com/ |
Tony Callear - Master und Slim (Scoop bzw. Task) Blöcke | https://github.com/taweili/ardublock/releases/tag/beta-20171028 |
Installation von Ardublock Stand 03.2019
Um Ardublock unter Arduino nutzen zu können muss die Version 1.0.6 (für letsgoING2, Version 1.8.9) installiert sein. Ist Arduino auf dem PC installiert, muss die ardublock-all.jar Datei in einen Ordner kopiert werden. Wichtig dabei ist, dass groß und Kleinschreibung der Ordner richtig ist. Dabei muss "meincomputername" eben durch den Namen von eurem Computer ersetzte werden. Je nach System kann der Pfad auch unterschiedlich sein. C:\Users\meincomputername\Documents\Arduino\tools\ArduBlockTool\tool (in den letzen Ordner "tool" dann die alljar Datei). Hier noch zwei Beispiele wie der Pfad auch lauten kann.
Hier geht es zu einem kurzen Video von mir, in dem ich die Installation erkläre, einfach auf das Bild klicken.
Nun sollte Ardublock in der Arduino IDE unter Werkzeuge zu finden sein.
Die Oberfäche
Bei Ardublock wird aus verschiedenen Blöcken ausgewählt und dann mit der Maus in die Programmfläche gezogen. Passende Blöcke werden automatisch mi einem (klick Geräusch) zusammengefügt wenn sie nahe genug beieinander sind. So entsteht Block für Block eine kleine Software für den Arduino. Vor dem Hochladen muss in der Arduino IDE noch der Arduino Typ und der Port an dem der Arduino angeschlossen ist ausgewählt werden.
Einzelne Blöcke oder Blockgruppen können mit einem Rechtsklick auch kopiert werden.
Nach dem klicken auf hochladen, erscheint der dazugehörige Code in der Arduino IDE. Kommentare werden nicht in der Arduino IDE angezeigt. Trotzdem sollte mit Kommentaren nicht gespart werden. Denn so weis man später immer welche Farbe eine LED hat oder welche Taster wo sitzt. Mit einem Rechtsklick kann man Kommentare einfügen.
Beginn der grafischen Programmierung
Es gibt zwei unterschiedliche Blöcke mit denen unsere grafische Programmierung beginnt. "Wiederhole fortlaufend" oder "Programm". Einer dieser beiden Blöcke muss gesetzt sein, sonst funktioniert das Programm nicht. Alle weiteren Blöcke (außer den interrup und Unterprogramm) müssen nun die geöffnete Klammern gesetzt werden.
Beide Blöcke sind identisch nur das der „Programm“ Block neben dem „loop“ noch einen „setup“ Teil besitzt. Der setup Teil wird nur einmal nach dem anlegen der Spannung oder noch einem Reset ausgeführt. Hier werden Variablen, wie Zeiten hinterlegt oder die input pullup Widerstände aktiviert. Es können aber auch LEDs an oder ausgeschaltet werden. Zum Beispiel bei einer Ampel Steuerung. Hier werden alle Ampeln auf rot geschaltet bevor das Programm beginnt.
Im „ loop" oder "mache“ Block findet nun das eigentliche Programm statt. Hier gibt es neben den Ein-und Ausgängen auch so genannte Bedingungen die erfüllt oder nicht erfüllt werden. Ohne Bedingungen geht es beim Arduino nicht. Erst wenn zum Bespiel der Schalter gedrückt wurde, geht das Licht an. Erst wenn die Bedienungen "Schalter gedrückt" erfüllt wird, geht das Licht an.
Die Bedingung ist immer im „teste“ Teil, dem dann ein auszuführende Block folgt „viereckig“ direkt darunter.
Der „loop“ bzw. der „mache“ Block wird so lange wiederholt bis der Arduino ausgeschaltet wird. Dabei wird das Programm immer von "oben nach unten" ausgeführt, "unten" angekommen beginnt das Programm wieder von "Oben".
Mit dem „falls“ Block kann so eine Bedienung (hier ein digitaler Eingang" abgefragt werden und „falls“ diese wahr ist, dann wird das Programm im nachfolgenden Block ausgeführt. Danach geht es im Programm direkt weiter. Wenn die Bedienungen nicht erfüllt ist, wird der Block einfach übersprungen.
Der „falls sonst“ Block ist eine entweder/oder Entscheidung. Dieser Block wird auf jeden Fall ausgeführt und kann nicht übersprungen werden. Ist die Bedingung erfüllt, wird der erste Block ausgeführt, ist sie nicht erfüllt wird der zweite Block ausgeführt. Danach geht es im Programm weiter.
Beim „solange“ Block ist es etwas anderes. Das Programm im folgenden Block "Befehl" wird so lange ausgeführt wie die Bedingung erfüllt ist und erst danach geht es im Programm weiter.
Das Programm im „wiederhole“ und „wiederhole (variable)“ Block, wird so oft wiederholt wie angeben. So entfällt das Blöcke setzen für das gleiche Programm. In der „variable“ kann zudem der Name der Variablen frei bestimmt werden. So kann zum Bespiel eine LED fünf mal blinken ohne das die Blöcke fünf mal gesetzt werden müssen.
Wartezeit "delay" im ardublock Programm
Sehr viele Ressourcen des Arduino werden durch "warte Millisekunden Blöcke" verschwendet. Soll eine LED im Sekundentakt blinken kann das mit zwei "warte Millisekunden" Blöcken recht einfach gemacht werden. Die LED geht nun im Sekundentakt aus und an.
Allerdings kann während der „warte Millisekunden“ Blöcke, der Arduino aber nichts anders machen außer Warten. Es können weder Eingänge, wie Taster oder Sensoren abgefragt werden, noch andere Ausgänge an oder ausgeschaltet werden. Damit ist das Programm faktisch nicht nutzbar in einer warte Millisekunden (delay) Schleife. Ausnahme bilden die beiden interrupt Pins, die immer und zu jeder Zeit angesprochen werden können.
Im Tutorial über die "only every millis" Zeiten gibt es mehr über das "nicht verwenden" von delay Blöcken.
Digitale Eingänge am Arduino mit Ardublock auslesen
Werden die Digitale Pins des Arduino als Eingänge verwendet, gibt es zwei Schaltzustände. Anliegende Spannung (VCC, 5 oder 3,3 Volt DC) oder nicht anliegende Spannung (GND). Damit die sehr empfindlichen Eingänge auch das "richtige" messen. Muss immer eine eindeutige Spannung anliegen. Wäre einfach nur ein Kabel angeschlossen an dem nicht VCC oder GND anliegt würde der PIN die ganze Zeit hin und her schalten. Damit das nicht passiert benötigen wir einen "pulldown" oder einen "pullup" Widerstand. Auf dem Arduino sind die "pullup" Widerstände bereits verbaut und sie müssen nur noch im Programm "aktiviert" werden. Dabei ist es egal was als Eingang verwendet wird. Es können zum Beispiel Taster, Schalter, Reedkontakte, Endschalter, Schlüsselschalter, potentialfrei "Relais"kontakte oder ähnliches verwendet werden.
Digitale Eingänge mit externem pulldown Widerstand
Mit Ardublock können wir die Tasterstellung nun auslesen. Ob er gedrückt ist oder nicht. Nach dem hochlanden, kann im Serial Monitor abgelesenen werden, ob der Taster gedrückt wurde oder nicht.
Digitale Eingänge mit internem pullup
Vorteil dieser Schaltung ist, dass keine Widerstände verbaut werden müssen. Ein kleiner nachteile ist dass man in Ardublock immer darauf achten muss dass die "pullup" Widerstände eingeschaltet sind und dass ein "nicht" Block beim abfragen des Taster hinter die Bedingung gesetzt wird.
Der nicht Block
Das Ardublock Programm zum auslesen des Tasters ist genau gleich. Nur dass im Setup Teil der "inputt pullup" Block eingefügt und der Pin des Eingangs angegeben werden muss. Zudem muss vor den "digitalRead" Block noch der "nicht" Block eingefügt werden. Da durch den internen "pullup" Widerstand der Eingang bei nicht gedrücktem Taster immer HIGH ist. Dafür spart man sich die Widerstände auf dem Breadbord.
Die analogen Eingänge mit Ardublock
Mit den analogen Eingängen kann anders wie bei den digitalen Eingängen nicht nur zwei unterschiedliche Signal "HIGH" und "LOW" sonder eine anliegende Spannung ausgelesen werden. Jeder Widerstand hat eine Änderung der Spannung zur Folge. Ändert sich die Temperatur an einem Temperaturfühler oder ändert sich das einfallende Licht an einem Lichtsensor (zum Beispiel einem LDR) ändert sich auch die Spannung die durch das Bauteil fließt. Diese Spannungsänderung kann der Arduino nun an den Analogen Eingängen messen und uns als einen Zahlenwert von 0 bis 1023 ausgeben. Mit diesen Werten können wir nun im Programm arbeiten.
Die analogen Eingänge werden immer mit einem "analog Read" ausgelesen. In den meisten Fällen benötigen wir hier eine Variable. In dieser Variablen ist der Wert dann gespeichert, wird mit jedem "Durchlauf´" des Programms erneut abgefragt und in der Variablem aktualisiert. Bitte darauf achten dass ein "warte" Block, das auslesen für die eingetragene Zeit verhindert. In vielen fällen benötigen wir im Programm keinen Wert von 0 bis 1023 sonder einen kleineren Wert. Zum Bespiel um eine an eine LED zu dimmen (0-255) oder einen Servo (0-180) anzusteuern. Dann wird der "einschränken" und "zuordnen" Block benötigt.
Der Block "einschränken" sorgt einfach dafür dass kein Wert größer bzw. kleiner als der eingestellt Wert "ausgeben" wird. Der Wert 0-1023 wird als einfach abgeschnitten. Aus 0-1023 wir dann einfach 0-255, die Werte über 255 also 256-1023, gelten dann als Wert 255. Möchte man eine LED mit einem Poti regeln wäre nach 1/3 der Umdrehung also schon die volle Helligkeit erreicht.
Bei Block"zuordnen" wird der Wert nicht einfach abgeschnitten sondern im Verhältnis umgerechnet. Wenn ich wie im Bild also von 0-1023 einen Wert 100 auslesen, dann rechnet der Arduino diesen Wert so um, dass er im Verhältnis zu dem Eingang steht. So sind bei einem Poti 30% auch 30% auch wenn ich im Eingang 0-1023 und im Ausgang 0-255 habe, was in den meisten Fällen sicher sinnvoller ist.
Beispiel: Zeitmessung mit zwei Lasern und zwei LDR über Analog Input.
Messung mit einem Widerstand gegen GND
Das Bauteil, hier ein LDR bekommt 5 Volt Spannung und wird mit einem "pulldown" Widerstand gegen GND geschaltet. Der analoge Eingang kann so auch mit Taster und Widerständen beschaltet werden, um einem festen Wert auszulesen, So können die analogen Eingänge auch für Taster oder ähnliches verwendet werden.
Messung mit VCC, GND und OUT
Die meisten Potentiometer kurz (Poti) haben 3 Anschlüssen VCC-OUT-GND, damit einfällt der Widerstand gegen GND, da die Messung selber zwischen VCC und GND stattfindet. Die Messung in Ardublock ändert sich nicht, nur der Anschluss ist etwas anders. Zudem gibt es auch weitere Bauteile wie Temperatursensoren die 3 Anschlüsse haben.
Digitaler Ausgang mit Ardublock
Digitaler Ausgang bedeutet eigentlich nur dass an einem PIN 5 Volt anliegen oder eben keine Spannung. Dabei bedeutet "HIGH" 5 Volt liegen an und "LOW" bedeutet keine Spannung liegt an.
Mit diesen 5 Volt können jetzt die unterschiedlichen "Bauteile" geschaltet werden. LEDs, Relais, Motoren oder mechanische Summer (ich habe in Firtzing leider nur diesen Piezo gefunden) und vieles mehr. Kommt das Programm an ein "HIGH" wird eingeschaltet, ist das Programm an einem "LOW" wird ausgeschaltet.
Dabei ist aber immer auf die maximale Stromaufnahme der Bauteile zu achten. Sollte diese überschritten werden, bracht ihr einen neuen Arduino :-(..... Deshalb gilt für den Arduino UNO und NANO folgende Werte, die unbedingt eingehalten werden müssen.
- An der Strom an einem PIN darf 40.0 mA nicht übersteigen.
- An alle PINS zusammen, also der gesammte Strom darf 200.0 mA nicht übersteigen.
Wer große Lasten wie einen Motor anschließen möchte der muss mit Transistoren oder noch besser mit fertigen Mosfet shield arbeiten. Hier entfällt die aufwendige Verdrahtung mit Dioden und Widerständen.
Hier die Verdrahtung mit einem fertigen Mosfet shield. Es muss natürlich kein Motor oder ähnliches angeschlossen werden, es können auch LED stripes oder ähnliches gebaut werden. In Fritzing habe ich leider kein passende shield gefunden, deshalb habe ich nur die Klemmen gezeichnet.
Analoger Ausgang PWM mit Ardublock
Analoger Ausgang heißt "manchmal" leider nicht das an diesem Ausgang 0-5 Volt ausgegeben werden können. Analoger Ausgang heißt hier nur dass ein PWM (pulsweitenmodulation) PIN vorhanden ist. Kurz gesagt dieser PIN wird so oft schnell hintereinander aus- und eingeschaltet dass das Menschliche Auge zum Beispiel eine LED als heller oder dunkler empfindet. Zudem kann das "pullsen" diese Signal von einigen Bauteilen zum Beispiel einem Servomotor "ausgelesen" und "umgesetzte" werden.
Es ist nun möglich eine LED ganz simpel in der Helligkeit zu ändern (dimmen). Dazu muss nur das PWM Signal von "0" = ganz dunkel, nach "255"= ganz hell gestellt werden.
Die LED kann aber auch einfach an und aus geschaltet werden, wie im ersten Bild. Wird der PWM Ausgang aber auf 80 oder 60 begrenzt, entfällt der Vorwiderstand weil die maximale Helligkeit schon früher erreicht wird. Dies sollte aber nur gemacht werden wenn man sich sicher ist, dass nicht ausersehen doch 255 Pulse auf den PWM PIN kommen. Sonst ist die LED auf jeden Fall und der Arduino ggf. hinüber.
Der Servo Motor in Ardublock
Der Servo Motor kann von 0-180 Grad stufenlos gefahren werden, zudem benötigt er kein extra Getriebe und hat viele Anbauplatten. Der Block „Servo verbinden“ muss nur gesetzt werden, wenn vorher der Block „servo trennen“ verwendet wurde. Sonst ist der Servo Motor automatisch durch das Programm verbunden. Der Servomotor selber bekommt Spannung von VCC und GND und die Signalleitung muss an einen PWM angeschlossen werden. Beim Anschluss vieler oder sehr großer Servos, muss die Spannungsversorgung über ein Netzteil realisiert werden.
Nachdem der Servo das Signal bekommen hat in bestimmte Position zu fahren, muss dem Servo auch die Zeit gegeben werden diese Position zu erreichen. Wird der Servo zu früh getrennt oder zu früh in eine andere Position gefahren, kann es vorkommen dass die Position nicht erreicht wird. Das trennen des Servomotors macht vor allem dann Sinn wenn der Servo nach dem erreichen seiner Position lange nicht bewegte werden muss. So spart man Energie und ein "brummen" des Servos wird auch verhindert.
Hier gleich ein Beispiel wie der Servo Motor mit einem Poti angesteuert werden kann. Als ersten wird im "setup" der Servo auf 0 Grad gefahren. Der Wert der vom Poti am analogen Eingang A0 wird ausgelesen. Damit der Servo auch seine 180 Grad nach der Poti Stellung ansteuern kann. Wird das Signal vom Poti von 0-1023 auf die 0-180 Grad vom Servomotor umgerechnet und in der Variablen gespeichert.Der Servo Block liest die Variable Servo aus und gibt sie in den PWM PIN 5 weiter. Der Servo fährt in die gewünschte Stellung.
Töne mit Ardublock
Für die Ausgabe von Tönen gibt es zwei Blöcke in Ardublock. An beiden Blöcke "Ton" wird einer der PWM PINs gewählt und danach die Frequenz eingestellt. Einziger Unterschied, beim linken Block muss der Ton selber wieder ausgeschaltet werden. Beim rechten Block kann zudem die Zeit eingestellt werden, die der Ton dauern soll.
In den meisten Fällen ist ein Piezo-Summer die besten Wahl, da er nicht erst verstärkt werden muss und die Frequenzen gut und deutlich wiedergegeben werden. Es können aber auch kleine Lautsprecher angeschlossen werden. Ggf. hilft es einen kleinen Kondensator mit einzubauen. Für größere Lautsprecher muss aber ein Verstärker Schaltung her.