Cocktail Parasol

Cocktail Parasol

A board with 160 moving cocktail parasols.

  • 3,888 views
  • 7 comments
  • 15 respects

Components and supplies

About this project

In recent years I have been interested in kinetic sculptures such as those that can be seen in Changi Airport or those of Reuben Margolin.

Pretty soon, I realized that this kind of kinetic sculpture take up too much space to expose them in a small pieces.

I stumbled upon a video in which the author made a bench test of the strength of a cocktail umbrella. (https://youtu.be/Majo-WfhweA) This allowed me to validate my project.

So I used an Arduino Mega, an SD card reader, an LED display, and 10x Adafruit 16-channel servo drivers.

A lot of patience, programming. There you go.

The link to this achievement: https://youtu.be/HLPnubZ9jh8

Code

Untitled fileArduino
////***********************************************************
//programme d'actionnement de 160 servomoteurs
// avril 2018
//Alain Haerri
//***********************************************************/
#include <SPI.h>// librairie de transmission serie
#include <SD.h>// librairie pour carte SD

#include "LcDef.h"// definition des lettres

#include <Wire.h>// pour le 16 channel servo
#include <Adafruit_PWMServoDriver.h>// pour le 16 channel servo

#include <LiquidCrystal.h>// pour le LCD afficheur
//***********************************************************/
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(4, 6, 9, 11, 12, 13);
//********************
File myFile;// myFile=le fichier qu'on va lire sur la carte SD qui contient les valeurs 20;320;90; etc
//********************
// initialize les 10 cartes 16 chanel servos
Adafruit_PWMServoDriver pwm1 = Adafruit_PWMServoDriver(0x40);
Adafruit_PWMServoDriver pwm2 = Adafruit_PWMServoDriver(0x41);
Adafruit_PWMServoDriver pwm3 = Adafruit_PWMServoDriver(0x42);
Adafruit_PWMServoDriver pwm4 = Adafruit_PWMServoDriver(0x43);
Adafruit_PWMServoDriver pwm5 = Adafruit_PWMServoDriver(0x44);
Adafruit_PWMServoDriver pwm6 = Adafruit_PWMServoDriver(0x45);
Adafruit_PWMServoDriver pwm7 = Adafruit_PWMServoDriver(0x46);
Adafruit_PWMServoDriver pwm8 = Adafruit_PWMServoDriver(0x47);
Adafruit_PWMServoDriver pwm9 = Adafruit_PWMServoDriver(0x48);
Adafruit_PWMServoDriver pwm10 = Adafruit_PWMServoDriver(0x49);

Adafruit_PWMServoDriver servoligne[10] {pwm10,pwm9,pwm8,pwm7,pwm6,pwm5,pwm4,pwm3,pwm2,pwm1}; //creation d'un tableau servoligne qui contient pwm1,pwm2 etc
// on a 10 lignes de 16 colonnes = 160 servos mais il faudra 25 amperes !!! 125W

int degremin=40;
int degremax=120;
int valeurmax=map(degremax,0,180,150,550);// pour limiter les mouvements de 40 à 130 degrés   150,550 sont les valeurs min et max a donner auxservos pour 0 et 180 degrés
int valeurmin=map(degremin,0,180,150,550);// pour limiter les mouvements de 40 à 130 degrés     150,550 sont les valeurs min et max a donner auxservos pour 0 et 180 degrés
//  cela donne 238 valeurmin et 483 valeurmax ce sont les valeurs  limite de 40 à 130 degré, 
// si on diminue valeurmin ou on augmentvaleuxmax ça rique de casser les parasols
int tabvaleurmin[10][16];//tableau de réglages de chaque servos de l'angle 0 (+- 150)
int tabvaleurmax[10][16];//tableau de réglages de chaque servos de l'angle 180(+- 550)

int angleconsigne=degremin;
// definition de 4 boutons(return,+,-;valider)

#define   bouton1on  (!digitalRead(24)) 
#define   bouton2on  (!digitalRead(26))
#define   bouton3on  (!digitalRead(28)) 
#define   bouton4on  (!digitalRead(30))
byte bouton1onprevious=0;
byte bouton2onprevious=0;
byte bouton3onprevious=0;
byte bouton4onprevious=0;
int valeurbouton1=0;
int valeurbouton2=0;
int valeurbouton3=0;
int valeurbouton4=0;
byte ausuivant=0;

int prochainecol=0;// utilisé dans lettre
  int angle[10 ] [ 16];//= {// a garder pour le moment mais sera different après , un fichier apar angle voulu,le fichier contient un tableau de 16x8 angle de servo



//***********************************************************************************************  
//*******************************     SET UP           *******************************************
//***********************************************************************************************
void setup()

{

pinMode(24,INPUT_PULLUP);
pinMode(26,INPUT_PULLUP);
pinMode(28,INPUT_PULLUP);
pinMode(30,INPUT_PULLUP);



for (int x=0;x<=9;x++)// 10 colonnes 
     {
servoligne[x].begin();
servoligne[x].setPWMFreq(60);  // This is the maximum PWM frequency
     }

 lcd.begin(16, 2);  // set up the LCD's number of columns and rows: 

 Serial.begin(9600);
 delay(1000);//wait for a second

randomSeed(analogRead(0));

for(int y=0;y<=9; y++) {// pour toutes les lignes de servos`tableau de réglages de chaque servos
   for( int x=0;x<=15;x++) {// pour toutes les colonnes de servos
tabvaleurmin[y][x]=150;//pour au moins avoir ça et pas des 0
tabvaleurmax[y][x]=550;  //pour au moins avoir ça et pas des 0  
 }
 }

//********************carte sd initilaisation********************
  Serial.print("Initializing SD card...");//  
lcdaffiche("Initializing SD card...","");                   
 if (!SD.begin(53)) {//                                         *                                      
    Serial.println("initialization failed!");// 
    lcdaffiche("carte SD pas OK","");    
    delay(4000);         
    //return;//                                                   *                                 
  }//  
  else{//*                                            
  Serial.println("initialization done.");//  
   lcdaffiche("carte SD OK",""); 
   delay(4000);                  
//******************** fin initilaisaton carte sd***********************************



lecturecartesd("tabmin.txt",tabvaleurmin);// pour toutes les lignes de servos`tableau de réglages de chaque servos memoriser sur la carte SD
lecturecartesd("tabmax.txt",tabvaleurmax);// pour toutes les lignes de servos`tableau de réglages de chaque servos memoriser sur la carte SD

  }

}



//*************************        LOOP        ************************************************************************
//*********************************************************************************************************************
void loop()
{  


reglage();
menu();
balle();
eclosion();
propagation();
mouvementsynchrone();//image
mouvementsinusoidal();//sinusoide
mouvementsinusimage();//image avec sinusoide
lettre("HELLO[[[");//lettre    le [ pour faire un espace code ascii 91





if(quelboutonpese()==4){menu();}


}

Schematics

back of the board
749e3de9 d699 4dfb 86ea 7f72c8f43ba2 wdhymwhleu
detail
Img 4127 fxgp7pvs4h
img_4127_KoAqLnwCPF.JPG
Img 4127 koaqlnwcpf
img_4128_0wJc1R0lbm.JPG
Img 4128 0wjc1r0lbm

Comments

Similar projects you might like

Barbot: Cocktail Mixing Robot

Project showcase by sidlauskas

  • 32,613 views
  • 14 comments
  • 131 respects

The Lemonade Cocktail Bar

Project showcase by Jelle

  • 873 views
  • 1 comment
  • 11 respects

In Servo We Trust!

Project tutorial by Moushira

  • 18,813 views
  • 1 comment
  • 94 respects

Interactive Donation Box

Project showcase by Ian McKay

  • 2,132 views
  • 0 comments
  • 6 respects

Wheel of Misfortune

Project tutorial by Ian McKay

  • 2,073 views
  • 0 comments
  • 16 respects

PENXZYL 3.0 :: Arduino Brush Plotter :: CNC

Project showcase by Guiye Perez Bongiovanni

  • 7,965 views
  • 6 comments
  • 31 respects
Add projectSign up / Login