Sunday, November 13, 2016

External Speaker

I don't intend to write a whole how-to about this project, but I still want to share a bit more than just a few pictures.

The Plan

What I made is an external speaker with built-in amplifier to use with your laptop, smartphone, mp3 player, etc.
This project started out differently. I actually was thinking of building my own internet radio. Just by pressing power on I would get my favorite radio stations that I can't hear on FM because they are too far away. Since I already had a Raspberry Pi 2 laying around I thought of using that. I also had some decent old speakers. All I needed was a proper amplifier to get the sound out louder and then I would try and cram everything inside of the speakers, with buttons and knobs on the outside.

This is when I bought the Adafruit Class D Amplifier which only requires some soldering to get it to work. I put the amplifier together and tested it worked properly. In the meantime I was thinking what else I would need for this project. This was really a project where I hadn't thought everything through before hand. The more I was thinking about it the more I came to the conclusion that the internet radio and the speaker with amplifier should be separate things. I would rather have the amplifier for more than just the internet radio.

The finished speaker


So I made that decision, only the amplifier inside the speaker.
To make this possible I needed do some more shopping:
  • variable resistor 1kOhm
  • a knob to fit on the resistor
  • audio input plug
  • power input for my 9V power adapter
  • connectors
  • on/off switch
  • power on LED
  • audio connectors for a second speaker

Not so difficult, but messy IRL

Everything worked fine when connected, but I still needed to get it inside the speaker.
Woodworking
My speaker had no clear way of removing the wooden outside so instead I removed the front cover and screwed out the speaker itself. That gave we a large hole the access the inside, but it's wasn't ideal to say the least. I wanted to place the volume control and audio input on the side and the on/off switch+LED on top. The power input went in the back together with the connector for a second speaker.

Woodworking


Drilling holes from the outside is easy, but... the side panel turned out the give me some headaches. The wire on the variable resistor and on the audio input are both very short and that meant that around the hole I had drilled I needed extra space on the inside. I don't have proper tools for that so I had use a wood drill bit by hand until the elements stuck out far enough so they could be tightened with a bolt. That work costed me a lot of time and made me wanna quit the whole project all together at certain points. But at last everything worked out and on the outside it looks quite good.

Variable without knob and audio input




I made sure I had pretty long wires on every component. What I should have done was mark what every wire was. I now had to place all the components in their position and then reconnect all the wires again. So sometimes I had the feel where a wire was coming from to make sure if I was connecting the switch or the LED (big difference). When I had tested the system still worked pushed everything back in gently and used some hot glue to attach the amplifier to the bottom.

So this must actually be the most usefull thing I have ever built :) The sound is pretty good and the volume is good enough for me. We use it to listen to music and when watching a movie. Worst complaint I have is that it hums when a YouTube video ends on my phone. Also some laptops output a weird balans making movie sound as if it's covered in pillows. We needed to shut of the Dolby Surround to solve that.

Anyway, I'm glad how the project worked out. Any questions are always welcome.

Some pictures
Spaghetti


Power input and audio connector for the second speaker





Saturday, July 16, 2016

Maakbare Wereld Best Of

Afgelopen weekend (9 juli) was de laatste aflevering van de Maakbare Wereld te lezen in de Volkskrant. Dat is heel jammer, maar we kunnen terug kijken op heel veel mooie projecten.
Daarom hier een klein overzicht van wat wij zelf de allergaafste bouwsels vonden. We hebben geprobeerd van elke maker (Ans Hekkenberg, Ernst Arbouw, Rolf Hut en ik (Cor van Essen)) er twee uit te kiezen en dat is nog verdraaide lastig.
Sommige projecten zijn heel geschikt om zelf na te bouwen zelfs als je weinig ervaring hebt, andere laten zien dat elektronica niet zo heel moeilijk is als je maar begint en de beste categorie zijn de dingen die gewoon heel gaaf zijn.

Waterballon bazooka

Allereerst de waterballon bazooka van Ans. Bestaande uit stukken PVC, maar krachtig genoeg om een tuinstoel te verslaan. Ik zit bij Ans in het team als we een watergevecht houden.


Teruglezen kan via Blendle

Fiets kwijt?

Lekker herkenbaar en nuttig; Je fiets laten piepen zodat je hem op het station terug vind, Rolf bouwt het eventjes.





Stralingsmeter

Ernst bouwde een Geiger-Möller teller van een brandmelder, dat is nog eens cool. Ernst houdt er wel van om een bestaand apparaat om te bouwen tot iets leukers.
Er hoeft geen goede reden te zijn om zelf een geigerteller te maken
Blendle

Harry Potter schilderij

Ik zelf heb een fotolijst gemaakt waarop ik begin te zwaaien als er iemand voorbij komt. Met een Raspberry Pi en zonder solderen.

Fietsremlicht

De fietsen is een geliefd onderwerp onder de makers. Ik herinner me ook nog een fietstasslot en een oplader. Het fietsremlicht van Ans is er eentje waar je van afvraagt waarom het überhaupt nog niet op elke fiets zit. Bovendien zeer goed na te bouwen.



Trein Apocalyps

Ernst wist een mooi Internet Of Things project te maken, waardoor hij weet wanneer het chaos op het spoor is en dus misschien maar thuis moet blijven.

NS-lamp.

Blendle

Een spelcomputer met parkeermeter

Willen de kinderen niet stoppen met gamen? Waarom geen parkeermeter aansluiten op de spelcomputer.
Rolf bouwde deze creatieve oplossing.



Pratend Zwaard

Een demonisch pratend zwaard, gewoon omdat het kan. Het project waar ik het meeste tijd in gestoken heb, maar wat dan ook heel veel voldoening gaf.



Dat waren maar een paar van de toppers van de afgelopen twee jaar. Heb jij een andere favoriet? Laat het maar weten in de comments.




Tuesday, July 5, 2016

Talking Sword Video

I shot a short video of the sword in a more finished version. It could still use some touches, but I think it already looks pretty damn awesome. And it talks!


If someone is interested I'll translate the how-to stuff in English, so if you are leave a comment below.




Friday, July 1, 2016

Sprekend Zwaard (hout, foto's en video)

In de Maakbare Wereld van 2 juli kun je lezen over mijn sprekende zwaard. In mijn andere blog post kun je lezen over de elektronica kant van het verhaal. Maar zonder een omhulsel is het natuurlijk niks.

Ik heb mijn zwaard uit hout gemaakt omdat dat makkelijker te bewerken is zo thuis op de keukentafel :) De basis is een flinke lat waar ik grof de vorm op getekend heb en met een decoupeerzaag uitgezaagd. Vervolgens heb ik middenlijnen op alle zijdes getekend heb hier met vijlen naartoe geschuurd. Uiteindelijk met schuurpapier wat afgewerkt. Met beitels heb ik de naam van mijn zwaard gekerfd in runen schrift.

Om plaats te maken voor de elektronica heb ik in de kling met een beitel plek gemaakt. De batterij kwam aan de bovenkant en de Teensy en de speaker aan de onderkant.
De elektronica heb ik op hun plek gehouden met isolerend tape. Ook om later eventuele kortsluitingen te voorkomen. Mooi moment voor een video van mijn zwaard op dat punt met de elektronica in actie.



Afwerken

Een houten zwaard ziet er altijd wat knullig uit daarom heb ik het een metalen look gegeven die ik heb afgekeken van Adam Savage (bekend van Myth Busters). Check deze video voor de lange uitleg.
In het kort: bedek je zwaard met zelfkleven aluminium en duw voorzichtig lichtbelletjes er uit. Spuit matte zwarte verf over je zwaad. Als de verf droog is schuur je met en schuurpapiertje veel verf er weer af. Er blijft in al die onregelmatigheden, die je eerst misschien lelijk vond, wat verf achter en het eindresultaat is net een oud roestig metalen zwaard.

Aluminium er op




Zwart gespoten en opgeschuurd



Ik hoop dat dit ook een leuke inspiratie kan zijn voor mensen. Het was mijn eerste echte ervaring met houtbewerking en het maken van een prop. Het was erg leuk.en ik ben best tevreden.


Sprekend Zwaard (elektronica dingen)

In de Volkskrant van 2 Juli kun je in mijn Maakbare Wereld bijdrage lezen dat ik een sprekend zwaard heb gemaakt. Ik zou hier wat onderdelen in meer detail willen uitleggen met name de elektronische delen.

Hardware


In het zwaard heb ik een Teensy 3.2 met Prop shield gebruikt. Daarnaast een kleine metalen speaker en een oplaadbare batterij via Adafruit. De Teensy en prop shield heb ik aan elkaar gesoldeerd en na wat forum leeswerk en het goed bekijken van onderstaande foto wist ik hoe dat moest.

Je kunt zien dat er aan drie zijdes pinnetjes verbonden moeten worden.

De batterij moet op een 5V (rode draad) en GND (zwarte draad) pin aangesloten worden. Ik heb dit pas helemaal aan het einde gedaan nadat ik alle software er al op had. De speaker moet de + en - pinnen worden aangesloten.

Software
Je kunt de Teensy programmeren door een USB kabel aan te sluiten en de Arduino software te gebruiken met de Teensyduino add-on. De prop shield beschrijvingspagina heeft eerst een mooie beschrijving hoe je de sensoren kunt ijken en dat is zeker de moeite om even te doen.

Daarna wilde ik het geluid testen en daarvoor heb ik de code bekeken in Examples van de Arduino omgeving onder Talkie. Hier kun je een soort robot stem wat woordjes laten zeggen. Om deze code te laten werken moet je het volgende veranderen. Vervang AudioOutputI2S door AudioOutputAnalog en haal alles weg waar SGTL5000 staat.

Om het volume harder te krijgen moet je de volgende regels toevoegen.

 AudioMemory(20);  
  dac1.analogReference(EXTERNAL); // much louder!  
  delay(50);       // time for DAC voltage stable  
  pinMode(5, OUTPUT);  
  digitalWrite(5, HIGH); // turn on the amplifier  
  delay(10);       // allow time to wake up  

Als je nu geluid kunt produceren kun je doorgaan om eigen geluiden af te spelen

Audio bestanden gereedmaken 

Je kunt op de pc een geluid opnemen of een ander geluid gebruiken, maar voordat dat je het kunt gebruiken moet je het eerst omzetten in het RAW formaat. Hiervoor kun je het programma Sox gebruiken. Dit programma moet je gebruiken vanaf de command line, daarvoor kun je zoeken in Windows naar cmd.exe (net als ms-dos vroeger :)).  Ik heb er voor gekozen om de bestanden die ik wilde omzetten in dezelfde map als sox.exe te plaatsen.Bij mij was dat C:\Program Files (x86)\sox-14-4-2.
Als je deze gevonden hebt moet je een bestand omzetten met:
 sox file.mp3 --bits 16 --rate 44100 --channels 1 file.raw

Hier moet je nog je eigen bestandsnamen invullen. Het eindresultaat moet compleet in hoofdletters om te werken op de Teensy, dus bijvoorbeeld GELUID.RAW

Audio bestanden kopiëren
Als het omzetten gelukt is wil je het resultaat kopiëren op de flash drive van de prop shield. Allereerst moet de Teensy weten dat er iets gekopieerd gaat worden. Download eerst het volgende programma Teensytransfer. Je moet de usb mode op "Raw Hid" zetten in de Arduino omgeving. Om  teensytransfertool.ino op je Teensy uploaden moet je ervoor zorgen dat het in een map staat samen met version.h, Teensytranser.h en Teensytranfer.cpp. Het ino bestand kun je dan uploaden op de Teensy.
In de map waar Teensytranser gedownload is vind je ook een teensytransfer.zip bestand waar in teensytransfer.exe te vinden is. Deze moet je uitpakken. In dezelfde map heb ik de gevonverteerde RAW bestanden geplaatst.
Hierna moet je weer de command line openen (cmd.exe) en naar de map gaan waar het teensytransfer.exe en RAW bestanden te vinden zijn.

Om te zien of alles in orde is tik je: teensytransfer -i teensy
Om een bestand te kopiëren tik je: teensytransfer -w eeprom GELUID.RAW
Om te zien of dat gelukt is tik je: teensytranser -l


Geluid afspelen

Nu is het toch eindelijk tijd om onze eigen geluiden af te spelen. Ik zal gelijk overgaan tot mijn eigen code. Hier zijn er drie bestanden die afgespeeld worden onder verschillende omstandigheden. Eentje bijvoorbeeld als er lang geen beweging is. De andere twee als opeens wel beweging of draaiing is. Aangezien we al genoeg gelezen hebben zal ik de code hier gewoon plaatsen.

 #include <NXPMotionSense.h>  
 #include <Wire.h>  
 #include <EEPROM.h>  
 #include <SPI.h>  
 #include <SD.h>  
 #include <SerialFlash.h>  
 #include <Audio.h>  
   
 NXPMotionSense imu;  
 NXPSensorFusion filter;  
 AudioPlaySerialflashRaw playFlashRaw1; //xy=145,62  
 AudioPlaySerialflashRaw playFlashRaw2; //xy=161,115  
 AudioMixer4       mixer1;     //xy=390,210  
 AudioOutputAnalog      dac1;      //xy=740,251  
 AudioConnection     patchCord1(playFlashRaw1, 0, mixer1, 0);  
 AudioConnection     patchCord2(playFlashRaw2, 0, mixer1, 1);  
 AudioConnection     patchCord3(mixer1, 0, dac1, 0);  
 AudioConnection     patchCord4(mixer1, 0, dac1, 1);  
 int restTime = 0;  
 int yesTime = 10000;  
 int finallyTime = 10000;  
   
   
 void setup() {  
  pinMode(5, OUTPUT);  
  digitalWrite(5, HIGH);//Enable Amplified PROP shield  
  delay(10);  
  if (!SerialFlash.begin()) {  
   while (1)  
    {  
     Serial.println ("Cannot access SPI Flash chip");  
     delay (1000);  
    }  
  }  
  AudioMemory(20);  
  dac1.analogReference(EXTERNAL); // much louder!  
  delay(50);       // time for DAC voltage stable  
  pinMode(5, OUTPUT);  
  digitalWrite(5, HIGH); // turn on the amplifier  
  delay(10);   
  mixer1.gain(0, 0.4);  
  mixer1.gain(1, 0.4);  
    
   //Serial.begin(9600);  
  imu.begin();  
  //filter.begin(100);  
 }  
   
 void loop() {  
  float ax, ay, az;  
  float gx, gy, gz;  
  float mx, my, mz;  
  //float roll, pitch, heading;  
  float energy = 0;  
  float turn = 0;  
    
  if (imu.available()) {  
   // Read the motion sensors  
   imu.readMotionSensor(ax, ay, az, gx, gy, gz, mx, my, mz);  
   energy = sqrt(ax*ax+ay*ay+az*az);  
   turn = sqrt(gx*gx + gy*gy + gz*gz);  
   Serial.println("turn: " );  
   Serial.println(turn);  
  }  
  if (turn > 400)  
  {  
   if (finallyTime > 100000)  
   {  
    playFlashRaw1.play("FINALLY.RAW");  
    delay(2000);  
      
   }  
   restTime = 0;  
   finallyTime = 0;  
  }  
    
  if (energy> 3.5)  
  {  
   if(yesTime>10000)  
   {  
    playFlashRaw1.play("YES.RAW");  
   //Serial.println ("sound played?");  
    delay(2000);  
     
   }  
    restTime = 0;  
   yesTime = 0;  
  }  
  restTime = restTime + 1;  
   yesTime = yesTime +1;  
  finallyTime = finallyTime +1;  
    
  if (restTime > 1000000)  
  {  
   playFlashRaw1.play("EZKIEL.RAW");  
   delay(10000);  
   restTime = 0;  
  }  
   // Update the SensorFusion filter  
   // filter.update(gx, gy, gz, ax, ay, az, mx, my, mz);  
   
   // print the heading, pitch and roll  
   /*roll = filter.getRoll();  
   pitch = filter.getPitch();  
   heading = filter.getYaw();  
   Serial.print("Orientation: ");  
   Serial.print(heading);  
   Serial.print(" ");  
   Serial.print(pitch);  
   Serial.print(" ");  
   Serial.println(roll);*/  
    
 }  


Final Notes


Ik heb nu nog maar beperkt gebruik gemaakt van de mogelijkheden van de prop shield. Je kunt er ook knoppen op aansluiten of gewoon pins als tastsensor gebruiken. Sensoren die voor Arduino bedoeld zijn zullen ook wel werken denk ik zo. De prop shield kun je natuurlijk in van alles en nog wat verwerken.
Ik hoop dat dit stukje mensen wat sneller op weg helpt, want persoonlijk vond ik het een flinke speurtocht.
En zoals altijd, heb je vragen stel ze gerust.


Friday, May 20, 2016

Maakbare Wereld t-shirts

Wie wil er nu niet een supergaaf Maakbare Wereld t-shirt? Ik in elk geval wel en daarom heb ik er maar eentje ontworpen.



Waar kun je zoiets moois bestellen vraag je je af? Nou hier.

Er zijn meerdere modellen verkrijgbaar. Als je op 24 of 25 mei besteld gebruik dan de code 20FUN waardoor zomaar 20% korting krijgt op je bestelling.

Friday, May 6, 2016

Harry Potter fotolijst

In de Maakbare Wereld van 7 mei 2016 kun je lezen over mijn Harry Potter lijst.
Ik wil hier nog wat uitleg geven waarvoor niet genoeg ruimte was en natuurlijk de code die ik geschreven heb.

Allereerst wil ik Antratek bedanken die mij gesponsord hebben bij dit project, omdat ze dit een erg leuk idee vonden. Het is een goeie plek om Arduino-, Raspberry Pi- en wat al niet voor spullen te bestellen.

Demo


Gelijk maar even een demo van hoe het werkt in het echt:



Hardware

Ik heb de volgende hardware gebruikt: een Raspberry Pi 2, een 7" touch screen van Raspberry Pi, en een HC-SR501 bewegingssensor. Er moeten nog wat draadjes bij kijken, maar dit keer geen solderen.

Verder moet je niet vergeten dat je een draadloos toetsenbord en muis nodig hebt en ook een wifi dongle om updates te kunnen downloaden.

Bij de pins op de Raspberry Pi staan geen nummers of namen, dus je moet wel een beetje opletten waar je wat inprikt.

Het scherm heeft een platte dunne stekker waar niet veel fout mee kunt doen. Daarnaast moet je ook nog vier draadjes verbinden tussen de Raspberry en het scherm. 5V, Ground, GPIO 2 (pin 02) en  GPIO 3 (pin 05).

de bewegingssensor heeft ook 5V en Ground nodig en nog een laatste die naar een GPIO pin moet. Ik heb daarvoor pin 07 gebruikt.

Op de foto is het niet echt goed te zien, maar toch bij deze:






Ik heb een grote houten lijst er rond gebouwd, zodat ik het geheel rechtop kan zetten op een kast, maar je kunt ook zelf iets moois verzinnen.


Software

Het belangrijkste is natuurlijk nog de code die verschillende gaat laten afspelen. Ik heb een minuut lang mezelf gefilmd en dit in Movie Maker in kleine stukjes gehakt. Die stukjes worden achter elkaar afgespeeld. Tenzij er natuurlijk iemand voorbij loopt, dan wordt het filmpje afgespeeld waarbij ik zwaai.

De code is denk ik goed te begrijpen. Het begint met een heleboel libraries die geïmporteerd worden. de pin voor de bewegingssensor wordt geactiveerd. De namen van de verschillende mappen worden vernoemd. Daarna komt er een while loop waar de filmpje in een subprocress worden afgespeeld.
De filmpjes heten 1.h264, 2.h264, etc. De variable 'scene' begint bij 1 en wordt steeds eentje opgehoopt tot de laatste (11) is bereikt.

Het program is niet ideaal, maar ik wilde het ook niet te ingewikkeld maken. Hopelijk vind ik nog eens tijd om bugs op te lossen, om een functie in te bouwen waarmee je kunt stoppen en nog wat meer interacties in te bouwen (ik heb nog wat meer filmfragmenten klaarliggen).

#!usr/bin/python
import RPi.GPIO as GPIO
import time
import os
import subprocess
import glob

GPIO.setmode(GPIO.BOARD)
pir=7
GPIO.setup(pir, GPIO.IN)
print("Waiting for sensor to initialize")
time.sleep(2)

pathPlayer =  '/home/pi/Public/programs/pi_hello_video-master/hello_video/'
pathVideo = '/home/pi/Videos/harrypotter/'
scene = 1
while True:
    infile = pathVideo +str(scene) + ".h264"
    subprocess.call( [pathPlayer+"hello_video.bin", infile])
    if scene==11:
          scene = 1
     else:
          scene=scene+1

    if GPIO.input(pir):
          infile = pathVideo + "zwaaien.h264"
          subprocess.call( [pathPlayer+"hello_video.bin", infile])

print("Finished")


Video's omzetten

De filmpjes moeten omgezet worden in het .h264 formaat te werken. Op de Adafruit website staat hoe je dit moet doen en ook waar je de hello_video speler kunt downloaden. Je moet dingen in je terminal doen van je computer. Die open je in Windows door 'cmd' te zoeken.

Al met al zijn er heleboel stappen die je moet doorlopen, maar allemaal wel te doen op zich. Ze zijn ook niet zo afhankelijk van elkaar. Je kunt bijvoorbeeld best later nog nieuwe filmpjes maken. Of de code aanpassen zodat de filmpjes in een andere volgorde worden gespeeld.

Zoals als altijd, heb je vragen stel ze gerust. Ik ben vast dingen vergeten uit te leggen en sommige dingen waren voor mij misschien logisch die voor iemand anders heel onduidelijk zijn. Het was voor mij de eerste keer dat ik met een Raspberry Pi heb gewerkt en het viel me heel erg mee, maar het blijft complex.

Happy building!