Heute habe ich ein wenig herum experimentiert und drei Projekte angefasst, die ich in den kommenden Tagen in diesem Beitrag vertiefen möchte.
Arduino Mega 2560 +ESP8266 Wifi Kombi mit 16-Kanal Servomodul
Es ist geschafft. Ich habe mich wirklich etwas schwer getan zu überblicken, wie ich mit meinem seltsamen Arduina Mega2560 kompatiblem Mega2560 +ESP8266 Kombiboard und dem PCA9685 16-Kanal Servo Modul mittel C/MRI und JMRI meine Weichensteuerung realisiere. Aber dank der hilfreichen Tutorial von „Motorhomer“ ist es mir dann doch gelungen. Um so ernüchternder ist es zudem, wenn man realisiert, das man Tagelang über einen eigenen Flüchtigkeitsfehler gebrütet hat. Peinlich, peinlich. Aber es hat ja niemand gesehen…
Die Einrichtung von JMRI und C/MRI ist auf YouTube bereits ausreichend dokumentuert. Daher hier nur mein Code, für den Fall, dass daran Interesse besteht.
#include <Wire.h> #include <Adafruit_PWMServoDriver.h> #include <CMRI.h> #include <Auto485.h>include #define CMRI_ADDR 1 #define DE_PIN 2 int Tbit[8]; Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(); //setup the board address 0 Auto485 bus(DE_PIN); // Arduino pin 2 -> MAX485 DE and RE pins CMRI cmri(CMRI_ADDR, 24, 48, bus); void setup() { Serial.begin(9600); bus.begin(9600); pwm.begin(); pwm.setPWMFreq(60); // This is the maximum PWM frequency //pwm.setPWM(0, 0, 100); //pwm.setPWM(1, 0, 200); } void loop(){ cmri.process(); Tbit[0] = (cmri.get_bit(0)); //T01 Tbit[1] = (cmri.get_bit(1)); //T02 Tbit[2] = (cmri.get_bit(2)); //T03 Tbit[3] = (cmri.get_bit(3)); //T04 Tbit[4] = (cmri.get_bit(4)); //T05 Tbit[5] = (cmri.get_bit(5)); //T06 Tbit[6] = (cmri.get_bit(6)); //T07 Tbit[7] = (cmri.get_bit(7)); //T08 Tbit[8] = (cmri.get_bit(8)); //T09 Tbit[9] = (cmri.get_bit(9)); //T10 Tbit[10] = (cmri.get_bit(10)); //T11 Tbit[11] = (cmri.get_bit(11)); //T12 Tbit[12] = (cmri.get_bit(12)); //T13 Tbit[13] = (cmri.get_bit(13)); //T14 Tbit[14] = (cmri.get_bit(14)); //T15 Tbit[15] = (cmri.get_bit(15)); //T16 if (Tbit[0] == 1){ pwm.setPWM(0, 0, 100); Serial.println("T01: Abzweig"); } if (Tbit[0] == 0){ pwm.setPWM(0, 0, 200); Serial.println("T01: Geradeaus"); } if (Tbit[1] == 1){ pwm.setPWM(1, 0, 100); Serial.println("T02: Abzweig"); } if (Tbit[1] == 0){ pwm.setPWM(1, 0, 200); Serial.println("T02: Geradeaus"); } if (Tbit[2] == 1){ pwm.setPWM(2, 0, 100); Serial.println("T03: Abzweig"); } if (Tbit[2] == 0){ pwm.setPWM(2, 0, 200); Serial.println("T03: Geradeaus"); } if (Tbit[3] == 1){ pwm.setPWM(3, 0, 100); Serial.println("T04: Abzweig"); } if (Tbit[3] == 0){ pwm.setPWM(3, 0, 200); Serial.println("T04: Geradeaus"); } if (Tbit[4] == 1){ pwm.setPWM(4, 0, 105); Serial.println("T05: Abzweig"); } if (Tbit[4] == 0){ pwm.setPWM(4, 0, 200); Serial.println("T05: Geradeaus"); } if (Tbit[5] == 1){ pwm.setPWM(5, 0, 105); Serial.println("T06: Abzweig"); } if (Tbit[5] == 0){ pwm.setPWM(5, 0, 200); Serial.println("T06: Geradeaus"); } if (Tbit[6] == 1){ pwm.setPWM(6, 0, 105); Serial.println("T07: Abzweig"); } if (Tbit[6] == 0){ pwm.setPWM(6, 0, 200); Serial.println("T07: Geradeaus"); } if (Tbit[7] == 1){ pwm.setPWM(7, 0, 105); Serial.println("T08: Abzweig"); } if (Tbit[7] == 0){ pwm.setPWM(7, 0, 200); Serial.println("T08: Geradeaus"); } if (Tbit[8] == 1){ pwm.setPWM(8, 0, 150); Serial.println("T09: Abzweig"); } if (Tbit[8] == 0){ pwm.setPWM(8, 0, 250); Serial.println("T09: Geradeaus"); } if (Tbit[9] == 1){ pwm.setPWM(9, 0, 150); Serial.println("T10: Abzweig"); } if (Tbit[9] == 0){ pwm.setPWM(9, 0, 250); Serial.println("T10: Geradeaus"); } if (Tbit[10] == 1){ pwm.setPWM(10, 0, 150); Serial.println("T11: Abzweig"); } if (Tbit[10] == 0){ pwm.setPWM(10, 0, 250); Serial.println("T11: Geradeaus"); } if (Tbit[11] == 1){ pwm.setPWM(11, 0, 150); Serial.println("T12: Abzweig"); } if (Tbit[11] == 0){ pwm.setPWM(11, 0, 250); Serial.println("T12: Geradeaus"); } if (Tbit[12] == 1){ pwm.setPWM(12, 0, 150); Serial.println("T13: Abzweig"); } if (Tbit[12] == 0){ pwm.setPWM(12, 0, 250); Serial.println("T13: Geradeaus"); } if (Tbit[13] == 1){ pwm.setPWM(13, 0, 150); Serial.println("T14: Abzweig"); } if (Tbit[13] == 0){ pwm.setPWM(13, 0, 250); Serial.println("T14: Geradeaus"); } if (Tbit[14] == 1){ pwm.setPWM(14, 0, 150); Serial.println("T15: Abzweig"); } if (Tbit[14] == 0){ pwm.setPWM(14, 0, 250); Serial.println("T15: Geradeaus"); } if (Tbit[15] == 1){ pwm.setPWM(15, 0, 150); Serial.println("T16: Abzweig"); } if (Tbit[15] == 0){ pwm.setPWM(15, 0, 250); Serial.println("T16: Geradeaus"); } }
Die Zeilen, die „Serial.println(„T02: Geradeaus„);“ enthalten sind unnötig.
Nachtrag. Irgendwie war mir der Mega doch zu schade für eine Servoansteuerung. Ich habe das Projekt nun mit einem Arduino Nano realisiert. Der Mega hat einen ESP8266 an Board und so viel Speicher, dass er zu höherem gefertigt wurde. Irgendein Projekt bei dem mir das WiFi Modul gelegen kommt findet sich bestimmt. Evtl. Baue ich damit einen drahtlosen DCC++ Handheld-Regler mit Touchscreen oder so.
Arduino UNO (AZ-Delivery UNO) mit Sensor Shield und IR-ProxiSensoren
Dieses Projekt wurde letztlich mit einem Arduino Nano realisiert. Es stellte sich als trivial heraus. Daher erwähne ich es nur der Vollständigkeit halber. Der Nano ist im Gründe ein UNO nur eben viel kleiner. Klasse Teil. Werde ich in Zukunft öfter benutzen.