Taula de continguts:
- Pas 1: coses que necessitareu
- Pas 2: resum
- Pas 3: la idea bàsica
- Pas 4: Walabot
- Pas 5: Introducció
- Pas 6: Configuració del Raspberry Pi - 1
- Pas 7: Configuració del Raspberry Pi - 2
- Pas 8: Configuració del Raspberry Pi - 3
- Pas 9: Configuració del Raspberry Pi - 4
- Pas 10: Python
- Pas 11: pel Walabot
- Pas 12: per a la interfície de servo
- Pas 13: per a la pantalla LCD
- Pas 14: Blynk
- Pas 15: Configuració de l'aplicació Blynk
- Pas 16: Podeu utilitzar aquest codi QR amb l'aplicació Blynk per clonar el meu projecte per estalviar-vos temps
- Pas 17: Execució de Blynk amb el Raspberry Pi i ús de Blynk HTTPS per a Python
- Pas 18: execució automàtica de l'script
- Pas 19: el maquinari
- Pas 20: disseny del recinte
- Pas 21: Guts Shots
- Pas 22: Tirs finals de l'assemblea
- Pas 23: Fixar el Walabot al suport
- Pas 24: fitxers STL de maquinari per a la impressió 3D
- Pas 25: Esquemes per connectar la cosa
- Pas 26: Codi
- Pas 27: repositoris de Github a utilitzar
- Pas 28: Conclusió
Vídeo: Walabot FX - Control d'efectes de guitarra: 28 passos (amb imatges)
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:18
Controleu el vostre efecte de guitarra favorit sense fer res més que postures de guitarra impressionants.
Pas 1: coses que necessitareu
Components de maquinari
Walabot - Walabot
Raspberry Pi - Raspberry Pi 3 Model B
Sunfounder LCD1602
Controlador de servidor PWM de 16 canals SunFounder PCA9685 de 16 bits per a Arduino i Raspberry Pi
Servo (genèric) Sense enllaç
Clip de bateria de 9V
Suport de bateria 4xAA
Bateries AA
Cables de pont (genèric)
Interruptor de peu d'acció de bloqueig DPDT
Korg SDD3000-PDL
Sistemes operatius de programari, aplicacions i serveis en línia
Autodesk Fusion360 -
Blynk:
Eines, etc
Impressora 3D
Soldador
Pas 2: resum
Com seria controlar l’expressió musical fent servir només la posició de la vostra guitarra a l’espai 3D? Bé, prototipem alguna cosa i ho descobrim!
Pas 3: la idea bàsica
Volia ser capaç de controlar el paràmetre de 3 efectes en temps real, volia fer-ho fent servir com posicionava la meva guitarra. Per tant, una cosa estava clara: necessitaria algunes coses.
- Un sensor capaç de veure espai en 3D
- Servos per girar els poms
- Una pantalla LCD
- Un controlador de servo I2C
- Un Raspberry Pi
- Per aprendre Python
Pas 4: Walabot
Voleu veure a través de les parets? Teniu objectes de sentit a l’espai 3D? Tens sentit si respires des de l’habitació? Doncs estàs de sort!
El Walabot és una forma totalment nova de detectar l’espai que us envolta mitjançant un radar de baixa potència.
Això seria clau per a aquest projecte, seria capaç d’agafar els coodinats d’objectes de l’espai 3D (X-Y-Z) i mapar-los a posicions servo canviant el so d’un efecte de guitarra, en temps real, sense tocar el pedal.
Guanya.
Podeu trobar més informació sobre el Walabot aquí
Pas 5: Introducció
Primer de tot, necessitareu un ordinador per conduir el Walabot, per a aquest projecte estic fent servir un Raspberry Pi 3 (aquí es fa referència a RPi) a causa del WiFi integrat i de l’omph extra general
Vaig comprar una targeta SD de 16 GB amb NOOBS preinstal·lat per mantenir les coses simples i simples i vaig optar per instal·lar Raspian com el meu sistema operatiu Linux que trieu.
(si no esteu familiaritzat amb com instal·lar Raspian, preneu-vos un moment per llegir-ne una mica)
D'acord, un cop tingueu Raspian executat al vostre RPi, hi ha uns quants passos de configuració que cal fer per preparar les coses per al nostre projecte
Pas 6: Configuració del Raspberry Pi - 1
En primer lloc, assegureu-vos que esteu executant la versió més recent del nucli i comproveu si hi ha actualitzacions obrint un intèrpret d'ordres i escrivint
sudo apt-get update
sudo apt-get dist-upgrade
(s'afegeix sudo per assegurar-vos que teniu privilegis administratius, per exemple, les coses funcionaran)
Això pot trigar una estona a completar-se, així que aneu a prendre una bona tassa de te.
Pas 7: Configuració del Raspberry Pi - 2
Heu d’instal·lar l’SDK de Walabot per a RPi. Des del navegador web RPi, aneu a https://www.walabot.com/gettingstarted i descarregueu el paquet d’instal·lació de Raspberry Pi.
Des d'un intèrpret d'ordres:
descàrregues de CD
sudo dpkg -I walabotSDK_RasbPi.deb
Pas 8: Configuració del Raspberry Pi - 3
Hem de començar a configurar el RPi per utilitzar el bus i2c. Des d’un intèrpret d’ordres:
sudo apt-get install python-smbus
sudo apt-get install i2c-tools
un cop fet això, heu d'afegir el següent al fitxer de mòduls
Des d'un intèrpret d'ordres:
sudo nano / etc / modules
afegiu aquestes 2 cadenes en línies separades:
i2c-dev
i2c-bcm2708
Pas 9: Configuració del Raspberry Pi - 4
El Walabot treu una mica de corrent i també utilitzarem GPIO per controlar les coses, de manera que hem de configurar-les
Des d'un intèrpret d'ordres:
sudo nano /boot/config.txt
afegiu les línies següents al final del fitxer:
safe_mode_gpio = 4
max_usb_current = 1
El RPi és una eina excel·lent per als fabricants, però és limitat en el moment actual que pot enviar al Walabot. Per això, afegim un corrent màxim d’1Amp en lloc dels 500mA més estàndard
Pas 10: Python
Per què Python? bé, com que és molt fàcil de codificar, es pot executar ràpidament i hi ha un munt de bons exemples de python disponibles. Mai l'havia utilitzat abans i aviat vaig començar a funcionar en un tres i no res. Ara el RPi està configurat per al que volem, el següent pas és configurar Python perquè tingui accés a l'API Walabot, interfícies LCD Servo
Pas 11: pel Walabot
Des d'un intèrpret d'ordres
Instal·lar Sudo pip “/usr/share/walabot/python/WalabotAPI-1.0.21.zip”
Pas 12: per a la interfície de servo
Des d'un intèrpret d'ordres
sudo apt-get install git build-essential python-dev
cd ~
git clon
cd Adafruit_Python_PCA9685
sudo python setup.py install
Per què hem d’utilitzar un servo controlador? Bé, per un RPi hi ha un parell de raons.
1. El corrent extret per un servo pot ser molt elevat i aquest nombre augmenta quan més servos tingueu (és clar). Si conduïu el servo directky des d'un RPi, corre el risc de bufar la font d'alimentació
2. Els temps del PWM (Pulse Width Modulation) que controlen la posició dels servos són molt importants. Com que el RPi no utilitza un sistema operatiu en temps real (pot haver-hi interrupcions), els temps no són precisos i poden fer que els servos es trenquin nerviosament. Un controlador dedicat permet un control precís, però també permet afegir fins a 16 servos, de manera que és ideal per a la seva expansió.
Pas 13: per a la pantalla LCD
obriu el navegador web RPi
www.sunfounder.com/learn/category/sensor-k…
descarregar
github.com/daveyclk/SunFounder_SensorKit_…
Des d'un intèrpret d'ordres:
sudo mkdir / usr / share / sunfounder
Amb l'explorador gràfic, copieu la carpeta Python del fitxer zip a la nova carpeta Sunfounder
La pantalla LCD s’utilitza per demanar a l’usuari què passa exactament. Es mostra el procés de configuració fins als valors x, y i z que s’assignen a cada servo
Pas 14: Blynk
Blynk és un servei de IoT brillant que us permet crear una aplicació personalitzada per controlar les vostres coses. Em va semblar la solució perfecta per donar-me control remot del walabot per marcar realment a la configuració …
Un problema. Blynk actualment no és compatible amb la plataforma Python, bugger. Però no tingueu por! He pogut trobar un petit treball que permet el control remot i l'entrada de paràmetres remots. és una mica complicat
el primer pas és descarregar l’aplicació Blynk des de la vostra botiga d’aplicacions preferida
En segon lloc, registreu-vos per obtenir un compte
Un cop fet això, obriu l'aplicació i inicieu un nou projecte, escollint Raspberry Pi 3 com a maquinari.
L'aplicació us assignarà un testimoni d'accés (ho necessitareu per introduir el vostre codi)
Un cop ho hàgiu fet. haureu de configurar l'aplicació tal com es mostra a les imatges. És així com interactuarà amb el walabot.
Pas 15: Configuració de l'aplicació Blynk
Pas 16: Podeu utilitzar aquest codi QR amb l'aplicació Blynk per clonar el meu projecte per estalviar-vos temps
D'acord Ara que l'aplicació està configurada, podem configurar Python i el RPi perquè hi parlin a través de les xarxes internes. Màgia
Pas 17: Execució de Blynk amb el Raspberry Pi i ús de Blynk HTTPS per a Python
En primer lloc, heu d’instal·lar l’embolcall Blynk HTTPS per a Python
Des d'un intèrpret d'ordres:
clon sudo git
sudo pip instal·lar blynkapi
En segon lloc, cal instal·lar el servei Blynk al RPi
Des d'un intèrpret d'ordres:
git clone
cd blynk-library / linux
netejar-ho tot
per executar el servei blynk
sudo./blynk --token = YourAuthToken
Per assegurar-vos que el servei de Blynk s’executa en iniciar, heu de modificar el fitxer /etc/rc.local
fent
sudo nano /etc/rc.local
afegiu-ho al final
./blynk-library/linux/blynk --token = el meu testimoni &
(He inclòs una còpia del meu fitxer /etc/rc.local a la secció de codis per a referència)
Per provar que funciona, simplement escriviu
sudo /etc/rc.local start
Ara el servei Blynk hauria d’estar en funcionament
Pas 18: execució automàtica de l'script
Ara que tot està configurat i configurat, ja tenim a punt el codi python. podem configurar les coses perquè s’executin automàticament per poder abandonar el teclat i els monitors
Hi ha algunes coses a fer
Creeu un fitxer de seqüència d'ordres nou per executar el programa Python
sudo nano guitareffect.sh
afegiu aquestes línies
#! / bin / sh
python /home/pi/GuitarEffectCLI.py
assegureu-vos de desar-lo
A continuació, hem de donar permís al script per executar-lo escrivint
Sudo chmod + x /home/pi/guitareffect.sh
I, finalment, hem d’afegir aquest script al fitxer /etc/rc.local amb el qual hem canviat anteriorment.
Sudo nano /etc/rc.local
Afegeix
/home/pi/guitareffect.sh &
assegureu-vos d'incloure el "&" això permet que Python Script s'executi en segon pla
Dret! Aquesta és tota la configuració i el programari ordenats, el següent és el moment de connectar el maquinari
Pas 19: el maquinari
Primer prototip de Breadboard
Pas 20: disseny del recinte
El recinte es va dissenyar i representar a l’impressionant Fusion360
Pas 21: Guts Shots
Pas 22: Tirs finals de l'assemblea
Pas 23: Fixar el Walabot al suport
Utilitzeu el disc de metall autoadhesiu que ve amb la walabot per fixar-lo al seu lloc
Pas 24: fitxers STL de maquinari per a la impressió 3D
Pas 25: Esquemes per connectar la cosa
Pas 26: Codi
Utilitzeu l’escriptura Python adjunta per al vostre projecte
des de _future_ importació print_functionde la plataforma d’importació sys des del sistema d’importació d’os des de la importació blynkapi importació Blynk importació WalabotAPI importació RPi. GPIO en temps d’importació
#Configurar GPIO mitjançant la numeració de la placa
GPIO.setmode (GPIO. BOARD) GPIO.setup (18, GPIO. IN, pull_up_down = GPIO. PUD_UP)
#blynk token d'autenticació
auth_token = "vostre_auth_token_aquí"
# Importeu el mòdul PCA9685 per al control servo.
importació Adafruit_PCA9685
#import mòdul LCD des de la ubicació
des de la importació d'import load_source LCD1602 = load_source ('LCD1602', '/usr/share/sunfounder/Python/LCD1602.py')
# Inicialitzeu el PCA9685 mitjançant l'adreça predeterminada (0x40).
pwm = Adafruit_PCA9685. PCA9685 ()
# objectes blynk
predeterminats = 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")
Llindar = Blynk (auth_token, pin = "V8")
ServoMin = Blynk (auth_token, pin = "V10")
ServoMax = Blynk (auth_token, pin = "V11")
def LCDsetup ():
LCD1602.init (0x27, 1) # init (adreça esclava, llum de fons)
def numMap (x, in_min, in_max, out_min, out_max): "" "s'utilitza per assignar les lectures walabot a la posició servo" "" return int ((x- in_min) * (out_max - out_min) / (in_max - in_min) + out_min)
# utilitzeu això per arrodonir les dades brutes al valor assignat
def myRound (x, base = 2): return int (base * round (float (x) / base))
#extreu el número de la cadena blynk retornada
def numberExtract (val): val = str (val) return int (filter (str.isdigit, val))
# Estableix la freqüència a 60 Hz, és bo per als servos.
pwm.set_pwm_freq (60)
# Configureu els valors predeterminats de longituds de polsos mínims i màxims
SERVO_MIN = 175 # Longitud de pols mínima de 4096 SERVO_MAX = 575 # Longitud de pols màxima de 4096
# valors predeterminats de walabot
R_MAX = 60 R_MIN = 20 R_RES = 5
THETA_MAX = 20
THETA_RES = 5
PHI_MAX = 20
PHI_RES = 5
LLIMI = 1
# variables per al canvi de blynk
on = "[u'1 ']"
classe Walabot:
def _init _ (auto):
self.wlbt = WalabotAPI self.wlbt. Init () self.wlbt. SetSettingsFolder () self.isConnected = Fals self.isTargets = Fals
def blynkConfig (auto):
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 = numberExtract (R_MIN) imprimir ("R Min =", R_MIN)
R_RES = Rres.get_val ()
Impressió R_RES = numberExtract (R_RES) ("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 = Llindar.get_val ()
SORTIU = número Extreure (SORTIU) imprimir ("Llindar =", SORTIU)
else: # si no hi ha res de l'aplicació blynk, carregueu els valors predeterminats SERVO_MIN = 175 # Longitud de pols mínima de 4096 SERVO_MAX = 575 # Longitud de pols màxima de 4096
# valors predeterminats de walabot
R_MAX = 60 R_MIN = 20 R_RES = 5
THETA_MAX = 20
THETA_RES = 5
PHI_MAX = 20
PHI_RES = 5
LLIMI = 1
def connect (self): try: self.wlbt. ConnectAny () self.isConnected = True self.wlbt. SetProfile (self.wlbt. PROF_SENSOR) # self.wlbt. SetDynamicImageFilter (self.wlbt. FILTER_TYPE_MTI) self.wlbt (self.wlbt. FILTER_TYPE_NONE) # self.wlbt. SetDynamicImageFilter (self.wlbt. FILTER_TYPE_DERIVATIVE) self.wlbt. SetArenaTheta (-THETA_MAX, THETA_MAX, THETA_RES) self.wlMAX. SetArenaR (R_MIN, R_MAX, R_RES) self.wlbt. SetThreshold (THRESHOLD) excepte self.wlbt. WalabotError com a error: if err.code! = 19: # 'WALABOT_INSTRUMENT_NOT_FOUND' augmenta error
inici per defecte (auto):
self.wlbt. Start ()
calibració per defecte (auto):
self.wlbt. StartCalibration ()
def get_targets (self):
self.wlbt. Trigger () retorna self.wlbt. GetSensorTargets ()
parada per defecte (auto):
self.wlbt. Stop ()
desconnectar (auto):
self.wlbt. Disconnect ()
def main ():
flag = True check = "" LCDsetup () while flag: LCD1602.write (0, 0, 'Guitar') LCD1602.write (0, 1, 'Control d'efectes') time.sleep (2) LCD1602.write (0, 0, "Premeu Inici per") LCD1602.write (0, 1, "begin") time.sleep (2) if (str (check) == on): flag = False else: check = start_button.get_val () # comproveu si hi ha el botó d'inici de blynk, premeu si (GPIO.input (18) == 0): #check footswitch flag = False
LCD1602.write (0, 0, "D'acord! Fem-ho")
LCD1602.write (0, 1, '') wlbt = Walabot () wlbt.blynkConfig () wlbt.connect () LCD1602.clear () si no wlbt.is Connectat: LCD1602.write (0, 0, 'No connectat') else: LCD1602.write (0, 0, 'Connected') time.sleep (2) wlbt.start () wlbt.calibrate () LCD1602.write (0, 0, 'Calibrating …..') time.sleep (3)) LCD1602.write (0, 0, "Inici de Walabot")
appcheck = start_button.app_status () flag = True # reset flag per prog principal
mentre es marca: # s'utilitza per posar efecte en espera (efectivament)
if (appcheck == True): if (str (check)! = on): if (GPIO.input (18)! = 0): #check footswitch flag = False else: check = start_button.get_val () #check for botó d'inici premeu appcheck = start_button.app_status ()
en cas contrari:
if (GPIO.input (18)! = 0): #check footswitch flag = False
xval = 0
yval = 0 zval = 0 mitjana = 2 delayTime = 0
targetes = wlbt.get_targets ()
si len (objectius)> 0:
per a j en el rang (mitjana):
targetes = wlbt.get_targets ()
si len (objectius)> 0: imprimir (len (objectius)) objectius = objectius [0]
print (str (target.xPosCm))
xval + = int (target.xPosCm) yval + = int (target.yPosCm) zval + = int (target.zPosCm) time.sleep (delayTime) else: print ("sense objectius") xval = xval / mitjana
xval = numMap (xval, -60, 60, SERVO_MIN, SERVO_MAX)
xval = myRound (xval) si xval SERVO_MAX: xval = SERVO_MAX LCD1602.write (0, 0, 'x =' + str (xval) + '') pwm.set_pwm (0, 0, xval)
yval = yval / mitjana
yval = numMap (yval, -60, 60, SERVO_MIN, SERVO_MAX)
yval = myRound (yval) si yval SERVO_MAX: yval = SERVO_MAX LCD1602.write (0, 1, 'y =' + str (yval)) pwm.set_pwm (1, 0, yval)
zval = zval / mitjana
zval = numMap (zval, R_MIN, R_MAX, SERVO_MIN, SERVO_MAX)
zval = myRound (zval) si zval SERVO_MAX: zval = SERVO_MAX LCD1602.write (8, 1, 'z =' + str (zval)) pwm.set_pwm (2, 0, zval)
en cas contrari:
imprimir ("sense objectius") LCD1602.write (0, 0, "Apagar") LCD1602.write (0, 1, 'The Walabot') time.sleep (3) wlbt.stop () wlbt.disconnect ()
si _nom_ == '_principal_':
mentre que True: main ()
per al guitareffect.sh
#! / bin / sh
cd / home / pi
sudo python GuitarEffectCLI.py
Una còpia del fitxer local RC com a referència
#! / bin / sh -e # # rc.local # # Aquest script s'executa al final de cada nivell d'execució multiusuari. # Assegureu-vos que l'script "sortirà de 0" en cas d'èxit o de qualsevol altre # valor en cas d'error. # # Per habilitar o desactivar aquest script, canvieu l'execució # bits. # # Per defecte, aquest script no fa res.
# Imprimiu l'adreça IP
_IP = $ (nom d’amfitrió -I) || cert si ["$ _IP"]; després printf "La meva adreça IP és% s / n" "$ _IP" fi
./blynk-library/linux/blynk --token = "el teu token va aquí" &
dormir 10 sudo /home/pi/guitareffect.sh i sortir de 0
Pas 27: repositoris de Github a utilitzar
Utilitzeu això per a la pantalla LCD de Sunfounder
github.com/daveyclk/SunFounder_SensorKit_f…
Utilitzeu això per al controlador de servo
github.com/daveyclk/Adafruit_Python_PCA968…
Utilitzeu-lo per a l'embolcall HTTPS Blynk Python
github.com/daveyclk/blynkapi
Pas 28: Conclusió
Bé, ha estat una corba d'aprenentatge pronunciada, però ha valgut la pena.
Els meus take away són
- Vaig haver d'aprendre Python … resulta que és l'as
- Interfície de Python al Raspberry Pi amb el servei IoT de Blynk. Això no s'admet oficialment, de manera que hi ha alguns límits a les seves funcions. Tot i així, funciona molt bé.
- Resulta que el Walabot és ideal per a l’expressió musical. L'he utilitzat en un Korg SDD3000, però podeu utilitzar qualsevol efecte que vulgueu
Proveu-ho vosaltres mateixos. Això no es limita als efectes de guitarra, es pot utilitzar amb qualsevol instrument amb qualsevol efecte.
Accèssit al concurs Raspberry Pi 2017
Recomanat:
Ray Gun amb efectes de so V2: 17 passos (amb imatges)
Ray Gun With Sound Effects V2: Fa poc vaig trobar un exercici antic en una botiga de brossa i, en el moment en què ho vaig veure, vaig saber que havia de fer-ne una. Ara he fabricat algunes armes de raig i sempre comencen inspirant-se en algun objecte trobat. Podeu consultar les meves altres versions en t
Ray Gun amb efectes de so làser: 19 passos (amb imatges)
Pistola de raigs amb efectes de so làser: m'encanta construir projectes a partir de parts antigues que he explorat. Aquesta és la versió de pistola de 2n raig que tenia documentada (aquesta és la meva primera). Juntament amb les armes de raig he construït robots no desitjats (consulteu-los aquí) i molts altres projectes des de
Pedal Proto per a efectes de guitarra DIY: 5 passos (amb imatges)
Proto Pedal per a efectes de guitarra de bricolatge: dissenyar i construir els vostres propis efectes de guitarra és una manera excel·lent de combinar la passió per l'electrònica i la guitarra. No obstant això, quan vaig provar nous dissenys, vaig trobar que el fràgil circuit de la placa de soldadura sense soldadura era difícil de connectar al pegat c
Pedal d'efectes de guitarra i música ATMega1284P: 6 passos (amb imatges)
Pedal d'efectes de guitarra i música ATMega1284P: he portat l'Arduino Uno ATMega328 Pedalshield (desenvolupat per Electrosmash i en part basat en el treball a l'Open Music Lab) a l'ATMega1284P que té vuit vegades més RAM que l'Uno (16 kB contra 2 kB). Un avantatge addicional inesperat és
Com he muntat el meu processador d'efectes de guitarra Pod 6 de la meva línia 6: 10 passos (amb imatges)
Com vaig muntar el meu processador d'efectes de guitarra Pod 6 de la meva línia: Vaig comprar una de les unitats POD de la línia 6 original quan van sortir per primera vegada el 1998. Aleshores sonava fenomenal i encara avui sona molt bé: l'únic problema era la seva forma. Per dir-ho clarament, sembla una ximpleria. Més important, tret que tingueu