1 van 1

Logische puzzel oplossen met Arduino

Geplaatst: zo 19 jul 2015, 22:17
door Ragbips
Hallo
Vandaag las ik dit artikel over robots die zogenaamd zelfbewustzijn laten zien:
http://www.iflscience.com/rise-machines-robot-demonstrates-self-awareness-solving-logic-puzzle
 
Het lijkt mij een beetje een stomme, typisch populair-wetenschappelijk iets om dit zelfbewustzijn te noemen.
Mijn idee was dat je zoiets met doodnormale booleaanse logica gemakkelijk na kan doen, alleen ben ik geen held op dit gebied. Ik heb sinds kort een arduino, maar ben (nog) niet echt bedreven in de electrotechniek en met de Arduino.
 
Mijn idee is om bijvoorbeeld 3 LED's te hebben die zo geprogrammeerd worden dat ze willekeurig aan of uit zijn (maar altijd minstens ééntje aan) een te doen alsof elke LED de andere twee observeert. Dit lijkt mij best te doen aangezien LED's halfgeleiders zijn, dus als je voor elk LEDje een circuitje naar de twee andere LED's maakt, krijgt deze of wel, of geen signaal afhankelijk van of de LEDjes aan staan of niet (zegmaar het waarnemings gedeelte).
 
Hierop zou toch best een programmatje geschreven kunnen worden dat als bijvoorbeeld de LEDjes elk "niets van zich laten horen", voor bijvoorbeeld 5 seconden, ze als resultaat geven allemaal aan te staan, maar als bijvoorbeeld één aanstaand LED'je twee ziet die uitstaan, hij direct weet dat hij wel degene moet zijn die aan staat.
 
Het idee is wat abstract misschien maar het lijkt mij mogelijk. Probleem is dat ik zelf geen flauw idee heb hoe dit te programmeren en de electronica uit te werken. Hebben jullie misschien ideeën?

Re: Logische puzzel oplossen met Arduino

Geplaatst: zo 19 jul 2015, 23:30
door dannypje
De Arduino kan random waarden genereren, die zou je kunnen gebruiken om de LEDs aan te sturen. En omdat je die LEDs zelf aanstuurt, ken je natuurlijk ook hun toestand.
 
Ik weet niet wat je met die 'niets van zich laten horen' situatie bedoelt, maar LED1 kan heel makkelijk 'weten' dat hij brandt als de andere 2 uit zijn. Dit is gewoon de NOR-functie (samentrekking van NOT en OR) van de 'aan' toestand van de 2 andere LEDs (aangenomen dat 1 'aan' betekent, en 0 dus uit).
 
Dus LED1-ik-brand = LED2 NOR LED3
LED2-ik-brand = LED1 NOR LED3
enz.
 
Er zal nog wel complexer werk nodig zijn om zelfbewustzijn te simuleren en die logische puzzel te bouwen, maar dit is alvast een begin.

Re: Logische puzzel oplossen met Arduino

Geplaatst: ma 20 jul 2015, 08:59
door dannypje
PS:
En de elektronica om vanuit een Arduino een led aan te sturen is minimaal. Gewoon een serieweerstand van een ohm of 300 aan een uitgangspoort van de Arduino verbinden, de andere kant van de weerstand aan de pluspool (anode) van de led verbinden, en de minpool (kathode) van de led aan 1 van de ground (GND) pennen van de Arduino verbinden.

Re: Logische puzzel oplossen met Arduino

Geplaatst: ma 20 jul 2015, 20:34
door Ragbips
Ik zal hier binnenkort eens mee aan de slag gaan, en ongetwijfeld struikelblokken tegenkomen ;)
Ik ga er van uit dat logische bewerkingen als OR en NOR etc te programmeren zijn? Of is het beter om logische poorten zelf te maken op breadbord (of zijn er gangbare IC's die dit doen)? Ik heb een zak vol ICtjes maar nog niet uitgezocht wat ze allemaal doen haha.
 
Is er ook een boek voor electronica noobs noobs zoals ik dat aan te raden is?

Re: Logische puzzel oplossen met Arduino

Geplaatst: di 21 jul 2015, 02:40
door Benm
Arduinos hebben over het algemeen geen echte random generators - in chips als de atmel 328 zit wel een goede pseudorandom generator, maar die zul je moeten seeden met een of ander random waarde. Dat kan bijv het tijdsverloop zijn tussen opstarten en het indrukken van een knop of wat je uitleest als analoge waarde op een zwevende pin (dat laatste is niet erg betrouwbaar). 
 
Logische operators zijn wel beschikbaar, de hele set van and, not, or en xor zitten er gewoon in, al moet je wel even oppassen hoe je die bitwise gebruikt (~ en ^ voor bitwise xor en not bijvoorbeeld). 
 
Overigens zit er zat geheugen in om dit met een handvol variabelen niet bitwise te hoeven doen maar 'gewoon' door vergelijking van variabelen zoals je het ook in pakweg C zou aanpakken. 2k RAM lijkt weinig, maar is voor dit soort werk meer dan genoeg, zelfs met de tamelijk brakke compiler die je er standaard bij krijgt.