Inhoudsopgave:
- Stap 1: Dingen die je nodig hebt
- Stap 2: Samenvatting
- Stap 3: Het basisidee
- Stap 4: Walabot
- Stap 5: Aan de slag
- Stap 6: De Raspberry Pi instellen - 1
- Stap 7: De Raspberry Pi instellen - 2
- Stap 8: De Raspberry Pi instellen - 3
- Stap 9: De Raspberry Pi instellen - 4
- Stap 10: Python
- Stap 11: Voor de Walabot
- Stap 12: Voor de servo-interface
- Stap 13: Voor het LCD-scherm
- Stap 14: Blynk
- Stap 15: De Blynk-app configureren
- Stap 16: U kunt deze QR-code gebruiken met de Blynk-app om mijn project te klonen om u tijd te besparen
- Stap 17: Blynk uitvoeren met de Raspberry Pi en de Blynk HTTPS voor Python gebruiken
- Stap 18: het script automatisch uitvoeren
- Stap 19: De hardware
- Stap 20: Behuizingsontwerp
- Stap 21: Guts Shots
- Stap 22: Final Assembly Shots
- Stap 23: De Walabot aan de standaard bevestigen
- Stap 24: Hardware STL-bestanden voor 3D-printen
- Stap 25: Schema's voor het bedraden van het ding
- Stap 26: Coderen
- Stap 27: Github-opslagplaatsen om te gebruiken
- Stap 28: Conclusie
Video: Walabot FX - Guitar Effect Control - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:20
Bedien je favoriete gitaareffect met niets anders dan geweldige gitaarhoudingen!
Stap 1: Dingen die je nodig hebt
Hardware onderdelen
Walabot - Walabot
Raspberry Pi - Raspberry Pi 3 Model B
Sunfounder LCD1602
SunFounder PCA9685 16 Kanaals 12 Bit PWM Servo Driver voor Arduino en Raspberry Pi
Servo (generiek) Geen link
9V batterijclip
4xAA batterijhouder
AA-batterijen
Jumperdraden (generiek)
DPDT Vergrendelbare voetschakelaar
Korg SDD3000-PDL
Software-besturingssystemen, apps en online services
Autodesk Fusion360 -
Blynk -
Gereedschap enz
3D-printer
Soldeerbout
Stap 2: Samenvatting
Hoe zou het zijn om de muzikale expressie te beheersen met alleen de positie van je gitaar in de 3D-ruimte? Laten we een prototype van iets maken en erachter komen!
Stap 3: Het basisidee
Ik wilde 3 effectparameters in realtime kunnen regelen, ik wilde dit doen met behulp van hoe ik mijn gitaar positioneerde. Dus één ding was duidelijk, ik zou een paar dingen nodig hebben.
- Een sensor die 3D-ruimte kan zien
- Servo's om aan de knoppen te draaien
- Een LCD-scherm
- Een I2C Servo-stuurprogramma
- Een Raspberry Pi
- Python leren
Stap 4: Walabot
Wil je door muren heen kijken? Zintuiglijke objecten in 3D-ruimte? Voel je of je aan de andere kant van de kamer ademt? Nou, je hebt geluk!
De Walabot is een geheel nieuwe manier om de ruimte om je heen te voelen met behulp van radar met laag vermogen.
Dit zou de sleutel tot dit project worden, ik zou in staat zijn om de carteasan (X-Y-Z) coodinaten van objecten in de 3D-ruimte te nemen en deze toe te wijzen aan servoposities, waardoor de manier waarop een gitaareffect klinkt, in realtime verandert, zonder het pedaal aan te raken.
Winnen.
Meer informatie over de Walabot vind je hier
Stap 5: Aan de slag
Allereerst heb je een computer nodig om de Walabot aan te sturen, voor dit project gebruik ik een Raspberry Pi 3 (hier in genoemd bij RPi) vanwege de ingebouwde WiFi en algemene extra uitstraling
Ik kocht een SD-kaart van 16 GB waarop NOOBS vooraf was geïnstalleerd om het leuk en eenvoudig te houden, en koos ervoor om Raspian te installeren als mijn Linux-besturingssysteem naar keuze
(als je niet bekend bent met het installeren van Raspian, neem dan even de tijd om dit een beetje te lezen)
OK, als je Raspian eenmaal op je RPi hebt, zijn er een paar configuratiestappen die je moet nemen om dingen klaar te maken voor ons project
Stap 6: De Raspberry Pi instellen - 1
Zorg er eerst voor dat u de nieuwste kernelversie gebruikt en controleer op updates door een opdrachtshell te openen en te typen
sudo apt-get update
sudo apt-get dist-upgrade
(sudo is toegevoegd om er zeker van te zijn dat je administratieve rechten hebt, dingen zullen bijvoorbeeld werken)
Dit kan even duren, dus ga lekker een kopje thee drinken.
Stap 7: De Raspberry Pi instellen - 2
U moet de Walabot SDK voor RPi installeren. Ga vanuit uw RPi-webbrowser naar https://www.walabot.com/gettingstarted en download het Raspberry Pi-installatiepakket.
Vanuit een opdrachtshell:
cd-downloads
sudo dpkg -I walabotSDK_RasbPi.deb
Stap 8: De Raspberry Pi instellen - 3
We moeten beginnen met het configureren van de RPi om de i2c-bus te gebruiken. Vanuit een opdrachtshell:
sudo apt-get install python-smbus
sudo apt-get install i2c-tools
zodra dit is gebeurd, moet u het volgende toevoegen aan het modulebestand:
Vanuit een opdrachtshell:
sudo nano /etc/modules
voeg deze 2 strings op aparte regels toe:
i2c-dev
i2c-bcm2708
Stap 9: De Raspberry Pi instellen - 4
De Walabot trekt behoorlijk wat stroom, en we zullen ook GPIO's gebruiken om dingen te regelen, dus we moeten deze instellen
Vanuit een opdrachtshell:
sudo nano /boot/config.txt
voeg de volgende regels toe aan het einde van het bestand:
safe_mode_gpio=4
max_usb_current=1
De RPi is een uitstekend hulpmiddel voor makers, maar het is beperkt in de stroom die het naar de Walabot kan sturen. Daarom voegen we een max. stroom van 1A toe in plaats van de meer standaard 500mA
Stap 10: Python
Waarom Python? Nou, omdat het super eenvoudig te coderen is, snel aan de slag te gaan en er zijn heel veel goede python-voorbeelden beschikbaar! ik had het nog nooit eerder gebruikt en was al snel in een mum van tijd up and running. Nu de RPi is geconfigureerd voor wat we willen, is de volgende stap om Python te configureren om toegang te krijgen tot de Walabot API, LCD Servo-interfaces
Stap 11: Voor de Walabot
Vanuit een opdrachtshell
Sudo pip-installatie "/usr/share/walabot/python/WalabotAPI-1.0.21.zip"
Stap 12: Voor de servo-interface
Vanuit een opdrachtshell
sudo apt-get install git build-essentiële python-dev
cd ~
git kloon
cd Adafruit_Python_PCA9685
sudo python setup.py installeren
Waarom moeten we een servodriver gebruiken? Nou, voor een RPi een paar redenen.
1. De stroom die door een servo wordt getrokken, kan erg hoog zijn, en dat aantal wordt groter naarmate je meer servo's hebt (natuurlijk). Als je de servo rechtstreeks vanuit een RPi bestuurt, loop je het risico dat de stroomtoevoer wordt opgeblazen
2. Timings van de PWM (Pulse Width Modulation) die de positie van de servo's regelen, zijn erg belangrijk. Omdat de RPi geen realtime besturingssysteem gebruikt (er kunnen onderbrekingen en dergelijke zijn), zijn de timings niet nauwkeurig en kunnen de servo's nerveus gaan trillen. Een speciale driver maakt nauwkeurige besturing mogelijk, maar maakt het ook mogelijk om maximaal 16 servo's toe te voegen, dus dit is geweldig voor uitbreiding.
Stap 13: Voor het LCD-scherm
open uw RPi-webbrowser
www.sunfounder.com/learn/category/sensor-k…
downloaden
github.com/daveyclk/SunFounder_SensorKit_…
Vanuit een opdrachtshell:
sudo mkdir /usr/share/sunfounder
Gebruik de grafische verkenner om de python-map uit het zipbestand naar je nieuwe sunfounder-map te kopiëren
Het LCD-scherm wordt gebruikt om de gebruiker te informeren over wat er precies aan de hand is. Toont het configuratieproces tot en met de x-, y- en z-waarden die op elke servo worden toegewezen
Stap 14: Blynk
Blynk is een briljante IoT-service waarmee je een app op maat kunt maken om je spullen te beheren. Het leek de perfecte oplossing om me de afstandsbediening van de walabot te geven om echt de instellingen in te voeren …
Een probleem. Blynk wordt momenteel niet ondersteund op het Python-platform, bugger. Maar vrees niet! ik heb een leuk werkje kunnen vinden dat afstandsbediening en invoer van parameters op afstand mogelijk maakt! het is een beetje hacky
de eerste stap is om de Blynk-app te downloaden van je favoriete app store
Ten tweede, meld u aan voor een account
Zodra dat is gebeurd, opent u de app en start u een nieuw project, waarbij u Raspberry Pi 3 als hardware kiest.
De app wijst je een toegangstoken toe (dit heb je nodig om je code in te voeren)
Als je dat eenmaal hebt gedaan. u moet de app instellen zoals weergegeven in de afbeeldingen. Dit is hoe het zal communiceren met de walabot.
Stap 15: De Blynk-app configureren
Stap 16: U kunt deze QR-code gebruiken met de Blynk-app om mijn project te klonen om u tijd te besparen
OK Nu de app helemaal is ingesteld, kunnen we Python en de RPi configureren om er via internet mee te praten. Magie
Stap 17: Blynk uitvoeren met de Raspberry Pi en de Blynk HTTPS voor Python gebruiken
Ten eerste moet u de Blynk HTTPS-wrapper voor Python installeren
Vanuit een opdrachtshell:
sudo git clone
sudo pip install blynkapi
Ten tweede moet u de Blynk-service op de RPi. installeren
Vanuit een opdrachtshell:
git kloon
cd blynk-bibliotheek/linux
maak alles schoon
om de blynk-service uit te voeren
sudo./blynk --token=YourAuthToken
Om ervoor te zorgen dat de Blynk-service bij het opstarten wordt uitgevoerd, moet u de /etc/rc.local. wijzigen
door te doen
sudo nano /etc/rc.local
voeg dit aan het einde toe
./blynk-bibliotheek/linux/blynk --token=mijn token &
(ik heb ter referentie een kopie van mijn /etc/rc.local-bestand in de codesectie opgenomen)
Om te testen of het werkt, typ je gewoon
sudo /etc/rc.local start
De Blynk-service zou nu moeten werken
Stap 18: het script automatisch uitvoeren
Nu dit allemaal is ingesteld en geconfigureerd, en we de python-code gereed hebben. we kunnen dingen zo instellen dat ze automatisch worden uitgevoerd, zodat we het toetsenbord en de monitors kunnen dumpen
Er zijn een paar dingen te doen
Maak een nieuw scriptbestand om het Python-programma uit te voeren
sudo nano guitareffect.sh
voeg deze regels toe
#!/bin/sh
python /home/pi/GuitarEffectCLI.py
zorg ervoor dat je het opslaat
Vervolgens moeten we het script toestemming geven om te draaien door te typen
Sudo chmod +x /home/pi/guitareffect.sh
En tot slot moeten we dit script toevoegen aan het bestand /etc/rc.local waar we eerder aan hebben gesleuteld.
Sudo nano /etc/rc.local
Toevoegen
/home/pi/guitareffect.sh &
zorg ervoor dat u de "&" opneemt, zodat het Python-script op de achtergrond kan worden uitgevoerd
Rechts! Dat is alle configuratie en software gesorteerd, daarna is het tijd om de hardware aan te sluiten
Stap 19: De hardware
Eerste Breadboard-prototype
Stap 20: Behuizingsontwerp
De behuizing is ontworpen en weergegeven in de geweldige Fusion360
Stap 21: Guts Shots
Stap 22: Final Assembly Shots
Stap 23: De Walabot aan de standaard bevestigen
Gebruik de zelfklevende metalen schijf die bij de walabot wordt geleverd om hem op zijn plaats te bevestigen
Stap 24: Hardware STL-bestanden voor 3D-printen
Stap 25: Schema's voor het bedraden van het ding
Stap 26: Coderen
Gebruik het bijgevoegde Python-script voor uw project
van _future_ import print_functionvan sys import platform van os import systeem van blynkpi import Blynk import WalabotAPI import tijd import RPi. GPIO als GPIO
#GPIO instellen met bordnummering
GPIO.setmode(GPIO. BOARD) GPIO.setup (18, GPIO. IN, pull_up_down = GPIO. PUD_UP)
#blynk auth token
auth_token = "uw_auth_token_hier"
# Importeer de PCA9685-module voor servobesturing.
importeer Adafruit_PCA9685
#LCD-module importeren vanaf locatie
van imp import load_source LCD1602 = load_source('LCD1602', '/usr/share/sunfounder/Python/LCD1602.py')
# Initialiseer de PCA9685 met het standaardadres (0x40).
pwm = Adafruit_PCA9685. PCA9685()
# blynk-objecten
defaults = Blynk(auth_token, pin = "V9") start_button = Blynk(auth_token, pin = "V3") Rmax = Blynk(auth_token, pin = "V0") Rmin = Blynk(auth_token, pin = "V1") Rres = Blynk(auth_token, pin = "V2")
ThetaMax = Blynk (auth_token, pin = "V4")
ThetaRes = Blynk (auth_token, pin = "V5")
PhiMax = Blynk(auth_token, pin = "V6")
PhiRes = Blynk(auth_token, pin = "V7")
Drempel = Blynk (auth_token, pin = "V8")
ServoMin = Blynk (auth_token, pin = "V10")
ServoMax = Blynk (auth_token, pin = "V11")
def LCDsetup():
LCD1602.init (0x27, 1) # init (slave-adres, achtergrondlicht)
def numMap(x, in_min, in_max, out_min, out_max): """ gebruikt voor het in kaart brengen van de walabot-uitlezingen naar servopositie """ return int((x- in_min) * (out_max - out_min) / (in_max - in_min) + out_min)
# gebruik dit voor het afronden van de onbewerkte gegevens naar de toegewezen waarde
def myRound(x, base=2): return int(base * round(float(x)/base))
#extraheert het nummer van de geretourneerde blynk-tekenreeks
def numberExtract(val): val = str(val) return int(filter(str.isdigit, val))
# Stel de frequentie in op 60 Hz, goed voor servo's.
pwm.set_pwm_freq(60)
# Configureer min en max servo puls lengtes defaults
SERVO_MIN = 175 # Min. pulslengte van 4096 SERVO_MAX = 575 # Max. pulslengte van 4096
# walabot standaardwaarden
R_MAX = 60 R_MIN = 20 R_RES = 5
THETA_MAX = 20
THETA_RES = 5
PHI_MAX = 20
PHI_RES = 5
DREMPEL = 1
# variabelen voor blynk-switching
on = "[u'1']"
klasse Walabot:
def _init_(zelf):
self.wlbt = WalabotAPI self.wlbt. Init() self.wlbt. SetSettingsFolder() self.isConnected = False self.isTargets = False
def blynkConfig(zelf):
load_defaults = defaults.get_val() if str(load_defaults) == on: SERVO_MAX = ServoMax.get_val() SERVO_MAX = numberExtract(SERVO_MAX) print("Servo Max =", SERVO_MAX)
SERVO_MIN = ServoMin.get_val()
SERVO_MIN = numberExtract(SERVO_MIN) print("Servo MIN =", SERVO_MIN) R_MAX = Rmax.get_val() R_MAX = numberExtract(R_MAX) print("R max =", R_MAX)
R_MIN = Rmin.get_val()
R_MIN = getalExtract(R_MIN) print("R Min =", R_MIN)
R_RES = Rres.get_val()
R_RES = nummerExtract(R_RES) print("R Res =", R_RES)
THETA_MAX = ThetaMax.get_val()
THETA_MAX = numberExtract(THETA_MAX) print("Theta Max =", THETA_MAX) THETA_RES = ThetaRes.get_val() THETA_RES = numberExtract(THETA_RES) print("Theta Res =", THETA_RES)
PHI_MAX = PhiMax.get_val()
PHI_MAX = numberExtract(PHI_MAX) print("Phi Max =", PHI_MAX) PHI_RES = PhiRes.get_val() PHI_RES = numberExtract(PHI_RES) print("Phi Res =", PHI_RES)
THRESHOLD = Drempel.get_val()
THRESHOLD = numberExtract(THRESHOLD) print("Threshold =", THRESHOLD)
anders: # als er niets van de blynk-app is, laad de standaardwaarden SERVO_MIN = 175 # Min pulslengte van 4096 SERVO_MAX = 575 # Max pulslengte van 4096
# walabot standaardwaarden
R_MAX = 60 R_MIN = 20 R_RES = 5
THETA_MAX = 20
THETA_RES = 5
PHI_MAX = 20
PHI_RES = 5
DREMPEL = 1
def connect(self): probeer: self.wlbt. ConnectAny() self.isConnected = True self.wlbt. SetProfile(self.wlbt. PROF_SENSOR) #self.wlbt. SetDynamicImageFilter(self.wlbt. FILTER_TYPE_MTI) self.wlbt. SetDynamicImageFilter (self.wlbt. FILTER_TYPE_NONE) #self.wlbt. SetDynamicImageFilter(self.wlbt. FILTER_TYPE_DERIVATIVE) self.wlbt. SetArenaTheta(-THETA_MAX, THETA_MAX, THETA_RES) zelf.wlbt. SetArenaPhi(-HIPHI_MAX. SetArenaR(R_MIN, R_MAX, R_RES) self.wlbt. SetThreshold(THRESHOLD) behalve self.wlbt. WalabotError as err: if err.code != 19: # 'WALABOT_INSTRUMENT_NOT_FOUND' verhoog fout
def start(zelf):
zelf.wlbt. Start()
def kalibreren (zelf):
zelf.wlbt. StartCalibration()
def get_targets(zelf):
self.wlbt. Trigger() return self.wlbt. GetSensorTargets()
def stop(zelf):
zelf.wlbt. Stop()
def loskoppelen (zelf):
zelf.wlbt. Verbinding verbreken()
def hoofd():
flag = True check = "" LCDsetup() while flag: LCD1602.write(0, 0, 'Guitar') LCD1602.write(0, 1, 'Effect Control') time.sleep(2) LCD1602.write(0, 0, 'Druk op Start om ') LCD1602.write(0, 1, 'begin') time.sleep(2) if (str(check) == on): flag = False else: check = start_button.get_val() # controleer op blynk startknop druk op if (GPIO.input (18) == 0): #check footswitch flag = False
LCD1602.write(0, 0, "OK! laten we het doen")
LCD1602.write(0, 1, ' ') wlbt = Walabot() wlbt.blynkConfig() wlbt.connect() LCD1602.clear() if not wlbt.isConnected: LCD1602.write(0, 0, 'Not Connected') anders: LCD1602.write(0, 0, 'Verbonden') time.sleep(2) wlbt.start() wlbt.calibrate() LCD1602.write(0, 0, 'Kalibratie…..') time.sleep(3) LCD1602.write(0, 0, 'Walabot starten')
appcheck = start_button.app_status() vlag = True # reset vlag voor hoofdprogramma
while-vlag: # gebruikt om effect in stand-by te zetten (effectief)
if (appcheck == True): if (str(check) != on): if (GPIO.input(18) != 0): #check footswitch flag = False else: check = start_button.get_val() #check for startknop druk op appcheck = start_button.app_status()
anders:
if (GPIO.input (18) != 0): #check footswitch flag = False
xval = 0
yval = 0 zval = 0 gemiddelde = 2 vertragingstijd = 0
doelen = wlbt.get_targets()
indien len(doelen) > 0:
voor j binnen bereik (gemiddeld):
doelen = wlbt.get_targets()
if len(targets) > 0: print(len(targets)) targets = targets[0]
print(str(targets.xPosCm))
xval += int(targets.xPosCm) yval += int(targets.yPosCm) zval += int(targets.zPosCm) time.sleep(delayTime) else: print("geen doelen") xval = xval/gemiddelde
xval = aantalMap(xval, -60, 60, SERVO_MIN, SERVO_MAX)
xval = myRound(xval) if xval SERVO_MAX: xval = SERVO_MAX LCD1602.write(0, 0, 'x=' + str(xval) + ' ') pwm.set_pwm(0, 0, xval)
yval = yval/gemiddelde
yval = aantalMap(yval, -60, 60, SERVO_MIN, SERVO_MAX)
yval = myRound(yval) if yval SERVO_MAX: yval = SERVO_MAX LCD1602.write(0, 1, 'y=' + str(yval)) pwm.set_pwm(1, 0, yval)
zval = zval/gemiddelde
zval = aantalMap(zval, R_MIN, R_MAX, SERVO_MIN, SERVO_MAX)
zval = myRound(zval) if zval SERVO_MAX: zval = SERVO_MAX LCD1602.write(8, 1, 'z=' + str(zval)) pwm.set_pwm(2, 0, zval)
anders:
print("geen doelen") LCD1602.write(0, 0, "Afsluiten") LCD1602.write(0, 1, 'The Walabot') time.sleep(3) wlbt.stop() wlbt.disconnect()
if _name_ == '_main_':
terwijl True: main()
voor het gitaareffect.sh
#!/bin/sh
cd /home/pi
sudo python GuitarEffectCLI.py
Een kopie van het lokale RC-bestand ter referentie
#!/bin/sh -e# # rc.local # # Dit script wordt uitgevoerd aan het einde van elk runlevel voor meerdere gebruikers. # Zorg ervoor dat het script "0" verlaat bij succes of een andere # waarde bij een fout. # # Om dit script in of uit te schakelen, verandert u gewoon de # uitvoeringsbits. # # Dit script doet standaard niets.
# Print het IP-adres
_IP=$(hostnaam -I) || waar als ["$_IP"]; dan printf "Mijn IP-adres is %s\n" "$_IP" fi
./blynk-library/linux/blynk --token="je token komt hier" &
sleep 10 sudo /home/pi/guitareffect.sh & exit 0
Stap 27: Github-opslagplaatsen om te gebruiken
Gebruik dit voor de Sunfounder LCD
github.com/daveyclk/SunFounder_SensorKit_f…
Gebruik dit voor de servo-driver:
github.com/daveyclk/Adafruit_Python_PCA968…
Gebruik dit voor de Blynk Python HTTPS Wrapper
github.com/daveyclk/blynkapi
Stap 28: Conclusie
Nou, dit was een steile leercurve, maar het was het zo waard.
Mijn afhaalrestaurants zijn
- Ik moest Python leren..het blijkt een aas te zijn
- Koppelde de Python op de Raspberry Pi met de Blynk IoT-service. Dit wordt niet officieel ondersteund, dus er zijn enkele beperkingen aan de functies. Werkt echter nog steeds super!
- Het blijkt dat de Walabot geweldig is voor muzikale expressie. Ik heb het gebruikt op een Korg SDD3000, maar je kunt elk effect gebruiken dat je wilt
Ga zelf aan de slag. Dit is niet beperkt tot gitaareffecten, ik kan met elk instrument met elk effect worden gebruikt.
Tweede plaats in de Raspberry Pi-wedstrijd 2017
Aanbevolen:
Mission Control Box V3.0: 4 stappen
Mission Control Box V3.0: Hallo allemaal! Dit is een bijgewerkte versie van mijn originele Mission Control Box. Deze versie is hetzelfde basisidee: lichten, schakelaars, een afteltimer en een leuke LED-staafgrafiek "vermogensmeter" allemaal met een Space Shuttle-thema. Het grootste verschil
Hot Plate Automatic Control System (HPACS): 3 stappen
Hot Plate Automatic Control System (HPACS): Dit project heeft tot doel een eenvoudige intuïtieve manier te bieden om te begrijpen hoe automatische PID-afstemming kan worden uitgevoerd met behulp van een verwarming. Wat ik heb gemaakt is gebaseerd op de Åström-Hägglund-methode voor het afleiden van parameters met behulp van bang-bang-besturing om systeemkenmerken te onthullen
Voice Home Control V1.0: 12 stappen
Voice Home Control V1.0: Een paar maanden geleden heb ik een persoonlijke assistent aangeschaft, met name een Echo Dot uitgerust met Alexa. Ik heb ervoor gekozen omdat ik ontdekte dat je op een eenvoudige manier plug-ins kunt toevoegen om het apparaat aan en uit te zetten, zoals lampen, ventilatoren, enz. In online winkels zag ik a la
Peltier-effect (extreme koeling): 8 stappen (met afbeeldingen)
Peltier-effect (extreme koeling): volgens mijn titel mag je raden waar ik het over ga hebben, maar het meest interessante is dat we AC / Freeze kunnen maken zonder enig bewegend / mechanisch onderdeel (compressor), in dit project vervangen we de compressor met Peltier-module. Lts Make A Extreme
Moire LASER-effect met een handgemaakte laser: 4 stappen
Moire LASER-effect met een handgemaakte laser: Hieronder is een foto-opname van dit effect, soms schiet het effect 90 graden van het scherm op de muur. Het is zeer indrukwekkend!. Het is niet en kan niet bij me terugkomen tijdens het kijken, het is veilig om dit te doen, hoewel ik zou aanbevelen dat