Back to the Future... DeLorean

Al enige tijd ben ik bezig met het bouwen van de auto uit de film 'Back to the Future' de DeLorean. Uitgegeven, in Nederland ongeveer een jaar geleden door Eaglemoss. In andere delen van de wereld al ruim daarvoor. De auto is schaal 1/8 en dat is best groot, 56cm(L)x23cm(B). Veel onderdelen zijn van metaal. Er zitten ook veel lichten in en aan de auto.

De standaard lichten waren voor een aantal mensen niet genoeg. Die gingen aan de slag met Arduino, compleet met afstandsbediening. Dat ben ik ook aan het doen en het gaat behoorlijk goed. Ondanks dat ik niet bekend ben met Arduino is het mij toch gelukt om de lichten 'aan-en-uit' te kunnen doen.

De Arduino-sketch die ik gebruik is geschreven door een jongen uit Japan. De sketch is vrij lang en zit als attachment bij deze topic. Aan de Mega2560 zit ook een klein Nano board voor de Flux Capacitor en die 'praten' ook een beetje met elkaar volgens mij. Nu ben ik voorzichtig bezig om links en rechts wat toe te voegen. En dat lukt ook wel. Maar wat ik bijvoorbeeld lastig vindt is het laten loop-en van bijvoorbeeld een (random) flikkerend ledje.

Maar waar ik de laatste tijd mee bezig ben is het toevoegen van nog een Nano met daarop een sketch van een Larson scanner (Michael Knight KITT) dit omdat in de film Ready Player One de BTTF DeLorean voorzien is van dit rode looplicht. Deze sketch heb ik niet bij deze topic gedaan. Maar als je zoekt op Proper Larson Scanner (8 LED) kom je hem snel tegen. Als ik de Nano aansluit aan mijn toestenbord begint hij te lopen precies zoals ik wil. Ik kan zelfs een grill (3D print) kopen waar ik de ledjes zo in kan plaatsen. Maar ik wil hem kunnen bedienen met de afstandsbediening. Dwz aan- en uitzetten.

Is er een manier om mijn tweede Nano board 'gewoon' aan of uit te zetten. Ik kan het board voorzien van stroom via een adapter, net als de Mega2560 en Nano. En hoe zorg ik ervoor dat hij blijft 'scannen'. En misschien is het wel mogelijk om de Proper Larson Scanner toe te voegen aan de sketch van de Mega2560.

Wie kan mij helpen of in de goede richting wijzen?

Flux_capacitor_OLED.ino (9.57 KB)

BTTF_Delorean_Mega.ino (46 KB)

Hallo,
Dat wordt lastig, de sketch van de Mega 2560 houdt daar geen rekening mee.

Je kunt links geven in je bericht, dan weten wij ongeveer waar je het over hebt. Ik kan geen Engelstalige beschrijving vinden van het project van LsKaz.

DeLorean auto op 1/8 schaal door Eaglemoss: https://shop.eaglemoss.com/eu/hero-collector/back-to-the-future-delorean.
De auto is verdeeld over 159 stukjes ? Dat soort dingen is alleen maar bedoeld om je extra veel geld te laten betalen.

Een Larson scanner: https://www.baldengineer.com/proper-larson-scanner-with-sw-pwm.html.

Voorbeeld van de KITT scanner op een schaalmodel van de DeLorean: Build the delorean...ready player one conversion! - YouTube.
Die ziet er heel mooi uit. Ik kon geen stukje uit de film vinden, dus ik weet niet in hoeverre het klopt. Dit vind ik veel mooier dan die Larson scanner van baldengineer die ik hierboven gaf.

De code van beide sketches ziet er goed uit.
LsKaz gebruikt libraries die veel gebruikt worden en hij doet geen rare dingen in de code.

De Nano sketch

De Nano sketch voor de Flux Capacitor heeft geen delay() in de sketch, en kijkt alleen naar de ingangen en doet iets met het display. Daardoor is er in de loop() ruimte om nog heel veel andere dingen te doen.

Stel dat je een random flikkerend ledje wilt toevoegen. Dan kun je die led bijvoorbeeld 40 keer per seconde updaten. Voor zover ik het kan bekijken is dat geen probleem om aan de Nano sketch toe te voegen.
Dat kan alleen als je millis() gebruikt, zoals in mijn millis_soft_pulsating_led.ino voorbeeld.

Voor een KITT scanner is het nodig dat de leds kunnen dimmen. Dan heb je zo'n 10 of 12 PWM uitgangen nodig. Die heeft het Nano board niet. Je kunt niet onbeperkt leds toevoegen, die vragen allemaal stroom en het Arduino board moet dat wel aankunnen.

Je kunt een programmeerbare ledstrip gebruiken, dan heb je wat Arduino kennis nodig, bijvoorbeeld om de FastLED library aan de praat te krijgen. Een ledstrip kan apart gevoed worden met 5V, dus dan hoeft het Nano board die stroom niet te leveren.

De Mega 2560 sketch

De Mega 2560 sketch is helaas niet geschreven om het uit te breiden. In de loop() zit een delay(130) die de boel ontwricht. Bij het inlezen van de remote control wordt een pulseIn() gebruikt, die ook even bezig is. Zodra je op een knop drukt van de afstandsbediening, dan zijn er nog veel meer delays. Dat zijn drie dingen bij elkaar waardoor de Mega 2560 niet nog allerlei andere dingen kan doen.

Hij gebruikt de TimerOne library om dingen te doen die wel doorgaan, ondanks de delays. Maar dat stukje vind ik twijfelachtige code. De Arduino Mega 2560 heeft voldoende timers, en er is een TimerThree library. Daarmee kun je hetzelfde doen en dus allerlei dingen laten knipperen die wel gewoon door blijven gaan. Om dat echter aan de bestaande sketch toe te voegen is een gok, als dat andere dingen gaat beïnvloeden dan loopt alles in de soep.

Als je goed met Arduino kunt programmeren, dan zijn er goede mogelijkheden om uit te breiden. Bijvoorbeeld door een derde Arduino board toe te voegen, die op dezelfde manier aangestuurd wordt als het Nano board. Dan kun je het aantal commando's in het Arduino Mega 2560 board uitbreiden, en in het derde Arduino board doen wat je wilt.
Tenzij je een software PWM gaat gebruiken, dan hangt het er van af hoe goed dat gedaan is.

Maar vanaf de Mega 2560 een uitgang samen met GND verbinden met het derde Arduino board is natuurlijk wel mogelijk.
Hoeveel knoppen op de afstandsbediening zijn nog beschikbaar ? Als je de Serial Monitor opent van de Mega 2560, kun je dan die ongebruikte knop zien als "Key ... not programmed" ?

Kun je die ontbrekende sketch laten zien ?

Hi,
bedankt voor je reactie. Echt fijn dat er iemand naar de twee sketches heeft gekeken. De derde (en vierde) zitten hier nu ook bij. Ik ben zo blij dat ik dit forum ben opgegaan. Je antwoord heb ik al een paar keer gelezen en wordt steeds duidelijker. Ik zal het nog wel een paar keer doen... Nogmaals bedankt.

Ik heb inmiddels de Nano aan een pin van de Mega gehangen. De pin van de Mega kan ik op HIGH zetten via een knop op m'n remote. Tegen de Nano heb ik gezegd; als je een HIGH op die pin (12) ontvangt dan ga je dit doen. Dat is de SoftPWM bounce die voor mij veel simpeler oogt. En tot mijn grote verbazing werkt het precies zoals ik dacht. Dit opent weer meer perspectieven.
Maar als ik kijk naar de ProperScanner, die een misschien een heel beetje mooier is, weet ik niet eens wat ik moet aanroepen. Er staat zoveel in. Die scanner van YouTube is ook heel mooi.

In de remote was ik al gedoken. Ik heb met succes de codes kunnen achterhalen van een nieuwe remote, door inderdaad via 'not programmed'. Met 'zoek en verander' heb ik de codes vervangen en nu heb ik meer knopen. Na wat speurwerk kwam ik erachter hoe de knopen 'cases' werken. Dat was de eerste stap. Aanzetten van een Ledje was een maar het vervolgens weer uitzetten met dezelfde was voor mij al lastig.

Ik kan gelukkig weer een stuk verder. Mijn Nano-sketch ga ik nog iets uitbreiden. Ik wil nog iets proberen met twee RGB leds die langzaam van kleur veranderen. Met SoftPWM moet dat wel lukken, hoop ik. SoftPWM toevoegen op de Mega ging trouwens helemaal niet en dat had volgens mij te maken met timers(?). En daar begrijp ik niks van.

ReadyPlayerOne_Nano_Bounce_8Mei2020.ino (824 Bytes)

Proper_Larson_25APR_ORIGINAL.ino (8.2 KB)

De SoftPWM library van bhagman neem ik aan ? GitHub - bhagman/SoftPWM: A Wiring (and Arduino) Library to produce PWM signals on arbitrary pins..
Dat is een hele mooie library, daarmee kun je mooie dingen maken. Houdt wel een beetje de grenzen in de gaten, maar je merkt vanzelf als het vast loopt.

De Mega 2560 heeft genoeg timers en SoftPWM kan Timer4 gebruiken. Dan ontstaat er geen conflict, maar ik kan niet overzien in hoeverre dat invloed heeft op het inlezen van de remote control. Zoals je het nu hebt is beter.

Als je dit doet:

int RPO_PIN[1]

dan maak je een array met één element. Geen drie. In de sketch gebruik je er wel drie, dus je gebruikt geheugen van iets anders. Hetzelfde voor RP0_KEY.

De "proper larson" sketch van baldengineer doet zelf de software PWM zonder gebruik te maken van interrupts. Dat maakt het lastiger om te doorgronden.
Voor de 'tail' gebruikt hij een 'fadeIncrement' en daarmee krijgt hij een lineaire schaal van de helderheid. Dat kan beter.

Ik zou voor SoftPWM kiezen, en dan het led-effect zelf in code maken met de functies van de SoftPWM library.

Het menselijk oog ziet helderheid (bijna) als een 10log curve. Dus iets dat 10 keer meer licht geeft lijkt in onze ogen twee keer zo fel.
Heb je mijn voorbeeld millis_soft_pulsating_led.ino nog bekeken ? Daar stuur ik een sinus golf naar een led. Maar tussen de sinus en de analogWrite() zit een "float u = pow( 10, t)". Daarmee zet ik de sinus om naar een logaritmische schaal. Dan is het opeens veel mooier.
Als je een 'tail' of 'na-ijl-effect' wilt maken, dan kun je daar rekening mee houden. Je zou in een tabel de vaste waarden kunnen zetten van de na-ijlende leds. Bijvoorbeeld de eerste op 255, de tweede niet op 128, maar bijvoorbeeld op 40, enzovoorts. Die tabel zou je kunnen maken met SoftPWM en met stilstaande leds, totdat het er mooi uitziet.
Ik heb er nog niet verder over nagedacht. Is er een voorbeeld van SoftPWM samen met een mooi na-ijl-effect ?

Een RGB led op een mooie manier van kleur veranderen kan lastig zijn. Adafruit heeft daar veel voorbeelden van.
Ik heb een RGB led met een millis_led_heartbeat.ino in een project, maar dat is met één kleur. Het lukte me niet om daar iets met meerdere kleuren van te maken dat er ook nog mooi uitzag.