Jeg er igang med at lave noget automatik, således at jeg fra Windigipet kan styre åbning og lukning af porte og belysningen i remisen. Det er bygget med Servoer fra DIigikeijs, en arduino uno r4 minima, og et hjemmebygget interface.
Det virker for så vidt meget godt, men så snart jeg tilslutter det digitale signal fra centralen, kommer der lidt støj fra servoerne. Det virker som om impulserne til servoen bliver justeret en anelse, hver gang, der er et digitalt signal. Det er ikke så meget at portene står og blafrer, men blot en iriterende lyd fra servoerne.
Mit bud er at NMRADCC library og Servo Library generer hinanden. Er der andre der har prøvet noget lignende, og evt. har forslag til afhjælpning?
Jeg har vedhæftet kden, som den ser ud pt.
Jeg har prøvet med Arduino Yun og Nano, med samme resultat. Jeg har også prøvet med en arduino nano every, men der går det helt galt.
Med venlig hilsen
Henning
3-skinne med fokus på dansk Epoke III, men med kraftig tysk islæt, og enkelte fra andre epoker
CS3 (ikke plus) og CS2. En blanding af sporskiftedekoder og tilbagemelding fra flere producenter
Win-digpet 2021 premium. Intellibox 65000 til test og julebane
Attachment | Størrelse |
---|---|
remiseporte.txt | 4.29 kB |
okhansen
Indlæg: 242
Din Ardoino kører muligvis koden hurtigere end servoen kan følge med.
Prøv og se om denne kode gør en forskel:
unsigned long lastMoveTime = 0;
const int servoUpdateInterval = 20; // 20 ms mellem hver vinkelændring
void loop() {
Dcc.process();
if (FactoryDefaultCVIndex && Dcc.isSetCVReady()) {
FactoryDefaultCVIndex--;
Dcc.setCV(FactoryDefaultCVs[FactoryDefaultCVIndex].CV, FactoryDefaultCVs[FactoryDefaultCVIndex].Value);
}
if (millis() - lastMoveTime > servoUpdateInterval) {
lastMoveTime = millis();
for (int i = 0; i < 3; i++) {
if (Port[i].vinkel != Port[i].target) {
if (Port[i].vinkel < Port[i].target) Port[i].vinkel++;
if (Port[i].vinkel > Port[i].target) Port[i].vinkel--;
PortServo[i].writeMicroseconds(Port[i].vinkel);
Serial.print("Port ");
Serial.print(i + 1);
Serial.print(" vinkel ");
Serial.println(Port[i].vinkel);
}
}
}
}
H0 2 skinne
Dansk Epoke III - IV
Digital - Roco Z21
Rocrail via Digitrax PR3
Raspberry Pi med Rocrail
3D print og tegning
HenningS
Roskilde
Indlæg: 31
Tak for forslaget. Desværre har jeg allerede forsøgt det, uden at det ændrede noget.
Problemet er ikke at få portene til at bevæge sig korrekt. Men når portene ikke skal bevæge sig, står servoerene og bevæger sig en ganske lille smule. Det er så lidt, at det ikke kan ses, men det kan høres.
Lige nu er min teori, at de timers der bruges af servo librariet, forstyres hver gang en DCC pakke generer et interrupt. Så mit håb er at jeg kan finde en kombination af andre DCC og Servo libraries, der kan sameksistere
Med venlig hilsen
Henning
3-skinne med fokus på dansk Epoke III, men med kraftig tysk islæt, og enkelte fra andre epoker
CS3 (ikke plus) og CS2. En blanding af sporskiftedekoder og tilbagemelding fra flere producenter
Win-digpet 2021 premium. Intellibox 65000 til test og julebane
Lars Skjærlund
Rødovre
Webmaster
Indlæg: 4.225
Jeg tror, du har ret: Konflikter med timere og interrupts mellem forskellige libraries er desværre mere regelen end undtagelsen på den klassiske Arduino.
Selv har jeg også kæmpet med at få DCC lib til at fungere sammen med andre libs - f.eks. Wire, der bruges til I2C kommunikation. Det virker fint hver for sig, men lige så snart man kombinerer dem, begynder det at gå galt; og det er jo ikke så mærkeligt - på en platform med så få resourcer, som den klassike Arduino har, kræver det omhyggelig koordination mellem de forskellige libs, hvis det hele skal fungere. Og den koordination findes ikke i Arduino miljøet.
Det betyder ikke, at man ikke kan lave noget avanceret på en klassisk Arduino: Det kan man godt - se blot DCC-EX, der er et fornemt eksempel på, hvor meget man kan presse ud af Arduinoen, når man ved, hvad man gør - og vel at mærke har den fulde kontrol over alle libs. Men nemt er det ikke, hvis man er en "almindelig amatør".
For mit vedkommende har det betydet, at jeg mere eller mindre har droppet den klassiske Arduino til alt undtagen de mest basale opgaver: Her har den fortsat sin berettigelse, men ellers hælder jeg mere og mere til ESP32 som den nye standard.
Hvis du vil fortsætte med Arduino, var det måske en idé at bruge to? En til servostyring og en anden til DCC, og så lade dem snakke sammen: Med de priser, man i dag finder på en Nano klon, er det jo ikke et økonomisk problem, og så slipper man for alle samspilsproblemer.
MVH
Lars
HenningS
Roskilde
Indlæg: 31
Tak for tilbagemeldingen, selvom den ikke kommer med en hurtig løsning. Det havde jeg jo nok heller ikke forventet
Jeg har overvejet løsningen med 2 Arduinoer, men det bliver en lidt stor konstruktion. Men det er da en mulighed, specielt når jeg har en ledig Nano.
Jeg har også overvejet blot at slukke for strømmen til servoerne, når portene ikke bevæger sig, men de giver lidt uskønne bevægelser, når der slukkes og tændes.
Du skriver at du foretrækker esp32. her kommer jeg nok ud på kanten ef min viden. Vil jeg mon blot kunne bruge en Nano esp32, med det samme kode? Det ser ud som om begge biglioteker understøtter esp32. Eller skal jeg til at lære Python, og omskrive det hele. Eller skal jeg helt over i nogle andre produkter?
Med venlig hilsen
Henning
3-skinne med fokus på dansk Epoke III, men med kraftig tysk islæt, og enkelte fra andre epoker
CS3 (ikke plus) og CS2. En blanding af sporskiftedekoder og tilbagemelding fra flere producenter
Win-digpet 2021 premium. Intellibox 65000 til test og julebane
Lars Skjærlund
Rødovre
Webmaster
Indlæg: 4.225
Da' Henning.
Dine spørgsmål kræver næsten et omfattende svar - men lad mig prøve at fatte mig i korthed:
Den klassiske Arduino bygger på en Atmel processor, der er ret primitiv - den er af typen, du typisk vil finde i f.eks. en kaffemaskine. Der er også nem at gå til for en begynder, og det er jo utroligt, hvad det har ført med sig.
Arduino er imidlertid også en organisation, der foruden hardware platformen også står bag den nødvendige softare - både til computerne selv og til udvikling af programmer. Det sidste kendt som Arduino IDEen. De tjener også penge på at sælge "ægte" Arduinoer, hvilket jo er en nødvendighed for at holde projektet kørende.
Det ændrer ikke ved, at det hele er Open Source/Open Hardware, så alle kan kopiere og bruge det, som de vil.
Og det er der mange, der har gjort - somme tider til halvstor fortrydelse fra folkene bag det originale koncept.
Så springer vi til noget helt andet - men vender tilbage til ovenstående til sidst.
ESP32 er en microcontroller udviklet af det kinesiske firma Espressif. Den har i sit udgangspunkt intet med Arduino at gøre: Her er vi ovre i en helt anden boldgade, en ESP32 er en ret kraftig computer, der kan køre store programmer, og den har både WiFi og Bluetooth indbygget som standard. Den aller nyeste version er så kraftig, at den kan trække en fuld HD skærm (1080p) og man kan spille computerspil på den. En rigtig vildbasse sammenlignet med en processor til en kaffemaskine.
Mange kender den fra et developer board som dette:
og det ligner jo meget godt en Arduino Nano. Men det er på mange måder en forkert opfattelse: EPS32eren er ikke det, der er vist på billeder - den er kun den lille printplade under den blanke dåse - resten er noget, en anden virksomhed har lavet. Det sorte, der stikker ud i toppen af den blanke dåse, er antennen til WiFi og Bluetooth. Men det er den slags boards, jeg bruger i stedet for Arduino Nano: I Europa koster de typisk 75-150 kr. afhængigt af variant, men køber man dem i Kina, kan de fåes ned itl 35 kr. Det er altså det fire dobbelte af en Arduino Nano klon (ligeledes fra Kina), men stadigt ikke ret mange penge.
Jeg har lige opgraderet en Digikejs DR5000 til en YaMoRC YD9401. Det gør man ved at sætte en ny CPU i og opgradere softwaren - og jo, den nye CPU er en ESP32. Endda en af de lidt mindre kraftige - men alligevel rigeligt til at trække sådan en controller med indbygget webserver og WiFi.
Oprindeligt skulle man programmere en ESP32 med deres eget - meget omfattende - udviklingsmiljø kaldet ESP-IDF. Det kan man fortsat gøre, og det er nødvendigt, hvis man vil udnytte alle de nyeste muligheder i de forskellige versioner. I og for sig ganske normalt - og uden forbindelse til Arduino som sådan.
Men - så kommer det store men: Nogen har fundet på at pille ved hele udviklingsmiljøet til Arduino, så det også kan bruges til ESP32. Den kan altså køre de samme programmer og håndteres på samme måde, og man kan bruge Arduinos IDE til at lave sine ESP32 programmer. Det er der rigtigt mange, der gør - og så bliver den pludseligt et utrolig interessant alternativ til Arduino. Med monster kræfter.
Det er blevet så udbredt, at jeg ofte hører folk omtale en ESP32 som en Arduino: Det er helt forkert efter min opfattelse, men jeg har netop opdaget, at der på den anden side er kommet en ny Arduino med en ESP32 om bord - den må være "ægte". Der er også en Arduino med en Raspberry Pi chip om bord, så grænserne er efterhånden ganske flydende.
Du kan altså uden de store armbevægelser skifte din klassiske Nano ud med et ESP32 board som vist ovenfor, og det burde være muligt at få dit program til at køre på den - og det vil måske løse dine problemer. Det er ikke videre svært at komme i gang med.
Men man skal huske, at ESP32 er meget, meget mere: Du kan ikke bruge Arduino konceptet til at vise grafik f.eks. - som på denne fantastiske dims M5Dial, der også er en ESP32:
Jeg har købt nogle stykker af de sidste, og roder med at få den til at kunne styre en drejeskive. Jeg skal dog først lære at få ordentligt styr på grafikken.
MVH
Lars
HenningS
Roskilde
Indlæg: 31
Tak for svaret. Det gav mig en god fornemelse af hvad esp32 er for noget, og hvad vej jeg skal gå for at komme videre.
Det kunne være interessant at se om mine udfordringer blev løst, ved blot at bruge arduinos nano esp32, men det vil dog kræve en del redesign. Nano esp32 boardet arbejder med 3,3 V og mine servoer kræver 5 v. Det kan selfølgelig løses, men så er vi vist der, hvor det giver bedre mening, at bruge en ESU switchpilot servo.
Så må jeg finde et andet projekt, som jeg kan bruge til at lære mere om esp32
Med venlig hilsen
Henning
3-skinne med fokus på dansk Epoke III, men med kraftig tysk islæt, og enkelte fra andre epoker
CS3 (ikke plus) og CS2. En blanding af sporskiftedekoder og tilbagemelding fra flere producenter
Win-digpet 2021 premium. Intellibox 65000 til test og julebane
Lars Skjærlund
Rødovre
Webmaster
Indlæg: 4.225
Jeg kom i tanke om, at emnet tidligere har været drøftet her på Sporskiftet: Servo kontroller til afkobling ?
Lidt nede i tråden kan du finde et link til Model Railroader Hobbyist med en i dag klassisk løsning på denne opgave.
Og så en lille smule mere anprisning af ESP32: Det er ret nemt at få den til at håndtere OTA opgradering - hvor OTA står for "Over The Air". I praksis betyder det, at man med en WiFi forbindelse kan opdatere programmet i ESP32eren - uden at skulle bruge et USB kabel. Det finder jeg meget attraktivt: Blot tanken om at have 50-100 Arduinoer siddende under sit anlæg og skulle forbinde hver og en med et USB kabel til en computer, hvis man vil opdatere dem - her er det noget mere behageligt at kunne gøre det OTA fra sin skrivebordsstol uden de store dikkedarer.
MVH
Lars