Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Gebruik de kracht... of je hersengolven?

Componenten en benodigdheden

Arduino UNO
Gebruikt voor de robot.
× 1
Arduino Mega 2560
Het brein van het project...
× 1
Arduino Leonardo
Muiscontroller
× 1
Deeltjesfoton
Webserver datalogger
× 1
Necomimi Brainwave Cat Ears
EEG-sensor
× 1
SparkFun Dual H-Bridge motordrivers L298
Koop dit als je niet je eigen motordriver wilt bouwen.
× 1
Relaismodule
Koop deze module als u geen circuits wilt solderen.
× 1
HC-05 Bluetooth-module
× 1
LED (generiek)
× 3
Weerstand 330 ohm
× 3
Transistor-NPN voor algemeen gebruik
× 3
Mannelijke/Vrouwelijke doorverbindingsdraden
× 1
Jumperdraden (algemeen)
× 1
Soldeerloze breadboard halve grootte
× 1

Benodigde gereedschappen en machines

Soldeerbout (algemeen)

Apps en online services

Brain Visualizer
Het is alleen nodig voor experimenten.

Over dit project

Als kind wilde ik altijd al een speciale vaardigheid hebben, zoals objecten verplaatsen met gedachten of vliegen. Ik probeerde objecten te verplaatsen met "de kracht van mijn geest", natuurlijk zonder succes.Nou ja, ik was en ik ben een enorme Star Wars-fan, maar ik hou ook van elektronica en programmeren, dus waarom zou je deze twee dingen niet combineren om een ​​ongelooflijk project te bouwen?

Je kunt alle onderdelen, codes en bibliotheken met links vinden in het gedeelte Hardware en software.

Het hoofdconcept is dat met behulp van verschillende hersengolven de gebruiker in staat zal zijn een robot, de cursor op zijn pc te besturen of lichten in zijn huis aan/uit te zetten, terwijl een microcontroller (Particle Photon) een online analyse maakt over de hersengolven van de gebruiker. Dit is een perfecte methode om ziekten of stress en slaperige uitspraken op te sporen. Dit kan ook worden gebruikt om mensen te helpen hun leven beter te leven, hun emoties te leren beheersen en altijd gelukkig te zijn. Het menselijk brein heeft balans nodig, om gezond te zijn, moeten we slapen, denken, bewegen... Met behulp van de Particle Photon en de webserver van de oprichters van de Particle kunnen we mensen helpen hun natuurlijke hersenbalans te vinden. Een kinderdroom leidde me naar dit project en ik ben erg blij dat ik het heb gehaald.

Maar als we StarWars en de Force een beetje weglaten, is dit apparaat niet alleen voor luie mensen of voor fans, het is gemaakt om mensen die elke dag vechten met hun handicap een vaardigheid terug te geven. De robot die ik heb ontworpen werkt op dezelfde manier als een rolstoel, het domoticasysteem zou de gebruiker helpen om lampen of tv's te bedienen, zelfs als hij/zij zich niet kan bewegen. De pc-controllermodus kan nuttig zijn, zelfs voor degenen die perfect gezond zijn. Ik denk dat we allemaal computerspelletjes willen spelen of gewoon op internet willen surfen met alleen gedachten.

Bekijk deze korte introductievideo over het verhaal van het project:

Wil je er zelf een bouwen? Hier zal ik alles uitleggen wat je moet weten voor dit project. Ik deel codes, schema's en deze gedetailleerde instructie, dus warm je soldeerbout op ...

De wetenschap achter het project 

Elektro-encefalografie (EEG) is een elektrofysiologische monitoringmethode om elektrische activiteit van de hersenen vast te leggen. Het is meestal niet-invasief, waarbij de elektroden langs de hoofdhuid worden geplaatst, hoewel invasieve elektroden soms in specifieke toepassingen worden gebruikt. EEG meet spanningsschommelingen als gevolg van ionische stroom in de neuronen van de hersenen. Diagnostische toepassingen richten zich over het algemeen op de spectrale inhoud van EEG, dat wil zeggen, het type neurale oscillaties (in de volksmond "hersengolven" genoemd) die kunnen worden waargenomen in EEG-signalen. (bedankt Wikipedia) Maar we gaan twee zeer nauwkeurige waarden gebruiken

  • Alfa is het frequentiebereik van 7 Hz tot 14 Hz. Het komt naar voren met het sluiten van de ogen en met ontspanning, en verzwakt met het openen van de ogen of mentale inspanning.
  • Bèta is het frequentiebereik van 15 Hz tot ongeveer 30 Hz. Lage amplitude bèta met meerdere en variërende frequenties wordt vaak geassocieerd met actief, druk of angstig denken en actieve concentratie.

Hoe werkt het?

Ik heb vier microcontrollers gebruikt om dit project tot leven te brengen:een Arduino Mega, een ArduinoLeonardo, een UNO en een Particle Photon. De Mega is het brein van het project dat signalen van de headset ontvangt, analyseert en vervolgens opdrachten doorstuurt naar de andere apparaten. Stuurt alle gegevens door naar de Photon die de webserver creëert. De Leonardo bestuurt de muis op een pc en de Uno wordt gebruikt om IR (infraroodsignalen) te ontvangen en de robot aan te sturen. Zoals ik al zei, kan het apparaat drie verschillende dingen bedienen (of meer als je iets anders wilt programmeren). Nu noem ik deze drie verschillende dingen kanalen. Het apparaat schakelt tussen deze kanalen als u uw ogen sluit:

  • Sluit je ogen voor 1-2 seconden:schakelt over naar home automation featurette
  • Sluit je ogen voor 2-4 seconden:schakelt over naar robotcontrollermodus
  • Sluit je ogen voor 1-6 seconden:schakelt over naar muiscontrollermodus

Ik heb relais gebruikt om de home automation featurette te maken, je kunt er alles op aansluiten:tv, gloeilampen, stopcontacten wat je maar wilt

De draadloze hoofdtelefoon:

Ik ben dol op hackingtoys, dus kocht ik een hersengolfdetectiespeeltje genaamd Necomimi, dat zijn oren kan bewegen afhankelijk van je hersengolven (aandacht, meditatie). Dit is het meest nutteloze speeltje dat ik ooit heb gezien, maar er zit een kleine chip in die hersengolven leest, ruis filtert en een heel goed signaal geeft. Werkt met UART(Serial)-interface, dus met wat hacken kunnen we Arduino's gebruiken om hersengolven te lezen. De rol van deze headset is om hersengolven draadloos door te sturen naar de centrale server. Niemand wil kabels op zijn hoofd, dus ik heb deze comfortabele en gebruiksvriendelijke headset gemaakt.

Ga naar beneden om te zien hoe je het uit elkaar haalt en er een draadloze Bluetooth-headset van maakt.

Hoe het te gebruiken?

We hebben twee meetbare eSense-waarden (NeuroSky-waarden):meditatie van 0 tot 100 en aandacht van 0 tot 100. Hoe meer gefocust je bent, hoe hoger de attentiewaarde wordt. Hoe meer ontspannen je bent, hoe hoger het meditatieniveau wordt.

Het systeem werkt met gedachten, er is niets anders nodig, leer alleen gefocust of ontspannen te zijn. Na een week experimenteren was ik in staat om mijn "aandachts"-waarde zeer nauwkeurig te controleren. Ik kan mijn aandachtsniveau bewust instellen op ongeveer 15, of 39, 65 en 90. Je moet weten hoe je je waarden kunt beheersen, we zijn allemaal verschillend. Het werkte heel goed met emoties. Denken aan liefde, vriendschap, woede of angst geeft een heel goed contrast in de waarden.

Om het systeem aan te zetten, sluit u een micro-USB aan kabel in de Arduino Leonardo. Dit bestuurt ook je muis (als je wilt) en zorgt voor 5 volt en 500 mA voor het systeem.

Het huisautomatiseringssysteem bedienen

Als u bent overgeschakeld naar de domoticamodus, verhoogt u uw aandachtsniveau hoger dan 70 om het eerste relais in te schakelen , verhoog het meditatieniveau hoger dan 70 om het tweede relais in te schakelen , en verhoog beide hoger dan 70 om het derde relais in te schakelen . Het is een beetje lastig, maar is niet onmogelijk na wat mind-training. Als het al is ingeschakeld, gebruik dan dezelfde opdracht om het uit te schakelen (dus als het is ingeschakeld, bereik 70 opnieuw om het uit te schakelen). Als het systeem klaar is, kun je elk hoogspanningsapparaat (licht, tv, pc, koeler, alles wat je wilt) aansluiten op de relaismodule.

De muis besturen

De cursor wordt bestuurd met emoties. Als het aandachtsniveau minder dan 25 zetten over is , indien tussen 25 en 50 gaat naar rechts , indien tussen 50 en 75 gaat omhoog en als tussen 75 en 100 is, gaat omlaag . U kunt klikken door het meditatieniveau te verhogen. Zoals ik al eerder zei, kan het aandachtsniveau gemakkelijk worden gecontroleerd met emoties (voor mij).

De robot besturen

De robot heeft slechts drie verschillende uitspraken:stop, draai naar links en ga vooruit. Waarom slechts twee bewegingsopties? Omdat deze twee richtingen voldoende zijn om de robot te verplaatsen waar u maar wilt. Gebruik je meditatieniveau om te draaien met de robot, en wanneer je de richting hebt bereikt waarin je wilt bewegen, stop de robot en beweeg dan vooruit met het aandachtsniveau . Het is een betere methode om de robot te besturen en zelfs beginners, die hun aandachts-/meditatiewaarden niet zo goed kunnen beheersen, kunnen met deze robot spelen.

Mijn abonnement

Dit is een oudere foto over mijn plan, maar het is gelukt, dus ik ben erg blij met de resultaten. Deheadset verzendt BT (Bluetooth)-signalen naar de Arduino Mega die de binnenkomende bytes analyseert en, afhankelijk van de gedachte van de gebruiker, de verschillende functies bestuurt. Het was erg moeilijk om de beste manieren te vinden om deze hoeveelheid gegevens te verzenden, maar ik koos Bluetooth in plaats van WiFi. In eerste instantie wilde ik de Particle Photon gebruiken als datazender, maar dat ventje kreeg een betere rol bij het maken van de webserver. Dat was de grootste wijziging in het hele project. (Op de foto ziet u het werkelijke plan). Ik heb zelfgemaakte Arduino-modules gebruikt , omdat ik dol ben op het ontwerpen van mijn eigen circuits. Je kunt deze modules online kopen als je wilt of zelf met mij bouwen.

Een half jaar leren en experimenteren

Ik heb veel aan dit project gewerkt en ja, ik ben bijna een half jaar geleden begonnen, maar met de Photon ging het in een stroomversnelling. Het was heel gemakkelijk om hun dashboard te gebruiken. Er zijn trouwens veel tutorials op internet om EEG-speelgoed te hacken, dat hielp me een beetje, maar ze hadden geen extra functies. Dus besloot ik dat ik dit Necomimi-speelgoed zou hacken en met mijn creativiteit heb ik dit apparaat gemaakt dat veel meer functies heeft dan alleen het knipperen van een LED. Ik hoop dat je zult genieten!

Laten we beginnen!

Het Necomimi-speelgoed hacken

We willen dit EEG-speelgoed aanpassen om gegevens via Bluetooth te verzenden, dus eerst de behuizing uit elkaar halen. De schroeven zitten onder de sticker.Verwijder de sticker en de achterkant van het apparaat en je vindt het in een klein circuit. Degene die zich onder het hoofdcircuit bevindt, is de Neurosky TGAM-chip. Dit is verbonden met vier header-pinnen op de hoofdmicrocontrollerkaart, dus neem een ​​soldeerbout en verwijder dit circuit voorzichtig. Soldeer nu drie draden aan de GND-pin aan de VCC-pin en aan de T-pin. De T-pin is de zenderpin met een baudrate van 57600, deze stuurt datapakketten naar onze microcontroller, maar ik heb deze rechtstreeks aangesloten op een HC-06 slaveBT-module . De HC-06 is ingesteld op 9600 baudrate, maar maak je geen zorgen, we zullen dit probleem oplossen. Als je de drie draden aan de draad hebt gesoldeerd, kun je je eigen oplaadbare stroombron inbouwen. Ik gebruikte een 500mAh Li-Ion batterij, een USB-oplaadcircuit, een 5v step-up circuit en twee weerstanden (100 ohm en 200 ohm) om een ​​perfecte 3,4 volt voeding voor de chip en voor de Bluetooth-module te verzekeren. Volg het schema om de circuit dat nodig is in de headset. Als het circuit klaar is, configureert u de Bluetooth-module.

Over de chip:

De Neurosky ThinkGear AM is ontworpen om gegevens te filteren, te versterken en te verzenden via een seriële interface. Meer info hier.

Het schema / elektronica

Volg de instructies en de afbeeldingen hieronder en maak je eigen draadloze EEG-headset.

U hebt een lithium-ionbatterij van 500 mAh nodig, een spanningsverhogingsmodule van 5 V om een ​​stabiele spanning te creëren en vervolgens een weerstand van 100 Ohm en 200 Ohm om de spanning terug te brengen tot stabiele 3,3 volt. Ik heb vrouwelijke header-pinnen gesoldeerd om op te starten en gegevens naar de Bluetooth-module te verzenden.

De het belangrijkste onderdeel is om de "T"-pin te verbinden met de "RX" op de Bluetooth-module. Dit brengt ons project tot leven.

Bluetooth-modules configureren

HC-06:Laad eerst de schets met de naam“HC_06_Bluetooth” op een Arduino UNO en sluit vervolgens de Bluetooth-module aan zoals het schema laat zien. Ik vond dit schema op de website van het Artronix-team en leek nuttig.


void setup() {   // Start de hardware serial.Serial.begin(9600); // standaard HC-06 baudratedelay(1000);Serial.print("AT");delay(1000);Serial.print("AT+VERSION");delay(1000);Serial.print("AT+PIN "); // om passworddelay(1000);Serial.print("AT+BAUD7"); // Stel de baudrate in op 576000 - bijv. Necomimi dafaultdelay(1000);Serial.begin(57600); // delay(1000);}void loop() {} 

Open uw seriële monitor in de Arduino IDE en wacht tot de Arduino de BT-module configureert. Nu is uw Bluetooth-module ingesteld op 57600baudrate . Je kunt veel BCI-apps (Brain Computer Interface) uitproberen, omdat dit gehackte bluetooth Necomimi-speelgoed compatibel is met alle Neurosky-apps.


Met deze apps leer je controle over je hersengolven en waarden, zoals aandacht of meditatie. Je kunt veel coole games proberen, maar ik raad deze apps aan (ze zijn compatibel met pc, iOS en Android): 

http://store.neurosky.com/products/brainwave-visualizer-android

http://store.neurosky.com/products/eeg-analyzer

http://store.neurosky.com/collections/android/products/blink-camera-android


Gebruik dan de "HC_05_Bluetooth" en laad je Arduino op dezelfde manier als voorheen. Verbind de "EN"-pin van de HC-05 met de 3v3 van de Arduino. U moet het adres van uw HC-06-module in de code schrijven. Controleer het adres van de BT-module met een Android-smartphone, zoals ik. Vervang ":" (dubbele puntjes) door "," komma's in de code.

En je moet het adres in de code veranderen:

20:15:09:15:17:82 ==> 2015,09,151782 Op deze manier kan de HC-05 module het adres herkennen. Dus laat wat ":" achter, want dat is niet nodig.

// HC-05 configurationvoid setup() { // Start de hardware seriële. Serieel.begin(9600); // standaard HC-05 baudrate vertraging (1000); Serial.print("AT"); vertraging (1000); Serial.print("AT+VERSIE"); vertraging (1000); Serial.println("AT+ROLE=1"); // stel de HC-05 in op master-modusvertraging (1000); Serial.println(" AT+LINK="kopieer hier uw adres"); // nu zou de module automatisch verbinding moeten maken delay(1000); Serial.print("AT+UART=57600,1,0"); // Set baudrate naar 576000 Serial.begin(57600); // delay(1000);}void loop() {} 

Ten slotte moeten de twee modules met elkaar worden verbonden. Als je problemen hebt, klik dan op deze link om meer te lezen.

De op afstand bestuurbare robot

Om deze goedkope robot te maken, gebruikte ik 38kHz IR-technologie , dat wordt gebruikt in tv-afstandsbedieningen. Ik kocht bij Amazon achassis voor mijn robot. De IR-ontvanger is afkomstig van een oude tv en de Arduino komt ook uit de Amazone. Ik heb links naar de onderdelen toegevoegd (zie verderop in de sectie Hardware).

Het motorstuurcircuit

Je hebt deze onderdelen nodig:

  • 2 schroefklemmen
  • L293D IC
  • 3 koppin
  • 9 koppin (90 graden)
  • 1k-weerstand
  • Rode LED
  • Draden
  • Een printplaat

Ik gebruikte wat koperdraden en volgens het schema verbond de pinnen van het IC met de header-pinnen. Het maakt niet uit welke pin naar welke header-pin gaat, onthoud gewoon dat je ze hebt aangesloten. De LED is in serie geschakeld met de weerstand en parallel met de 5v VCC.

Het chassis in elkaar zetten

Deze stap was heel eenvoudig, ik gebruikte een schroevendraaier en wat knutselvaardigheden. Ik bouwde het frame in vijf minuten. Nadat dit het moeilijkere deel komt, moeten we een motorbesturingscircuit bouwen. Om mijn motoren te besturen, kies ik de L293D IC die twee motoren kan aandrijven. Kijk naar het schema om circuit te bouwen.

Sluit de onderdelen aan op de Arduino

Ik heb jumperdraden gebruikt om de sensor en de motordriver op de Arduino aan te sluiten.

Arduino-pin ==> Motorstuurprogramma

 4 ==> 15

                   5 ==> 10

                   6 ==> 7

                   7 ==> 2

               VIN ==> 8

                 5v ==> 1, 9, 16

             GND ==> 4, 5, 13, 12

Dus kijk naar het schema van de L293D-module en verbind vervolgens de pinnen met de Arduino UNO zoals ik hier schreef. De 5v-pin van de Arduino moet worden aangesloten op de 1, 9, 16 pinnen om de motorbesturingsfunctie van de IC in te schakelen. Gebruik dan ten slotte de schroefklemmen om de motoren van stroom te voorzien.

Codes schrijven...

Met behulp van de IRremote-bibliotheek heb ik een code gemaakt die 38 kHz infraroodsignalen leest, decodeert en vervolgens de robot beweegt. (Download de bibliotheek in het gedeelte Code).

Ik heb uitleg in de code toegevoegd, maar de substantie is dat de IR-signalen die van de hoofdserver komen decodeert, en vervolgens, afhankelijk van wat de gebruiker wil, de motoren beweegt dan de robot vooruit zal bewegen of naar links zal draaien. Download de code:"Robot_Code" . Laad dit in je Arduino en je robot is klaar.



De hoofdserver (Arduino Mega, Leonardo, Photon)

De server leest inkomende datapakketten van de draadloze headset. We gebruiken de geconfigureerde BT-module om de verbinding tussen de headset en de server te garanderen. De Arduino Mega is het brein van het circuit, alles is verbonden met deze microcontroller:Bluetooth, infraroodzender LED, webserver en muiscontroller. De code is een beetje ingewikkeld, maar ik heb uitleg toegevoegd om het te begrijpen.

De zaak

Het is eenvoudig maar ziet er geweldig uit. Ik sneed twee platen van 18x15 cm en maakte de randen glad met schuurpapier. Met een paar schroeven heb ik ze met elkaar verbonden.

Het relaiscircuit

Je hebt deze onderdelen nodig:

  • 2n2222 transistor (3 stuks)
  • germaniumdiodes (3 stuks)
  • 330 ohm weerstanden (3 stuks)
  • 1k Ohm weerstanden (3 stuks)
  • 5v relais (3 stuks)
  • aansluitdraden
  • koppins
  • PCB-kaart

Een plaatje dat meer zegt dan duizend woorden, dus in plaats van te proberen te schrijven hoe je de onderdelen op de PCB moet aansluiten, kijk naar het schema. Als de "Signaal"-pin een signaal krijgt van de Arduino, wordt het relais ingeschakeld. De transistor versterkt het signaal om voldoende vermogen voor de relais te verzekeren. We gebruiken 37-38-39 pinnen om de HIGH-LOW-niveaus van elk relais te regelen.

Installeer onderdelen in de koffer

Om de onderdelen op de behuizing van plexiglas te monteren, heb ik dubbelzijdige witte tape gebruikt. Dit lokt noce en houdt de circuits op de behuizing behoorlijk sterk.

Het servercircuit

Deze server is gebaseerd op software, dus het maken van het circuit is niet zo moeilijk. (Zie schematische domper). U hoeft alleen de microcontrollers aan te zetten en een verbinding tussen hen te maken. De IR-LED is aangesloten op pin D3 en de relais op 37-38-39. D16 van de Arduino Mega gaat naar RX van de Photon en de D18 naar de RX van de Leonardo.

Connection with the Robot


The IR Leds are connected to the digital pin D3 and with the IRremote library we send codes to the robot. It's pretty simple. The IR codes must be the same in the robot's code. If you think you're done you can test it with your camera. The infrared light looks purple on a photo, cameras can detect the IR light. This trick always works.

The Code

Use the "Arduino_Mega_Server" code in the Software part.

I suffered a lot while wrote the codes. I should program three different microcontrollers, so it was a big challenge. I used IRremote, Brain, SofwareSerial and Mouse libraries. (see download links at the Software part). But now the code is done and works so you just should upload to your microcontrollers. Download the .ino file or copy/paste the code in your IDE and use it. The code to the Particle Photon should be uploaded via the browser IDE. To make this register to the Particle Build. And connect your laptop to your microcontroller. I was really surprised that this happened almost automatically, I just added my Device ID number.

Before loading up the codes be sure nothing is connected to the RX/TX pins. So disconnect your BLuetooth module from the Mega, and disconnect the Mega from the Leonardo and the Photon.

The Mouse Controller 

The Webserver

I wanted to add an IoT (Internet of Things) function in my project, so I made an online data logger using the Particle Photon. Depending on what you make with the device the Photon creates a personal server, and writes the data in the Cloud.

This may seem scary at first time, but imagine that you can detect if you are stressful (attention level increases and decreases quickly ) or if you should sleep (meditation level is always higher than 80) . This webserver may help you to live healthlier.

The Particle also has an online dashboard where you can publish any kind of data with the "Particle.publish();" syntax. We should have to say a big "thank you" for the developers of the dashboard. They saved a lot of time for us.

Writing codes in a browser?

It was intresting to write codes on a web page, but worked the same way like the normal IDE. The code was uploaded wirelessly. This microcontroller would be a very useful tool in everyone's toolbox.


The dashboard looks somehow like this if you worked fine. Shows Attention and Meditation, and you can check them anytime, at your dashboard URL. For more info about the dashboards click here.

A quick upgrade for those who want to control only a robot with mindwaves:

You don't want to build the build the whole project, only a mindwave controlled robot? Don't worry if you're a beginner I thought even on you. I made a code with explanations that needs an Arduino Mini Pro and an IR LED and of course the headset to control the robot. I know that many of my readers wants to make a simple and fun weekend project so here's the description and the code for you.

Use the "RobotControlllerHeadset" code inthe Software section. Connect an IR LED to the D3 pin on the Mini Pro (Or Arduino UNO) and connect the T pin of the NeuroSky chip to the RX pin of the Arduino. Power up with 3.3 or 5 volts and you're done. So build the robot, then use this code in your headset: 

#include #include #include IRsend irsend;Brain brain(Serial);const int ledPin =3; long interval =500; long previousMillis =0;int ledState =LOW; int medValue;void setup() { // Set up the LED pin. pinMode (ledPin, UITGANG); // Start the hardware serial. Serial.begin(57600);}void loop() { // Expect packets about once per second. if (brain.update()) { Serial.println(brain.readCSV()); // Attention runs from 0 to 100. medValue =brain.readMeditation(); } // Make sure we have a signal. if(brain.readSignalQuality() ==0) { // Send a signal to the LED. if (medValue> 65) {irsend.sendNEC(0xFF10EF, 32); vertraging (40); } if (brain.readAttention()> 65) {irsend.sendNEC(0xFF18E7, 32); vertraging (40); } } } 

Becoming an IoT Jedi (Testing)

After making everything that I explained here, only one thing is left: try it out . Use the power of your mind, use the Force of the neurons in your brain, move your little robot, control your home, control everything with thoughts...

Now you become a real IoT Jedi!

The device has many features and it's very fun to play with. But as I said before it isn't only a toy , featuring biology and electronics we created a device that may help for people, who fight each day with their disabilities, to get back their natural capabilities.

The robot can be controlled easily, the relays aren't big challange too. You only should learn how to control your attention levels to control the mouse. On the picture I'm trying to exit an app with my brainwaves. More practice guarantees better experience.

Thank you for watching!

I really hope that you liked my project and please write your opinion in comments. I wanted to make a video about the device, but coding was hard so I haven't enough time to make a short movie, but I'll publish it very soon on my Youtube channel and I'll update this project presentation too.

May the Force be with you, always!

Code

  • Particle Photon Code
  • Robot Controller Code
  • HC_05_Bluetooth.ino
  • Mouse Controller Code
  • Arduino_Mega_Server
  • RobotControllerHeadset.ino
Particle Photon CodeArduino
Copy this in your browser IDE then upload to the Particle Photon. Open the dashboard to see the results in real time.
//this is the code for the webserver for a "Use the Force... Or your Brainwaves?" project//creates a statistics for the user about his/her brainwaves meditation and attention level//thanked to the fully functioning dashboard of the Particle the code is very simpleint att;int med;int function;void setup() { Serial.begin(9600); }void loop() { // Publish data Spark.publish("Attention", (att) + "%"); vertraging (2000); Spark.publish("Meditation", (med) + "%"); vertraging (2000); Spark.publish("Last Function", (function) + ""); vertraging (2000); if (Serial.available> 0) { char c =Serial.read(); } delay(10); switch(c) { case'a':att =10; pauze; case'b':att =20; pauze; case'c':att =30; pauze; case'd':att =40; pauze; case'e':att =50; pauze; case'f':att =60; pauze; case'g':att =70; pauze; case'h':att =80; pauze; case'i':att =90; pauze; case'j':att =100; pauze; case'k':med =10; pauze; case'l':med =20; pauze; case'm':med =30; pauze; case'n':med =40; pauze; case'o':med =50; pauze; case'p':med =60; pauze; case'q':med =70; pauze; case'r':med =80; pauze; case's':med =90; pauze; case't':med =100; pauze; case'x':function ="Home Automation" break; case'y':function ="Robot Controller Mode" break; case'z':function ="Mouse Controller" break; }}
Robot Controller CodeArduino
This code controls the robot. Upload this to the Arduino UNO. You can change the IR codes if you want.
//Used for "Use the Force or your Brainwaves?" project#include int IRpin =3;IRrecv irrecv(IRpin);decode_results results;int motor_pin1 =4;int motor_pin2 =5;int motor_pin3 =6;int motor_pin4 =7;void setup (){ irrecv.enableIRIn(); pinMode(motor_pin1,OUTPUT); pinMode(motor_pin2,OUTPUT); pinMode(motor_pin3,OUTPUT); pinMode(motor_pin4,OUTPUT); Serial.begin(9600);}void loop() { if (irrecv.decode(&results)) { irrecv.resume(); // Receive the next value } if (results.value ==0xFF18E7) //if gets this code goes forward { digitalWrite(motor_pin1,LOW); digitalWrite(motor_pin2,HIGH); digitalWrite(motor_pin3,LOW); digitalWrite(motor_pin4,HIGH); { Serial.println("Go Forward!"); } } if (irrecv.decode(&results)){ irrecv.resume(); // Receive the next value } if (results.value ==0xFF4AB5) //if gets this code goes backward { digitalWrite(motor_pin1,HIGH); digitalWrite(motor_pin2,LOW); digitalWrite(motor_pin3,HIGH); digitalWrite(motor_pin4,LOW); { Serial.println("Go Backward!"); } }if (irrecv.decode(&results)){ irrecv.resume(); // Receive the next value } if (results.value ==0xFF10EF) //if gets this code turns left { digitalWrite(motor_pin1,HIGH); digitalWrite(motor_pin2,LOW); digitalWrite(motor_pin3,LOW); digitalWrite(motor_pin4,HIGH); { Serial.println("Turn Left!"); } }if (irrecv.decode(&results)){ irrecv.resume(); // Receive the next value } if (results.value ==0xFF5AA5) //if gets this code turns right { digitalWrite(motor_pin1,LOW); digitalWrite(motor_pin2,HIGH); digitalWrite(motor_pin3,HIGH); digitalWrite(motor_pin4,LOW); { Serial.println("Turn Right!"); } }if (irrecv.decode(&results)){ irrecv.resume(); // Receive the next value } if (results.value ==0xFF38C7) //if gets this code stops { digitalWrite(motor_pin1,LOW); digitalWrite(motor_pin2,LOW); digitalWrite(motor_pin3,LOW); digitalWrite(motor_pin4,LOW); { Serial.println("Stop!"); } }}
HC_05_Bluetooth.inoArduino
Configures HC-05 module.
// HC-05 configurationvoid setup() { // Start the hardware serial. Serieel.begin(9600); // default HC-05 baud rate delay(1000); Serial.print("AT"); vertraging (1000); Serial.print("AT+VERSION"); vertraging (1000); Serial.println("AT+ROLE=1"); //set the HC-05 to master mode delay(1000); Serial.println(" AT+PAIR=copy here your adress,9"); //now the module should connnect automatically delay(1000); Serial.print("AT+BAUD7"); // Set baudrate to 576000 - eg Necomimi dafault Serial.begin(57600); // delay(1000);}void loop() {}
Mouse Controller CodeArduino
Upload this to the Arduino Leonardo. Controls the cursor on your computer, depending on the signal that gets from the Arduino Mega.
//Code by Imets Tamas for the Use the Force... Or your Brainwaves? project//Moves the mouse cursor through serial signals#include void setup() { Serial.begin(9600); // initialize mouse control:Mouse.begin();}void loop() { // use serial input to control the mouse:if (Serial.available()> 0) { char inByte =Serial.read(); switch (inByte) { case 'u':// move mouse up Mouse.move(0, -8); pauze; case 'd':// move mouse down Mouse.move(0, 8); pauze; case 'l':// move mouse left Mouse.move(-8, 0); pauze; case 'r':// move mouse right Mouse.move(8, 0); pauze; case 'c':// perform mouse left click Mouse.click(MOUSE_LEFT); pauze; } }}
Arduino_Mega_ServerArduino
Analzyzing brainwaves, controls everything...
/* Arduino Mega Code for "A Tool for the Mind" project by Imets Tams, 2nd of February, 2016 This code analyzes and organizes then sends forward incoming bluetooth serial signals from the brainwave sensor Feel free to edit, but don't forget to credit, For the variable values I used the characters of family's name, you can change them if you want:I. M. E. T. S. See more details at http://www.instructables.com/member/Imetomi/ or https://www.hackster.io/Imetomi */#include  // include the library #include  // include the library #include  // include the library #include  // include the library #include int led =13;int medled =50; //the LED to shows the meditation levelint attled =51; //the LED to shows the attention levelint blinkled =52;char robot;IRsend irsend; //IR led to pin 3SoftwareSerial mouse(18, 19); //RX, TX this goes to the Leaonardo BoardSoftwareSerial webserver(16, 15); //goes to the Particle Photon to create a web serverLiquidCrystal lcd(12, 11, 5, 4, 3, 2); // initialize the library with the numbers of the interface pinsBrain brain(Serial); //the Brainwaves are read with the help of the bluetooth module through hardware serialint closedeye =(brain.readLowAlpha()); //to detect blinkint attention =(brain.readAttention()); //to read attentionint brainsignal =(brain.readSignalQuality()); //to read signal qualityint meditation =(brain.readMeditation()); //to detect meditationint alpha =(brain.readHighAlpha()); //to detect closed eyeint lightatt;int lightmed;int blinklength;int prevsignal =0;void setup() { //here we're going to set the main settings:mouse.begin(9600); //set the baud rate webserver.begin(9600); //set the baud rate Serial.begin(57600); //set the baud rate (57600 is the Necomimi's bit/seconds rate) lcd.begin(16, 2); //start the LCD screen pinMode(led, OUTPUT); //set pinmodes for the leds and relays pinMode(attled, OUTPUT); //set pinmodes for the leds and relays pinMode(medled, OUTPUT); //set pinmodes for the leds and relays pinMode(blinkled, OUTPUT); //set pinmodes for the leds and relays pinMode(37, OUTPUT); //set pinmodes for the leds and relays pinMode(38, OUTPUT); //set pinmodes for the leds and relays pinMode(39, OUTPUT); //set pinmodes for the leds and relays lightatt =map(attention, 0, 100, 0, 255); //map the attention level for analogWrite the LED lightmed =map(meditation, 0, 100, 0, 255); //map the attention level for analogWrite the LED}void robotmode() { if (brain.update()) { if ((blinklength> 0) &&(blinklength <2000)) { //if you close eyour eyes for 2 seconds loop(); //you'll exit the robot controller mode } if (attention> 70) { irsend.sendNEC(0xFF18E7, 32); //go forward webserver.println("g"); vertraging (40); } if (meditation> 70) { irsend.sendNEC(0xFF10EF, 32); //spin webserver.println("q"); vertraging (40); } }}void loop() { if (brain.update()){ analogWrite(attled, lightatt); //analog write the attention led to show the actual attention level //the more focused you are, the stronger thee LED lights analogWrite(medled, lightmed); //analog write the attention led to show the actual attention level //the higher meditation level will light up the LED if ((closedeye> 30000) &&(alpha> 30000)) { //we use 2 values to be sure the user's eye is closed digitalWrite(blinkled, HIGH); //in english:if eyes are closed the LED will light up blinklength =millis(); // count milliseconds if eye closed } else if ((closedeye <30000) &&(alpha <30000)) { digitalWrite(blinkled, LOW); //in english:if eyes are opened the LED will turn off blinklength =0; } if ((blinklength> 0) &&(blinklength <2000)) { //if you close eyour eyes for 2 seconds webserver.println("a"); vertraging (40); robotmode(); //you'll be able to control the robots } if ((blinklength> 2001) &&(blinklength <4000)) { //if you close eyour eyes for 3-4 seconds webserver.println("a"); vertraging (40); relay(); //you'll be able to control the the home automation system } if ((blinklength> 4001) &&(blinklength <6000)) { //if you close eyour eyes for 4-6 seconds webserver.println("a"); vertraging (40); mousecontrol(); //you'll be able to control the mouse } Serial.println(brain.readCSV()); //print the data on serial monitor, not necessary, it's only for testing }}void relay() { webserver.println(""); if (brain.update()) { if ((blinklength> 0) &&(blinklength <2000)) { //if you close eyour eyes for 2 seconds loop(); //you'll exit the relay controller mode } if(attention> 70) { //turn on relay1 digitalWrite(37, HIGH); webserver.println("g"); prevsignal =1; } if(meditation> 70) { //turn on relay2 digitalWrite(37, HIGH); webserver.println("q"); prevsignal =1; } if(1000> blinklength> 0) { //turn on relay3 digitalWrite(37, HIGH); webserver.println("qj"); prevsignal =1; } if((attention> 70) &&(prevsignal ==1)) { digitalWrite(37, LOW); webserver.println("q"); prevsignal =1; //check if is already turned on, then turn off } if((meditation> 70) &&(prevsignal ==1)) { digitalWrite(37, LOW); webserver.println("qj"); prevsignal =1; //check if is already turned on, then turn off } if((1000> blinklength> 0) &&(prevsignal ==1)) { digitalWrite(37, LOW); webserver.println("a"); prevsignal =1; //check if is already turned on, then turn off } }}void mousecontrol() { //you'll need a few hours of practice to control the cursor perfectly webserver.println("z"); //forward data to the webserver if(brain.update()) { if (0  70) { mouse.println('c'); //click webserver.println("t"); } }}
RobotControllerHeadset.inoArduino
For those who want to build an IR robot.
#include #include #include IRsend irsend;Brain brain(Serial);const int ledPin =3; long interval =500; long previousMillis =0;int ledState =LOW; int medValue;void setup() { // Set up the LED pin. pinMode (ledPin, UITGANG); // Start the hardware serial. Serial.begin(57600);}void loop() { // Expect packets about once per second. if (brain.update()) { Serial.println(brain.readCSV()); // Attention runs from 0 to 100. medValue =brain.readMeditation(); } // Make sure we have a signal. if(brain.readSignalQuality() ==0) { // Send a signal to the LED. if (medValue> 65) {irsend.sendNEC(0xFF10EF, 32); vertraging (40); } if (brain.readAttention()> 65) {irsend.sendNEC(0xFF18E7, 32); vertraging (40); } } }
Brain Library
Used to measure attention and meditation level.https://github.com/kitschpatrol/Brain
SoftwareSerial Library
Used to ensure multiple communication pins.https://github.com/arduino/Arduino/tree/master/hardware/arduino/avr/libraries/SoftwareSerial
IRremote Library
Decoding and sending IR signals.https://github.com/z3t0/Arduino-IRremote

Schema's

Use this schematic to make the main server. Schematic for the DIY IR robot Schematic for the DIY 3 channel relay module. Used Arduino pins:D37, D38, D39. Schematic for the motor driver. Connect the pins to the Arduino. Schematic for the main server's electronics. Schematic for the Arduino UNO robot Schematic for the IR robot Use this schematic to make the main server. Schematic for the headset's electronics

Productieproces

  1. Een draadloos sensornetwerk in uw huis bouwen
  2. De beste accessoires voor je Raspberry Pi
  3. Hoe gebruik je de lijmstift op je Mark One Print Bed
  4. De waterdruppels vastleggen met Arduino
  5. Obstakels vermijden robot met servomotor
  6. Lijnvolger Robot
  7. Ken de temperatuur van uw huis overal met Arduino Cloud!
  8. Arduino-trainingsplatform
  9. Hoe gemakkelijk is het om een ​​thermistor te gebruiken?!
  10. 4 belangrijke tekenen dat uw motor het einde van zijn levensduur bereikt
  11. DC versus AC-motor:wat is het verschil?