Hackster is hosting Hackster Holidays, Ep. 6: Livestream & Giveaway Drawing. Watch previous episodes or stream live on Monday!Stream Hackster Holidays, Ep. 6 on Monday!
alain_haerri
Published

Cocktail Parasol

A board with 160 moving cocktail parasols.

AdvancedProtip6,965
Cocktail Parasol

Things used in this project

Hardware components

Arduino Mega 2560
Arduino Mega 2560
×1
adafruit 16 channel 12 bit servo driver
×10

Story

Read more

Schematics

back of the board

detail

img_4127_KoAqLnwCPF.JPG

img_4128_0wJc1R0lbm.JPG

Code

Untitled file

Arduino
////***********************************************************
//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();}


}

Credits

alain_haerri

alain_haerri

2 projects • 18 followers

Comments