altRobots
/robotigs/icons/actuator.pngActuatoren
/robotigs/icons/printboards.pngAlgemeen
/robotigs/icons/chassis.pngChassis
/robotigs/icons/florigs.pngFlorigs
/robotigs/icons/interfacing.gifInterfacing
/robotigs/icons/microphone_icon.pngMuziek
/robotigs/icons/musicKey_icon.pngMuzikanten
/robotigs/icons/shield.pngSchildjes
/sys/icons/sensors.pngSensors
/robotigs/icons/languages.pngTalen
/robotigs/icons/battery.pngVoedingen
/sys/icons/microController.pngµControllers
altContact
LoRa NRF24L01+"); echo ("  "); } ?>  "); /* echo (""); echo (" "); //Show pencil as button */ ?> alt  

Deze pagina is verouderd. Ga naar de vernieuwde pagina.

"); $counter = 0; $aantal = str_word_count($pict_list, 0, "0123456789"); $lijst = str_word_count($pict_list, 1, "0123456789"); while($counter < $aantal){ $pictkey = $lijst[$counter]; $qryy1 = ("SELECT * FROM illustrations WHERE ill_id = $pictkey ;"); $resulty1 = pg_query($con1, $qryy1); while($row = pg_fetch_array($resulty1)){ //Fields accesible by their name foreach( $row AS $key => $val ){ $$key = stripslashes( $val ); } } $image = ("/robotigs/documentatie/plaatjes/$ill_name"); $pictfull = str_replace('_small', '', $image); //Pictfull=biggest version $alt = ("Just wait till your 57...."); $txtname = get_txt($con1, 18, $koekje[2], $ill_id); //Robot illustrations subtitles echo (""); echo (''. $alt .'
'); $nummer = $counter + 1; $txtAfb = get_txt($con1, 9, $koekje[2], 3865); //Pic Afb if ($koekje[0]>0 and $koekje[3]>0){ //User is logged in and translates echo ("$txtAfb $nummer: "); echo ("$txtname"); echo ("
"); echo ("Ontkoppelen "); if ($counter==0){ echo ("Up "); }else{ echo ("Up "); } if ($nummer == $aantal){ echo ("Down"); }else{ echo ("Down"); } }else{ //Else of if Meaning the current useer is logged in echo ("$txtAfb $nummer: $txtname"); } echo ('

'); //End of this picture $counter++; //Prepair for next picture } echo (''); //All pictures are printed } //End of if there are 1 or more pictures to be printed ---------------------- ?>

  • Ping en Pong
  • /robotigs/documentatie/plaatjes/lora_test1.png
      Ping en Pong zijn 2 minimale robotjes, ieder uitgerust met een LoRa transceiver (Banggood). De software is bijna identiek voor beiden. Ping is onze gateway blijft bij de server. Pong is uitgerust met een accupack en is dus mobiel.
    • Zendvermogen en afstanden
    • Tabelletje maken over de IoT zendafstanden die hier ter plekke kunnen worden bereikt met deze modules. Bij de zwakste zendinstelling (radio.setPALevel(RF24_PA_MIN); //RF24_PA_MAX=default, HIGH LOW MIN) is het al mogelijk om met de kas of vanuit de schuur te communiceren!
    • Oversturing zendvermogen
    • De kwaliteit van de zender holt achteruit als het vermogen op MAX wordt gezet. Ook Pong moet op MIN staan om een succesvolle zendactie te kunnen maken met Ping naar Pong. Internet studie laat zien dat deze modules makkelijk overstuurd kunnen worden. Wat voor piek aan vermogen heeft een zendactie dan nodig?
    • Ping zonder Pong
    • Als ik Pong uitzet dan geeft Ping ineens dat hij niet correct kan zenden. Zit er dan een controle bij het zenden, een soort ontvangstbevestiging van Pong op? Ja, maar het kan goed zijn dat de acknowledgement pas komt nadat de het aantal retries is verstreken.

  • Hello world NRF24L01+
  • /robotigs/documentatie/plaatjes/lora_back.png
    • Software instellingen
      • radio.setPALevel(RF24_PA_MIN)
      • Overal wordt geadviseerd om het zendvermogen zo laag mogelijk (RF24_PA_MIN) te zetten in verband met problemen met de voeding. Als je hier niets invult springt hij automatisch naar RF24_PA_MAX. Nog een smaak is: RF24_PA_LOW. Dat blijkt ook te kloppen want zodra ik het zendvermogen op MAX zet met een USB voeding via de Arduino, dan werkt het spul niet meer.
      • radio.setDataRate(RF24_250KBPS);
      • radio.setRetries(3,5);
      • De default? is 3,5. Het uitzetten leidt er toe dat er regelmatig een time-out gebeurt bij het lezen van het antwoord van Pong.

  • LoRa introductie
  • /robotigs/documentatie/plaatjes/lora_test1.png LoRa (Long Range) (wiki) is het smalle band IoT zender/ontvanger systeem dat werkt met een gering vermogen. maar toch over een grote afstand (tot 10km). Lora is de naam van de gebruikte zendtechniek die is gebaseerd op de spread spectrum techniek, uitgevonden door Semtech en opgenomen in het Larta forum. In Europa is de frequentie 868 MHz. Lora heeft altijd een gateway nodig. De gateway is het basisstation en is vaak ook verbonden met het internet. Er zijn meerdere mogelijkheden om LoRa te implementeren:
    • 1) KPN IoT
    • KPN noemt zijn LoRa oplossing KPN internet of things. Dit is 1 van de simpelste mogelijkheden om met LoRa te werken.
    • 2) LoraWan TTN
    • Als je niet afhankelijk wilt zijn van 1 eigen gateway maar gebruik wilt maken van een dekkend landelijk netwerk dan moet je zorgen dat jouw nodes zich kunnen verbinden met 1 van de bestaande netwerken. Dit wordt LoraWan (wiki) genoemd. Er bestaan meerdere commerciële netwerken waarvoor je moet betalen voor een abonnement net als bij je telefoon, bijvoorbeeld van KPN. Er bestaat echter ook 1 gratis netwerk dat geen abonnementskosten vraagt: The Things Network. Dit kan NIET met ieder type lora transceiver. Zie verder bij LoraWan.
    • 2) Peer to Network
    • De volgende stap is het ombouwen van 1 van de bovenstaande nodes zodat deze verbinding met het internet maakt. Deze node wordt dan in LoRa termen een Gateway genoemd. Je kan dan met 1 gateway verschillende nodes binnen een straal van 10 km met het internet verbinden. Dit kan met ieder type lora transceiver.
    • 1) Peer to peer
    • In deze situatie worden er 2 apparaten (peers) die ieder zowel zender alsook ontvanger (transceivers) zijn, via Lora met elkaar verbonden. In Lora termen worden dit soort apparaten "nodes" genoemd. Dit kan worden uitgevoerd met ieder type Lora transceiver. Zie verder bij Hello World.

  • LoraWan
  • /robotigs/documentatie/plaatjes/lora_back.png Er bestaan meerdere mogelijkheden om een LoraWAN (wiki) op te zetten, zie bij Lora introductie. Wij gaan voor The Things Network omdat het open-source is en geen abonnementskosten kent.
    • Hardware compatibel?
    • Allereerst moet je uitzoeken of je hardware compatibel is met LoraWan. Lang niet alle Lora hardware kan worden gebruikt voor LoraWan. Zo zijn de NRF24L01+ niet compatibel maar bijvoorbeeld de Antratek modules wel.
    • Netwerkdekking
    • Vervolgens moet je uitzoeken of je binnen het bereik van een bestaande TTN-gateway valt. Indien niet dan moet je zelf een gateway installeren. Je kan op de zogenaamde TTN-Heatmap zien of er een gateway voldoende dicht in de buurt zit. In Nederland is dat bijna altijd het geval. Hoe weet ik zeker of ik hier bereik heb op het TTN netwerk?
    • Communicatievorm
    • Je kan wel data naar de node zenden maar deze data wordt uitsluitend naar de node gezonden nadat de node zelf iets naar het netwerk heeft gezonden. Zo hoeft het netwerk niet te pollen.

  • Aansluitingen NRF24L01+
  • /robotigs/documentatie/plaatjes/Lora-pinout.png
    • Juiste aansluitingen
    • Het blijkt dat alles in Hello World correct werkt zodra de CE=10 en de CSN=9 worden aangesloten op een Arduino. Het lijkt er dus op dat er niet helemaal juist gewerkt wordt met de SPI bibliotheek. Dat is iets dat ik al veel vaker heb zien gebeuren in sketches, al in assembler. Vreemd vreemd vreemd. Het blijkt niets uit te maken of ik ping nu aanzet of niet. Het lijkt wel uit te maken als ik ping aanzet en mijn vingers op de voedingsspanning hou. Waarom loopt Pong door? Wat onvangt hij? Dat blijkt te komen doordat hij continu doet alsof hij iets ontvangt vanwege onjuiste SPI aansluitingen.
    • pinMode(CE_PIN, OUTPUT); pinMode(CSN_PIN, OUTPUT);
    • Dit lijkt weinig uit te maken. er lijken iets minder: Error failed radio boodschappen te ontstaan als beiden aanstaan. Maar stabiel is het geheel nog niet.
    • Voeding
    • De voedingsspanning mag maximaal 3,3Vdc zijn maar de rest van de pennen mag op 5Vdc worden aangesloten.
    • Aansluitdraden
    • Deze tranceivers communiceren door middel van SPI. Buiten de 3 pennen benodigd voor SPI, zijn er nog 2 extra pennen nodig voor Chip Enable en Chip Select Not. Default worden deze pennen voorgeschreven, maar op de Arduino moet je 9 en 10 gebruiken in plaata van 7 en 8. Zorg dat pin 10 (op de UNO) de CE is. Het blijkt dat alles in Hello World uitsluitend correct werkt zodra de CE=10 en de CSN=9 worden aangesloten op een Arduino Uno. Het lijkt er dus op dat er niet helemaal juist gewerkt wordt met de SPI bibliotheek. Dat is iets dat ik al veel vaker heb zien gebeuren in sketches, vooral in assembler. If you are using pins other than 10 and 9 for CSN and CE you must still set pin 10 for OUTPUT to ensure that the Uno acts as the SPI master.
      • CE
      • CE (Chip Enable = 10) is an active-HIGH pin. When selected the nRF24L01 will either transmit or receive, depending upon which mode it is currently in.
      • CSN
      • CSN (Chip Select Not = 9) is an active-LOW pin and is normally kept HIGH. When this pin goes low, the nRF24L01 begins listening on its SPI port for data and processes it accordingly.
      RF24Arduinosketchkleur
      SCK13SCKoranje
      MSIO12MISOgeel
      MOSI11MOSIgroen
      CE10ce_pinpaars
      CSN9cs_pinwit

    How nRF24L01+ Wireless Module Works & Interface with Arduino

  • Werking


$val ){ $$key = stripslashes( $val ); } $jaar = substr($changeddate,0,4); $maand = substr($changeddate,5,2); $dag = substr($changeddate,8,2); $lastupdate = ("$jaar $maand $dag"); $prtsrttxt = get_txt($con1, 26, 1, $idsrtodd); $jaar = substr($createddate,0,4); $maand = substr($createddate,5,2); $dag = substr($createddate,8,2); $create_stamp = ("$dag $maand $jaar"); //GENERAL INFO FOR EVERY USER ************************************************** echo ("

"); echo (""); if ($codetext) { //Code like KY-026 or NA-41 echo (""); } //End of if ($codetext) $tmp = get_txt($con1, 9, $koekje[2], 3741); //Fieldname at screen if ($prijseurinclbtw > 0){ //Show price indication $prijs_formatted = number_format($prijseurinclbtw / 100, 2, ',', '.'); echo (""); echo (""); } //End of if ($prijseurinclbtw > 0) if ($sketchtext) { //Link to OWN SOFTWARE $tmp = get_txt($con1, 9, $koekje[2], 3738); //Fieldname at screen echo (""); } //End of if ($sketchtext) $tmp = get_txt($con1, 9, $koekje[2], 3744); //Fieldname at screen if ($pinouttext) { //Pinout echo (""); } $tmp = get_txt($con1, 9, 1, 3735); //Fieldname at screen $tmp2 = get_txt($con1, 26, 1, $row4[16]); //Group name in its language echo (""); if ($koekje[0]>0 and $koekje[3]>0){ //User is logged in and translates $tmp = get_txt($con1, 9, $koekje[2], 3918); //Fieldname at screen LANGUAGE if ($row4[26] == 1) {$imgname = "nederland.png";} if ($row4[26] == 2) {$imgname = "deutschland.png";} if ($row4[26] == 3) {$imgname = "uk.png";} if ($row4[26] == 4) {$imgname = "france.png";} echo (""); $tmp = get_txt($con1, 9, $row4[27], 3919); //Fieldname at screen $statuskey = get_status_key($con1, $status); $tmp2 = get_txt($con1, 61, $koekje[2], $statuskey); //Fieldname at screen echo (""); } $tmp = get_txt($con1, 9, 1, 3966); //Fieldname at screen echo (""); echo ("
"); //Header $tmp = get_txt($con1, 9, $koekje[2], 3923); //Fieldname at screen if ($koekje[3]=="1") { //If this user wants to translate then echo ("$tmp"); //If desired }else{ echo ("$tmp"); } //Else just show if no need to translate if ($koekje[0]>0 and $koekje[3]>0){ //User is logged in and translates echo (" (edit)"); } echo ("Algemene informatie test
"); $tmp = get_txt($con1, 9, $koekje[2], 3739); //Fieldname at screen if ($koekje[3]=="1") { //If this user wants to translate then echo ("$tmp"); //Class for colour }else{ //So you are not allowed to translate echo $tmp; //Show screenname of this field in user language } //End of If you want to translate this fieldname at screen echo (" "); if ($codelink) { echo ("$codetext"); }else{ echo ("$codetext"); } //End of if ($pinoutlink) echo ("
$tmp  "); if ($urlprijs){ echo ("€  $prijs_formatted"); }else{ echo ("€  $prijs_formatted"); } //End of if ($urlprijs > "") echo ("
$tmp  "); if ($sketchlink) { echo ("$sketchtext"); }else{ echo ("$sketchtext"); } //End of if ($sketchlink) echo ("
$tmp  "); if ($pinoutlink) { echo ("$pinouttext"); }else{ echo ("$pinouttext"); } //End of if ($pinoutlink) echo ("
$tmp  "); //MENU GROUP echo (""); echo ("$tmp2
$tmp"); echo ("flag.gif"); echo ("
$tmp  "); //STATUS echo ("$status $tmp2
$tmp  "); //LAST CHANGED $tmp = substr($changeddate, 0, 10); echo ("$tmp

"); return; //////////////////////////////////////////////////////////////////////////////// function get_status_key($con, $num){ $qry = ("SELECT id FROM status WHERE nr = $num ;"); $result = pg_query($con, $qry); $row = pg_fetch_array($result); return ("$row[0]"); } 0 AND software.rstid = 2 AND tblsystext.lanid = $koekje[2] AND tblsystext.txlid = 19 ORDER BY sftname ASC , controller ASC ;"); $result = pg_query($con1, $qry2); if (pg_num_rows($result)>0) { //Only if at least 1 program exists echo ('

'); echo (""); while($col = pg_fetch_array($result)){ $col[0] = ("$col[0]"); echo (""); echo (""); echo (""); if ($koekje[0] > 0 and $koekje[3]>0){ //User is logged in and translates echo (""); } echo (''); } echo ('
"); //Header $tmp = get_txt($con1, 9, $koekje[2], 3922); //Fieldname at screen if ($koekje[3]=="1") { //If this user wants to translate then echo ("$tmp"); //If desired }else{ echo ("$tmp"); } //Else just show if no need to translate echo ("
$col[2]  $col[0]"); echo ("(Edit)
'); } ?> 0){ if ($header == 0) { echo ("

"); echo (""); $header++; } //End of if ($header == 0) echo (""); echo (""); } } if ($header > 0){ echo ("
"); //Header $tmp = get_txt($con1, 9, $koekje[2], 3879); //Fieldname at screen if ($koekje[3]=="1") { //If this user wants to translate then echo ("$tmp"); //If desired }else{ echo ("$tmp"); } //Else just show if no need to translate echo ("
$colbpp[2]"); //Show software van deze bot $qry=("SELECT software_basedir FROM farmbotversie WHERE id = $colbpp[0];"); $result = pg_query($con1, $qry); $col = pg_fetch_array ($result ,0); $dir1 = "/var/www/html/robotigs/software/$col[0]"; $arr1 = glob($dir1, GLOB_ONLYDIR); if (isset($arr1[0])){ $folder = $arr1[0]; $countertmp = 0; echo ("
    "); foreach (scandir($folder, 1) as $filename) { if ($filename<>"." AND $filename <>".."){ if ($countertmp == 0){ $countertmp++; } //End of if ($countertmp == 0) $tmp = "/"; $dir = substr($folder, 14) ."/"; $link = $tmp .$dir .$filename; $showname = substr($filename, 0 ,-4); echo ("
  • "); echo "$showname"; echo ("
  • "); } //End of if ($filename<>"." AND $filename <>".."){ } //End of foreach (scandir($folder, 1) as $filename) echo ("
      "); } //End of if (isset($arr1[0])) echo ("
"); } ?>
Warning: include(/var/www/html/robotigs/includes/wishlistperpart.php): Failed to open stream: No such file or directory in /var/www/html/robotigs/includes/parts_header.php on line 128

Warning: include(): Failed opening '/var/www/html/robotigs/includes/wishlistperpart.php' for inclusion (include_path='.:/usr/share/php') in /var/www/html/robotigs/includes/parts_header.php on line 128